Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ContextActionDisplay
- DialogElement
- FieldInfoDisplay
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputHelpDisplay
- ListElement
- ListItemElement
- MapHotspot
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- SettingsModel
- SideNotification
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- StableListElement
- StatusBar
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TextElement
- TextInputElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
FillLevelsDisplay
DescriptionVehicle HUD fill levels display element. Displays fill level bars for the current vehicle configurationParent
HUDDisplayElementFunctions
- createBackground
- createFillTypeBar
- createFillTypeFrame
- createFillTypeFrames
- createFillTypeIcon
- draw
- getBackgroundPosition
- new
- refreshFillTypes
- setScale
- setVehicle
- storeScaledValues
- update
- updateFillLevelBuffers
- updateFillLevelFrames
createBackground
DescriptionCreate an empty background overlay as a base frame for this element.Definition
createBackground()Code
210 | function FillLevelsDisplay.createBackground() |
211 | local width, height = getNormalizedScreenValues(unpack(FillLevelsDisplay.SIZE.BACKGROUND)) |
212 | local posX, posY = FillLevelsDisplay.getBackgroundPosition(1, width) |
213 | |
214 | return Overlay:new(nil, posX, posY, width, height) -- empty overlay, only used as a positioning frame |
215 | end |
createFillTypeBar
DescriptionCreate a fill type bar used to display a fill level. The newly created bar is added to the given parent frame and an internal collection indexable by fill type index.Definition
createFillTypeBar(string hudAtlasPath, table frame, float baseX, float baseY, table fillType)Arguments
string | hudAtlasPath | Path to HUD texture atlas |
table | frame | Parent frame HUD element |
float | baseX | Origin X position in screen space |
float | baseY | Origin Y position in screen space |
table | fillType | Fill type whose fill level is represented by the created bar |
283 | function FillLevelsDisplay:createFillTypeBar(hudAtlasPath, frame, baseX, baseY, fillType) |
284 | local width, height = getNormalizedScreenValues(unpack(FillLevelsDisplay.SIZE.BAR)) |
285 | local barX, barY = getNormalizedScreenValues(unpack(FillLevelsDisplay.POSITION.BAR)) |
286 | local posX, posY = baseX + barX, baseY + barY |
287 | |
288 | local bgOverlay = Overlay:new(hudAtlasPath, posX, posY, width, height) |
289 | bgOverlay:setUVs(getNormalizedUVs(HUDElement.UV.FILL)) |
290 | bgOverlay:setColor(unpack(FillLevelsDisplay.COLOR.BAR_BACKGROUND)) |
291 | frame:addChild(HUDElement:new(bgOverlay)) |
292 | |
293 | local fillOverlay = Overlay:new(hudAtlasPath, posX, posY, width, height) |
294 | fillOverlay:setUVs(getNormalizedUVs(HUDElement.UV.FILL)) |
295 | fillOverlay:setColor(unpack(FillLevelsDisplay.COLOR.BAR_FILLED)) |
296 | local fillBarElement = HUDElement:new(fillOverlay) |
297 | frame:addChild(fillBarElement) |
298 | |
299 | -- store the fill bar for scaling with fill level |
300 | self.fillTypeLevelBars[fillType.index] = fillBarElement |
301 | end |
createFillTypeFrame
DescriptionCreate a fill type frame for the display of a fill type level state.Definition
createFillTypeFrame()Code
245 | function FillLevelsDisplay:createFillTypeFrame(hudAtlasPath, baseX, baseY, fillType) |
246 | local frameWidth, frameHeight = getNormalizedScreenValues(unpack(FillLevelsDisplay.SIZE.FILL_TYPE_FRAME)) |
247 | local frameX, frameY = getNormalizedScreenValues(unpack(FillLevelsDisplay.POSITION.FILL_TYPE_FRAME)) |
248 | |
249 | local posX, posY = baseX + frameX, baseY + frameY |
250 | |
251 | local frameOverlay = Overlay:new(nil, posX, posY, frameWidth, frameHeight) |
252 | local frame = HUDElement:new(frameOverlay) |
253 | frame:setVisible(false) |
254 | |
255 | self:createFillTypeIcon(frame, posX, posY, fillType) |
256 | self:createFillTypeBar(hudAtlasPath, frame, posX, posY, fillType) |
257 | |
258 | return frame |
259 | end |
createFillTypeFrames
DescriptionCreate fill type frames for all known fill types.Definition
createFillTypeFrames()Code
234 | function FillLevelsDisplay:createFillTypeFrames(fillTypeManager, hudAtlasPath, baseX, baseY) |
235 | for _, fillType in ipairs(fillTypeManager:getFillTypes()) do |
236 | local frame = self:createFillTypeFrame(hudAtlasPath, baseX, baseY, fillType) |
237 | self.fillTypeFrames[fillType.index] = frame |
238 | frame:setScale(self.uiScale, self.uiScale) |
239 | self:addChild(frame) |
240 | end |
241 | end |
createFillTypeIcon
DescriptionCreate an icon for a fill type.Definition
createFillTypeIcon()Code
263 | function FillLevelsDisplay:createFillTypeIcon(frame, baseX, baseY, fillType) |
264 | if fillType.hudOverlayFilenameSmall ~= "" then |
265 | local width, height = getNormalizedScreenValues(unpack(FillLevelsDisplay.SIZE.FILL_TYPE_ICON)) |
266 | local posX, posY = getNormalizedScreenValues(unpack(FillLevelsDisplay.POSITION.FILL_TYPE_ICON)) |
267 | |
268 | local iconOverlay = Overlay:new(fillType.hudOverlayFilenameSmall, baseX + posX, baseY + posY, width, height) |
269 | iconOverlay:setColor(unpack(FillLevelsDisplay.COLOR.FILL_TYPE_ICON)) |
270 | |
271 | frame:addChild(HUDElement:new(iconOverlay)) |
272 | end |
273 | end |
draw
DescriptionDraw this element.Definition
draw()Code
133 | function FillLevelsDisplay:draw() |
134 | FillLevelsDisplay:superClass().draw(self) |
135 | |
136 | if self:getVisible() then |
137 | local baseX, baseY = self:getPosition() |
138 | local width = self:getWidth() |
139 | |
140 | for i = 1, #self.fillLevelTextBuffer do |
141 | local fillLevelText = self.fillLevelTextBuffer[i] |
142 | |
143 | local posX = baseX + width - self.fillLevelTextOffsetX |
144 | local posY = baseY + (i - 1) * self.frameHeight + self.fillLevelTextOffsetY |
145 | |
146 | setTextColor(unpack(FillLevelsDisplay.COLOR.FILL_LEVEL_TEXT)) |
147 | setTextBold(false) |
148 | setTextAlignment(RenderText.ALIGN_RIGHT) |
149 | |
150 | renderText(posX, posY, self.fillLevelTextSize, fillLevelText) |
151 | |
152 | if self.fillTypeTextBuffer[i] ~= nil then |
153 | local posY = baseY + (i - 1) * self.frameHeight + self.fillTypeTextOffsetY |
154 | renderText(posX, posY, self.fillLevelTextSize, self.fillTypeTextBuffer[i]) |
155 | end |
156 | end |
157 | end |
158 | end |
getBackgroundPosition
DescriptionGet the position of the background element, which provides this element's absolute position.Definition
getBackgroundPosition(scale Current, float width)Arguments
scale | Current | UI scale |
float | width | Scaled background width in pixels |
float | X | position in screen space |
float | Y | position in screen space |
188 | function FillLevelsDisplay.getBackgroundPosition(scale, width) |
189 | local offX, offY = getNormalizedScreenValues(unpack(FillLevelsDisplay.POSITION.BACKGROUND)) |
190 | return 1 - g_safeFrameOffsetX - width - offX * scale, g_safeFrameOffsetY - offY * scale |
191 | end |
new
DescriptionCreates a new FillLevelsDisplay instance.Definition
new(string hudAtlasPath)Arguments
string | hudAtlasPath | Path to the HUD texture atlas. |
18 | function FillLevelsDisplay.new(hudAtlasPath) |
19 | local backgroundOverlay = FillLevelsDisplay.createBackground() |
20 | local self = FillLevelsDisplay:superClass().new(FillLevelsDisplay_mt, backgroundOverlay, nil) |
21 | |
22 | self.uiScale = 1.0 |
23 | self.hudAtlasPath = hudAtlasPath |
24 | |
25 | self.vehicle = nil -- currently controlled vehicle |
26 | self.fillLevelBuffer = {} |
27 | self.fillLevelTextBuffer = {} |
28 | self.fillTypeTextBuffer = {} |
29 | |
30 | self.fillTypeFrames = {} -- fill type index -> HUDElement |
31 | self.fillTypeLevelBars = {} -- fill type index -> HUDElement |
32 | |
33 | self.frameHeight = 0 |
34 | self.fillLevelTextSize = 0 |
35 | self.fillLevelTextOffsetX = 0 |
36 | self.fillLevelTextOffsetY = 0 |
37 | |
38 | return self |
39 | end |
refreshFillTypes
DescriptionRefresh fill type data and elements.Definition
refreshFillTypes(table fillTypeManager)Arguments
table | fillTypeManager | FillTypeManager reference |
220 | function FillLevelsDisplay:refreshFillTypes(fillTypeManager) |
221 | for _, v in pairs(self.fillTypeFrames) do |
222 | v:delete() |
223 | end |
224 | |
225 | clearTable(self.fillTypeFrames) |
226 | clearTable(self.fillTypeLevelBars) |
227 | |
228 | local posX, posY = self:getPosition() |
229 | self:createFillTypeFrames(fillTypeManager, self.hudAtlasPath, posX, posY) |
230 | end |
setScale
DescriptionSet this element's scale.Definition
setScale()Code
166 | function FillLevelsDisplay:setScale(uiScale) |
167 | FillLevelsDisplay:superClass().setScale(self, uiScale, uiScale) |
168 | |
169 | local currentVisibility = self:getVisible() |
170 | self:setVisible(true, false) |
171 | |
172 | self.uiScale = uiScale |
173 | local posX, posY = FillLevelsDisplay.getBackgroundPosition(uiScale, self:getWidth()) |
174 | self:setPosition(posX, posY) |
175 | |
176 | self:storeOriginalPosition() |
177 | self:setVisible(currentVisibility, false) |
178 | |
179 | self:storeScaledValues() |
180 | end |
setVehicle
DescriptionSet the currently controlled vehicle which provides display data.Definition
setVehicle(table vehicle)Arguments
table | vehicle | Currently controlled vehicle |
52 | function FillLevelsDisplay:setVehicle(vehicle) |
53 | self.vehicle = vehicle |
54 | end |
storeScaledValues
DescriptionCalculate and store scaling values based on the current UI scale.Definition
storeScaledValues()Code
195 | function FillLevelsDisplay:storeScaledValues() |
196 | self.fillLevelTextSize = self:scalePixelToScreenHeight(HUDElement.TEXT_SIZE.DEFAULT_TEXT) |
197 | self.fillLevelTextOffsetX, self.fillLevelTextOffsetY = self:scalePixelToScreenVector(FillLevelsDisplay.POSITION.FILL_LEVEL_TEXT) |
198 | |
199 | self.fillTypeTextOffsetX, self.fillTypeTextOffsetY = self:scalePixelToScreenVector(FillLevelsDisplay.POSITION.FILL_TYPE_TEXT) |
200 | |
201 | self.frameHeight = self:scalePixelToScreenVector(FillLevelsDisplay.SIZE.FILL_TYPE_FRAME) * 0.8 |
202 | end |
update
DescriptionUpdate the fill levels state.Definition
update()Code
109 | function FillLevelsDisplay:update(dt) |
110 | FillLevelsDisplay:superClass().update(self, dt) |
111 | |
112 | if self.vehicle ~= nil then |
113 | self:updateFillLevelBuffers() |
114 | |
115 | if #self.fillLevelBuffer > 0 then |
116 | if not self:getVisible() and self.animation:getFinished() then |
117 | self:setVisible(true, true) |
118 | end |
119 | |
120 | self:updateFillLevelFrames() |
121 | elseif self:getVisible() and self.animation:getFinished() then |
122 | self:setVisible(false, true) |
123 | end |
124 | end |
125 | end |
updateFillLevelBuffers
DescriptionUpdate fill levels data.Definition
updateFillLevelBuffers()Code
62 | function FillLevelsDisplay:updateFillLevelBuffers() |
63 | clearTable(self.fillLevelTextBuffer) |
64 | clearTable(self.fillLevelBuffer) |
65 | clearTable(self.fillTypeTextBuffer) |
66 | |
67 | for i = 1, #self.fillTypeFrames do |
68 | self.fillTypeFrames[i]:setVisible(false) |
69 | end |
70 | |
71 | self.vehicle:getFillLevelInformation(self.fillLevelBuffer) |
72 | end |
updateFillLevelFrames
DescriptionUpdate fill level frames display state.Definition
updateFillLevelFrames()Code
76 | function FillLevelsDisplay:updateFillLevelFrames() |
77 | local _, yOffset = self:getPosition() |
78 | for i = 1, #self.fillLevelBuffer do |
79 | local fillLevelInformation = self.fillLevelBuffer[i] |
80 | local value = 0 |
81 | if fillLevelInformation.capacity > 0 then |
82 | value = fillLevelInformation.fillLevel / fillLevelInformation.capacity |
83 | end |
84 | |
85 | local frame = self.fillTypeFrames[fillLevelInformation.fillType] |
86 | frame:setVisible(true) |
87 | |
88 | local fillBar = self.fillTypeLevelBars[fillLevelInformation.fillType] |
89 | local _, yScale = fillBar:getScale() |
90 | fillBar:setScale(value * self.uiScale, yScale) |
91 | |
92 | local posX, posY = frame:getPosition() |
93 | frame:setPosition(posX, yOffset) |
94 | |
95 | local fillText = string.format("%d (%d%%)", MathUtil.round(fillLevelInformation.fillLevel), 100 * value) |
96 | self.fillLevelTextBuffer[#self.fillLevelTextBuffer + 1] = fillText |
97 | |
98 | if fillLevelInformation.fillType ~= FillType.UNKNOWN then |
99 | local fillTypeText = g_fillTypeManager:getFillTypeByIndex(fillLevelInformation.fillType).title |
100 | self.fillTypeTextBuffer[#self.fillLevelTextBuffer] = fillTypeText |
101 | end |
102 | |
103 | yOffset = yOffset + self.frameHeight |
104 | end |
105 | end |