LUADOC - Farming Simulator 22

DebugManager

Description
This class handles debug element rendering
Parent
AbstractManager
Functions

addFrameElement

Description
Definition
addFrameElement()
Code
106function DebugManager:addFrameElement(element)
107 table.addElement(self.frameElements, element)
108end

addPermanentElement

Description
Definition
addPermanentElement()
Code
94function DebugManager:addPermanentElement(element)
95 table.addElement(self.permanentElements, element)
96end

addPermanentFunction

Description
Definition
addPermanentFunction()
Code
112function DebugManager:addPermanentFunction(funcAndParams)
113 table.addElement(self.permanentFunctions, funcAndParams)
114end

consoleCommandOccluderToggleDebug

Description
Sets all occluders in the scene to be renderable and adds colored half transparent material
Definition
consoleCommandOccluderToggleDebug()
Code
185function DebugManager:consoleCommandOccluderToggleDebug()
186 self.occluderDebugEnabled = not self.occluderDebugEnabled
187
188 if self.occluderDebugEnabled then
189 self.occluderDebugElements = {}
190 local debugMat = self:getDebugMat()
191
192 local count = 0
193 local function checkNode(node)
194 if getHasClassId(node, ClassIds.SHAPE) and getIsOccluderMesh(node) then
195 setIsNonRenderable(node, false)
196 setMaterial(node, debugMat, 0)
197
198 local color = DebugUtil.getDebugColor(node)
199 setShaderParameter(node, "color", color[1], color[2], color[3], 0, false)
200 setShaderParameter(node, "alpha", 0.3, 0, 0, 0, false)
201
202 local _, effectiveCd = getEffectiveClipDistancesWithLOD(node)
203 local cd = getClipDistance(node)
204 local text = string.format("OccluderMesh: %s (CD=%d)", getName(node), math.min(effectiveCd, cd))
205 local debugElement = DebugText.new():createWithNodeToCamera(node, 0.3 + math.random(), text, 0.13):setColor(color[1], color[2], color[3])
206
207 self.occluderDebugElements[node] = debugElement
208 g_debugManager:addPermanentElement(debugElement)
209
210 count = count + 1
211 end
212 end
213
214 I3DUtil.interateRecursively(getRootNode(), checkNode)
215 return string.format("Added debug material to %d occluders", count)
216 else
217 for node, debugElement in pairs(self.occluderDebugElements) do
218 if entityExists(node) then
219 setIsNonRenderable(node, true)
220 end
221 g_debugManager:removePermanentElement(debugElement)
222 end
223 return "Reset occluders to be non-renderable"
224 end
225end

consoleCommandRemovePermanentElements

Description
Definition
consoleCommandRemovePermanentElements()
Code
124function DebugManager:consoleCommandRemovePermanentElements()
125 self.permanentElements = {}
126 self.permanentFunctions = {}
127 return "Cleared all permanent debug elements"
128end

consoleCommandSplineToggleDebug

Description
traverses whole scene and toggles debug visualization for all splines
Definition
consoleCommandSplineToggleDebug()
Code
132function DebugManager:consoleCommandSplineToggleDebug()
133 self.splineDebugEnabled = not self.splineDebugEnabled
134
135 if self.splineDebugEnabled then
136 self.splineDebugElements = {}
137 local debugMat = self:getDebugMat()
138
139 local numAffectedNodes = 0
140
141 local function checkNode(node)
142 if I3DUtil.getIsSpline(node) then
143 self.splineDebugElements[node] = self.splineDebugElements[node] or {}
144
145 DebugUtil.setNodeEffectivelyVisible(node)
146 local r, g, b = unpack(DebugUtil.getDebugColor(node))
147 setMaterial(node, debugMat, 0)
148 setShaderParameter(node, "color", r, g, b, 0, false)
149 setShaderParameter(node, "alpha", 1, 0, 0, 0, false)
150
151 local debugElements = DebugUtil.getSplineDebugElements(node)
152 self.splineDebugElements[node] = debugElements
153 for elemName, debugElement in pairs(debugElements) do
154 if elemName == "splineAttributes" then
155 debugElement:setColor(r, g, b)
156 end
157 g_debugManager:addPermanentElement(debugElement)
158 end
159
160 numAffectedNodes = numAffectedNodes + 1
161 end
162 end
163
164 I3DUtil.interateRecursively(getRootNode(), checkNode)
165 return string.format("Added debug visualization to %d splines", numAffectedNodes)
166 else
167 if self.splineDebugElements then
168 for node, debugElements in pairs(self.splineDebugElements) do
169 if entityExists(node) then
170 setVisibility(node, false)
171 end
172 for _, debugElement in pairs(debugElements) do
173 g_debugManager:removePermanentElement(debugElement)
174 end
175 end
176 self.splineDebugElements = nil
177
178 return string.format("Removed spline debug elements")
179 end
180 end
181end

draw

Description
Definition
draw()
Code
77function DebugManager:draw()
78 for _, element in ipairs(self.permanentElements) do
79 element:draw()
80 end
81
82 for _, element in ipairs(self.permanentFunctions) do
83 element[1](unpack(element[2]))
84 end
85
86 for i=#self.frameElements, 1, -1 do
87 self.frameElements[i]:draw()
88 table.remove(self.frameElements, i)
89 end
90end

initDataStructures

Description
Definition
initDataStructures()
Code
26function DebugManager:initDataStructures()
27 self.permanentElements = {}
28 self.permanentFunctions = {}
29 self.frameElements = {}
30
31 self.debugMaterial = nil
32 if self.debugMaterialNode ~= nil then
33 delete(self.debugMaterialNode)
34 self.debugMaterialNode = nil
35 end
36
37 self.splineDebugEnabled = false
38 self.splineDebugElements = {}
39 self.occluderDebugEnabled = false
40
41 if not self.initialized then
42 addConsoleCommand("gsDebugManagerClearElements", "Removes all permanent elements and functions from DebugManager", "consoleCommandRemovePermanentElements", self)
43 addConsoleCommand("gsSplineDebug", "Toggles debug visualization for all splines currently in the scene", "consoleCommandSplineToggleDebug", self)
44 addConsoleCommand("gsOccluderDebug", "Toggles debug visualization for all occluders currently in the scene", "consoleCommandOccluderToggleDebug", self)
45 self.initialized = true
46 end
47end

new

Description
Creating manager
Definition
new()
Return Values
tableinstanceinstance of object
Code
18function DebugManager.new(customMt)
19 local self = AbstractManager.new(customMt or DebugManager_mt)
20
21 return self
22end

removePermanentElement

Description
Definition
removePermanentElement()
Code
100function DebugManager:removePermanentElement(element)
101 table.removeElement(self.permanentElements, element)
102end

removePermanentFunction

Description
Definition
removePermanentFunction()
Code
118function DebugManager:removePermanentFunction(funcAndParams)
119 table.removeElement(self.permanentFunctions, funcAndParams)
120end

unloadMapData

Description
Definition
unloadMapData()
Code
62function DebugManager:unloadMapData()
63 self.loadedMapData = false
64 self:initDataStructures()
65end

update

Description
Definition
update()
Code
69function DebugManager:update(dt)
70 for _, element in ipairs(self.permanentElements) do
71 element:update(dt)
72 end
73end