LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

MixerWagonHUDExtension

Description
Custom HUD drawing extension for MixerWagon. Displays the fill levels of the mixer wagon.
Parent
VehicleHUDExtension
Functions

canDraw

Description
Determine if the HUD extension should be drawn.
Definition
canDraw()
Code
72function MixerWagonHUDExtension:canDraw()
73 return self.vehicle:getIsActiveForInput(true)
74end

draw

Description
Draw mixing ratio information for a mixing wagon when it is active.
Definition
draw(float leftPosX, float rightPosX, float posY)
Arguments
floatleftPosXLeft input help panel column start position
floatrightPosXRight input help panel column start position
floatposYCurrent input help panel drawing vertical offset
Return Values
floatModifiedinput help panel drawing vertical offset
Code
89function MixerWagonHUDExtension:draw(leftPosX, rightPosX, posY)
90 if not self:canDraw() then
91 return
92 end
93
94 setTextColor(unpack(self.uiTextColor))
95 setTextBold(true)
96 setTextAlignment(RenderText.ALIGN_LEFT)
97 renderText(leftPosX, posY + (self.helpHeightPerFruit - self.uiTextSize) * 0.5, self.uiTextSize, g_i18n:getText("info_mixingRatio"))
98 setTextBold(false)
99
100 local totalFillLevel = 0
101 if self.vehicle:getFillUnitFillLevel(self.mixerWagon.fillUnitIndex) > 0 then
102 for i, mixerWagonFillType in ipairs(self.mixerWagon.mixerWagonFillTypes) do
103 totalFillLevel = totalFillLevel + mixerWagonFillType.fillLevel
104 -- fill type display status is a synchronous array -> set corresponding fill level info
105 self.fillTypeStatus[i].fillLevel = mixerWagonFillType.fillLevel
106 end
107 end
108
109 for _, fillTypeDisplay in ipairs(self.fillTypeStatus) do
110 posY = posY - self.helpHeightPerFruit
111
112 local percentage = 0
113 if self.vehicle:getFillUnitFillLevel(self.mixerWagon.fillUnitIndex) > 0 then
114 percentage = fillTypeDisplay.fillLevel / totalFillLevel
115 end
116
117 if fillTypeDisplay.fillLevel > 0 then
118 if self.vehicle:getFillUnitFillType(self.mixerWagon.fillUnitIndex) ~= FillType.FORAGE_MIXING or (percentage >= fillTypeDisplay.minPercentage and percentage <= fillTypeDisplay.maxPercentage) then
119 fillTypeDisplay.statusBar:setColor(unpack(fillTypeDisplay.statusBarColor))
120 else
121 fillTypeDisplay.statusBar:setColor(unpack(fillTypeDisplay.statusBarColor2))
122 end
123 end
124
125 fillTypeDisplay.statusBar:setPosition(rightPosX - fillTypeDisplay.statusBar.width, posY + (self.helpHeightPerFruit - fillTypeDisplay.statusBar.height) * 0.5)
126 fillTypeDisplay.statusBar:setValue(percentage)
127 fillTypeDisplay.statusBar:render()
128
129 if fillTypeDisplay.overlay ~= nil then
130 fillTypeDisplay.overlay:setPosition(leftPosX, posY + (self.helpHeightPerFruit - fillTypeDisplay.overlay.height) * 0.5)
131 fillTypeDisplay.overlay:render()
132 end
133
134 renderText(leftPosX + self.fillLevelTextOffsetX, posY + self.fillLevelTextOffsetY, self.uiTextSize, string.format("%1.2f%%", percentage * 100))
135
136 local y = fillTypeDisplay.statusBar.y + fillTypeDisplay.statusBar.height * 0.5
137 local maxLeft = fillTypeDisplay.statusBar.x + fillTypeDisplay.statusBar.width
138 local xLeft = math.min(fillTypeDisplay.statusBar.x + fillTypeDisplay.statusBar.width * fillTypeDisplay.minPercentage, maxLeft)
139 local xRight = math.min(fillTypeDisplay.statusBar.x + fillTypeDisplay.statusBar.width * fillTypeDisplay.maxPercentage, maxLeft)
140
141 self.fillRangeMarkerOverlay:setInvertX(false)
142 self.fillRangeMarkerOverlay:setPosition(xLeft, y)
143 self.fillRangeMarkerOverlay:render()
144 self.fillRangeMarkerOverlay:setInvertX(true) -- base sprite points right, need to point to the left now
145 self.fillRangeMarkerOverlay:setPosition(xRight - self.fillRangeMarkerOverlay.width, y)
146 self.fillRangeMarkerOverlay:render()
147 end
148
149 return posY
150end

