Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ColorPickButtonElement
- ConstructionScreen
- ContextActionDisplay
- ControlBarDisplay
- DialogElement
- DynamicFadedBitmapElement
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GameInfoDisplayMobile
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiTopDownCursor
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDSliderElement
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InfoDisplay
- InfoHUDBox
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputGlyphElementUI
- InputHelpDisplay
- KeyValueInfoHUDBox
- ListElement
- ListItemElement
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PictureElement
- PlatformIconElement
- PlayerControlPadDisplay
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- ScrollingLayoutElement
- SettingsModel
- SideNotification
- SideNotificationMobile
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- SpeedSliderDisplay
- StatusBar
- SteeringSliderDisplay
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TerrainLayerElement
- TextBackdropElement
- TextElement
- TextInputElement
- ThreePartBitmapElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VariableWorkWidthHUDExten...
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- WardrobeScreen
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
RenderElement
DescriptionRender display as an overlayParent
GuiElementXML Configuration Parameters
RenderElement#filename | string Path to the i3d to be rendered in the overlay |
RenderElement#cameraPath | string Node of the camera to be used to show the render |
RenderElement#superSamplingFactor | number [optional] Supersampling factor the render size should be increased with, to imitate anti-aliasing by supersampling |
Functions
- copyAttributes
- createOverlay
- createScene
- delete
- destroyScene
- draw
- getSceneRoot
- loadFromXML
- loadProfile
- new
- setRenderDirty
- setScene
- setSceneFinished
- update
copyAttributes
DescriptionDefinitioncopyAttributes()Code
70 | function 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 |
78 | end |
createOverlay
DescriptionDefinitioncreateOverlay()Code
148 | function 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 |
170 | end |
createScene
DescriptionCreate the scene and the overlay. Call destroyScene to clean up resources.Definition
createScene()Code
82 | function RenderElement:createScene() |
83 | self:setScene(self.filename) |
84 | end |
delete
DescriptionDefinitiondelete()Code
34 | function RenderElement:delete() |
35 | self:destroyScene() |
36 | |
37 | RenderElement:superClass().delete(self) |
38 | end |
destroyScene
DescriptionDestroy the scene and the overlay, cleaning up resources.Definition
destroyScene()Code
88 | function 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 |
103 | end |
draw
DescriptionDefinitiondraw()Code
185 | function 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) |
233 | end |
getSceneRoot
DescriptionDefinitiongetSceneRoot()Code
243 | function RenderElement:getSceneRoot() |
244 | return self.scene |
245 | end |
loadFromXML
DescriptionDefinitionloadFromXML()Code
42 | function 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") |
52 | end |
loadProfile
DescriptionDefinitionloadProfile()Code
56 | function 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 |
66 | end |
new
DescriptionDefinitionnew()Code
20 | function 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 |
30 | end |
setRenderDirty
DescriptionDefinitionsetRenderDirty()Code
249 | function RenderElement:setRenderDirty() |
250 | self.isRenderDirty = true |
251 | end |
setScene
DescriptionDefinitionsetScene()Code
107 | function 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) |
122 | end |
setSceneFinished
DescriptionDefinitionsetSceneFinished()Code
126 | function 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 |
144 | end |
update
DescriptionDefinitionupdate()Code
174 | function 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 |
181 | end |