LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

RenderElement

Description
Render display as an overlay
Parent
GuiElement
XML Configuration Parameters
RenderElement#filenamestring Path to the i3d to be rendered in the overlay
RenderElement#cameraPathstring Node of the camera to be used to show the render
RenderElement#superSamplingFactornumber [optional] Supersampling factor the render size should be increased with, to imitate anti-aliasing by supersampling

Functions

copyAttributes

Description
Definition
copyAttributes()
Code
70function RenderElement:copyAttributes(src)
71 RenderElement:superClass().copyAttributes(self, src)
72
73 self.filename = src.filename
74 self.cameraPath = src.cameraPath
75 self.superSamplingFactor = src.superSamplingFactor
76
77 self.onRenderLoadCallback = src.onRenderLoadCallback
78end

createOverlay

Description
Definition
createOverlay()
Code
148function RenderElement:createOverlay()
149 if self.overlay ~= 0 then
150 delete(self.overlay)
151 self.overlay = 0
152 end
153
154 -- Use downsampling to imitate anti-aliasing, as the postFx for it is not available
155 -- on render overlays
156 local resolutionX = math.ceil(g_screenWidth * self.absSize[1]) * self.superSamplingFactor
157 local resolutionY = math.ceil(g_screenHeight * self.absSize[2]) * self.superSamplingFactor
158
159 local aspectRatio = resolutionX / resolutionY
160
161 local camera = I3DUtil.indexToObject(self.scene, self.cameraPath)
162 if camera == nil then
163 Logging.error("Could not find camera node '%s' in scene", self.cameraPath)
164 else
165 self.overlay = createRenderOverlay(camera, aspectRatio, resolutionX, resolutionY, true, self.shapesMask, self.lightMask)
166
167 self.isRenderDirty = true
168 self:raiseCallback("onRenderLoadCallback", self.scene, self.overlay)
169 end
170end

createScene

Description
Create the scene and the overlay. Call destroyScene to clean up resources.
Definition
createScene()
Code
82function RenderElement:createScene()
83 self:setScene(self.filename)
84end

delete

Description
Definition
delete()
Code
34function RenderElement:delete()
35 self:destroyScene()
36
37 RenderElement:superClass().delete(self)
38end

destroyScene

Description
Destroy the scene and the overlay, cleaning up resources.
Definition
destroyScene()
Code
88function RenderElement:destroyScene()
89 if self.loadingRequestId ~= nil then
90 g_i3DManager:cancelStreamI3DFile(self.loadingRequestId)
91 self.loadingRequestId = nil
92 end
93
94 if self.overlay ~= 0 then
95 delete(self.overlay)
96 self.overlay = 0
97 end
98
99 if self.scene then
100 delete(self.scene)
101 self.scene = nil
102 end
103end

draw

Description
Definition
draw()
Code
185function RenderElement:draw(clipX1, clipY1, clipX2, clipY2)
186 if not self.isLoading and self.overlay ~= 0 then
187
188 local posX, posY, sizeX, sizeY = self.absPosition[1], self.absPosition[2], self.size[1], self.size[2]
189 local u1, v1, u2, v2, u3, v3, u4, v4 = 0, 0, 0, 1, 1, 0, 1, 1
190
191 -- Needs clipping
192 if clipX1 ~= nil then
193 local oldX1, oldY1, oldX2, oldY2 = posX, posY, sizeX + posX, sizeY + posY
194
195 local posX2 = posX + sizeX
196 local posY2 = posY + sizeY
197
198 posX = math.max(posX, clipX1)
199 posY = math.max(posY, clipY1)
200
201 sizeX = math.max(math.min(posX2, clipX2) - posX, 0)
202 sizeY = math.max(math.min(posY2, clipY2) - posY, 0)
203
204 local p1 = (posX - oldX1) / (oldX2 - oldX1) -- start x
205 local p2 = (posY - oldY1) / (oldY2 - oldY1) -- start y
206 local p3 = ((posX + sizeX) - oldX1) / (oldX2 - oldX1) -- end x
207 local p4 = ((posY + sizeY) - oldY1) / (oldY2 - oldY1) -- end y
208
209 -- start x, start y
210 u1 = p1
211 v1 = p2
212
213 -- start x, end y
214 u2 = p1
215 v2 = p4
216
217 -- end x, start y
218 u3 = p3
219 v3 = p2
220
221 -- end x, end y
222 u4 = p3
223 v4 = p4
224 end
225
226 if u1 ~= u3 and v1 ~= v2 then
227 setOverlayUVs(self.overlay, u1, v1, u2, v2, u3, v3, u4, v4)
228 renderOverlay(self.overlay, posX, posY, sizeX, sizeY)
229 end
230 end
231
232 RenderElement:superClass().draw(self, clipX1, clipY1, clipX2, clipY2)
233end

