LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

FillLevelsDisplay

Description
Vehicle HUD fill levels display element. Displays fill level bars for the current vehicle configuration
Parent
HUDDisplayElement
Functions

createBackground

Description
Create an empty background overlay as a base frame for this element.
Definition
createBackground()
Code
210function 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
215end

createFillTypeBar

Description
Create 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
stringhudAtlasPathPath to HUD texture atlas
tableframeParent frame HUD element
floatbaseXOrigin X position in screen space
floatbaseYOrigin Y position in screen space
tablefillTypeFill type whose fill level is represented by the created bar
Code
283function 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
301end

createFillTypeFrame

Description
Create a fill type frame for the display of a fill type level state.
Definition
createFillTypeFrame()
Code
245function 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
259end

createFillTypeFrames

Description
Create fill type frames for all known fill types.
Definition
createFillTypeFrames()
Code
234function 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
241end

createFillTypeIcon

Description
Create an icon for a fill type.
Definition
createFillTypeIcon()
Code
263function 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
273end

draw

Description
Draw this element.
Definition
draw()
Code
133function 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
158end

getBackgroundPosition

Description
Get the position of the background element, which provides this element's absolute position.
Definition
getBackgroundPosition(scale Current, float width)
Arguments
scaleCurrentUI scale
floatwidthScaled background width in pixels
Return Values
floatXposition in screen space
floatYposition in screen space
Code
188function 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
191end

new

Description
Creates a new FillLevelsDisplay instance.
Definition
new(string hudAtlasPath)
Arguments
stringhudAtlasPathPath to the HUD texture atlas.
Code
18function 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
39end

refreshFillTypes

Description
Refresh fill type data and elements.
Definition
refreshFillTypes(table fillTypeManager)
Arguments
tablefillTypeManagerFillTypeManager reference
Code
220function 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)
230end

setScale

Description
Set this element's scale.
Definition
setScale()
Code
166function 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()
180end

setVehicle

Description
Set the currently controlled vehicle which provides display data.
Definition
setVehicle(table vehicle)
Arguments
tablevehicleCurrently controlled vehicle
Code
52function FillLevelsDisplay:setVehicle(vehicle)
53 self.vehicle = vehicle
54end

storeScaledValues

Description
Calculate and store scaling values based on the current UI scale.
Definition
storeScaledValues()
Code
195function 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
202end

update

Description
Update the fill levels state.
Definition
update()
Code
109function 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
125end

updateFillLevelBuffers

Description
Update fill levels data.
Definition
updateFillLevelBuffers()
Code
62function 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)
72end

updateFillLevelFrames

Description
Update fill level frames display state.
Definition
updateFillLevelFrames()
Code
76function 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
105end