getDisplayHeight

Description
Get this HUD extension's display height.
Definition
getDisplayHeight()
Return Values
floatDisplayheight in screen space
Code
79function MixerWagonHUDExtension:getDisplayHeight()
80 return self:canDraw() and self.displayHeight or 0
81end

new

Description
Create a new instance of MixerWagonHUDExtension.
Definition
new(table vehicle, float uiScale, table uiTextColor, float uiTextSize)
Arguments
tablevehicleVehicle which has the specialization required by a sub-class
floatuiScaleCurrent UI scale
tableuiTextColorHUD text drawing color as an RGBA array
floatuiTextSizeHUD text size
Code
24function MixerWagonHUDExtension.new(vehicle, uiScale, uiTextColor, uiTextSize)
25 local self = VehicleHUDExtension.new(MixerWagonHUDExtension_mt, vehicle, uiScale, uiTextColor, uiTextSize)
26 self.mixerWagon = vehicle.spec_mixerWagon
27
28 self.fillTypeStatus = {} -- array of fill type display entries, definition see below
29
30 for _, mixerWagonFillType in ipairs(self.mixerWagon.mixerWagonFillTypes) do
31 local fillType = g_fillTypeManager:getFillTypeByName(mixerWagonFillType.name)
32 if fillType ~= nil then
33 local entry = {fillType=fillType, overlay=nil, statusBar=nil, statusBarColor=nil, statusBarColor2=nil,
34 minPercentage=0, maxPercentage=0, fillLevel=0}
35
36 entry.minPercentage = mixerWagonFillType.minPercentage
37 entry.maxPercentage = mixerWagonFillType.maxPercentage
38
39 local width, height = getNormalizedScreenValues(20 * uiScale, 20 * uiScale)
40 entry.overlay = Overlay:new(fillType.hudOverlayFilenameSmall, 0, 0, width, height)
41 entry.overlay:setColor(unpack(uiTextColor))
42 self:addComponentForCleanup(entry.overlay)
43
44 entry.statusBarColor = MixerWagonHUDExtension.COLOR.STATUS_BAR_GOOD
45 entry.statusBarColor2 = MixerWagonHUDExtension.COLOR.STATUS_BAR_BAD
46 local width, height = getNormalizedScreenValues(208 * uiScale, 12 * uiScale)
47 entry.statusBar = StatusBar:new(g_baseUIFilename, g_colorBgUVs, nil, MixerWagonHUDExtension.COLOR.STATUS_BAR_BG, entry.statusBarColor2, nil, 0, 0, width, height)
48 self:addComponentForCleanup(entry.statusBar)
49
50 table.insert(self.fillTypeStatus, entry)
51 end
52 end
53
54 self.fillLevelTextOffsetX, self.fillLevelTextOffsetY = getNormalizedScreenValues(28 * uiScale, 7 * uiScale)
55 _, self.helpHeightPerFruit = getNormalizedScreenValues(0, 28 * uiScale)
56 _, self.helpHeightOffset = getNormalizedScreenValues(0, 12 * uiScale)
57
58 local width, height = getNormalizedScreenValues(9 * uiScale, 12.5 * uiScale)
59 self.fillRangeMarkerOverlay = Overlay:new(g_baseUIFilename, 0, 0, width, height)
60 self.fillRangeMarkerOverlay:setAlignment(Overlay.ALIGN_VERTICAL_MIDDLE, Overlay.ALIGN_HORIZONTAL_LEFT)
61 self.fillRangeMarkerOverlay:setUVs(getNormalizedUVs(MixerWagonHUDExtension.UV.RANGE_MARKER_ARROW))
62 self.fillRangeMarkerOverlay:setColor(unpack(uiTextColor))
63 self:addComponentForCleanup(self.fillRangeMarkerOverlay)
64
65 self.displayHeight = (#self.mixerWagon.mixerWagonFillTypes + 1) * self.helpHeightPerFruit + self.helpHeightOffset
66
67 return self
68end