getSceneRoot

Description
Definition
getSceneRoot()
Code
243function RenderElement:getSceneRoot()
244 return self.scene
245end

loadFromXML

Description
Definition
loadFromXML()
Code
42function RenderElement:loadFromXML(xmlFile, key)
43 RenderElement:superClass().loadFromXML(self, xmlFile, key)
44
45 self.filename = getXMLString(xmlFile, key .. "#filename")
46 self.cameraPath = getXMLString(xmlFile, key .. "#cameraNode")
47 self.superSamplingFactor = getXMLInt(xmlFile, key .. "#superSamplingFactor")
48 self.shapesMask = getXMLInt(xmlFile, key .. "#shapesMask") or self.shapesMask
49 self.lightMask = getXMLInt(xmlFile, key .. "#lightMask") or self.lightMask
50
51 self:addCallback(xmlFile, key.."#onRenderLoad", "onRenderLoadCallback")
52end

loadProfile

Description
Definition
loadProfile()
Code
56function RenderElement:loadProfile(profile, applyProfile)
57 RenderElement:superClass().loadProfile(self, profile, applyProfile)
58
59 self.filename = profile:getValue("filename")
60 self.cameraPath = profile:getValue("cameraNode")
61 self.superSamplingFactor = profile:getNumber("superSamplingFactor")
62
63 if applyProfile then
64 self:setScene(self.filename)
65 end
66end

new

Description
Definition
new()
Code
20function RenderElement.new(target, custom_mt)
21 local self = GuiElement.new(target, custom_mt or RenderElement_mt)
22
23 self.cameraPath = nil
24 self.isRenderDirty = false
25 self.overlay = 0
26 self.shapesMask = 255 -- show all objects with bits 1-8 enabled
27 self.lightMask = 67108864 -- per default only render lights with bit 26 enabled
28
29 return self
30end

setRenderDirty

Description
Definition
setRenderDirty()
Code
249function RenderElement:setRenderDirty()
250 self.isRenderDirty = true
251end

setScene

Description
Definition
setScene()
Code
107function RenderElement:setScene(filename)
108 if self.scene ~= nil then
109 delete(self.scene)
110 self.scene = nil
111 end
112
113 if self.loadingRequestId ~= nil then
114 g_i3DManager:cancelStreamI3DFile(self.loadingRequestId)
115 self.loadingRequestId = nil
116 end
117
118 self.isLoading = true
119 self.filename = filename
120
121 self.loadingRequestId = g_i3DManager:loadI3DFileAsync(filename, false, false, RenderElement.setSceneFinished, self, nil)
122end

setSceneFinished

Description
Definition
setSceneFinished()
Code
126function RenderElement:setSceneFinished(node, failedReason, args)
127 self.isLoading = false
128 self.loadingRequestId = nil
129
130 if failedReason == LoadI3DFailedReason.FILE_NOT_FOUND or failedReason == LoadI3DFailedReason.UNKNOWN then
131 Logging.error("Failed to load character creation scene from '%s'", self.filename)
132 end
133
134 if failedReason == LoadI3DFailedReason.NONE then
135 self.scene = node
136 link(getRootNode(), node)
137
138 -- The overlay is bound to the scene, so we need to recreate the overlay
139 self:createOverlay()
140
141 elseif node ~= 0 then
142 delete(node)
143 end
144end

update

Description
Definition
update()
Code
174function RenderElement:update(dt)
175 RenderElement:superClass().update(self, dt)
176
177 if self.isRenderDirty and self.overlay ~= 0 then
178 updateRenderOverlay(self.overlay)
179 self.isRenderDirty = false
180 end
181end