LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

SteeringSliderDisplay

Description
Vehicle Steering Slider for Mobile Version
Parent
HUDDisplayElement
Functions

createBackground

Description
Create an empty background overlay as a base frame for this element.
Definition
createBackground()
Code
255function SteeringSliderDisplay.createBackground()
256 local width, height = getNormalizedScreenValues(unpack(SteeringSliderDisplay.SIZE.BACKGROUND))
257 local posX, posY = SteeringSliderDisplay.getBackgroundPosition(1, width)
258
259 return Overlay.new(nil, posX, posY, width, height) -- empty overlay, only used as a positioning frame
260end

createComponents

Description
Definition
createComponents()
Code
61function SteeringSliderDisplay:createComponents()
62 local baseX, baseY = self:getPosition()
63
64 --background
65 local bgSizeX, bgSizeY = getNormalizedScreenValues(unpack(SteeringSliderDisplay.SIZE.BACKGROUND))
66 local backgroundOverlay = Overlay.new(self.hudAtlasPath, baseX, baseY, bgSizeX, bgSizeY)
67 backgroundOverlay:setUVs(GuiUtils.getUVs(SteeringSliderDisplay.UV.BACKGROUND))
68 self.backgroundHudElement = HUDElement.new(backgroundOverlay)
69
70 self:addChild(self.backgroundHudElement)
71
72 -- slider
73 local slOffX, slOffY = getNormalizedScreenValues(unpack(SteeringSliderDisplay.POSITION.SLIDER_OFFSET))
74 local slSizeX, slSizeY = getNormalizedScreenValues(unpack(SteeringSliderDisplay.SIZE.SLIDER_SIZE))
75 local slBorderX, _ = getNormalizedScreenValues(unpack(SteeringSliderDisplay.SIZE.SLIDER_BORDER))
76 local sliderOverlay = Overlay.new(self.hudAtlasPath, baseX+slOffX, baseY+slOffY, slSizeX, slSizeY)
77 sliderOverlay:setUVs(GuiUtils.getUVs(SteeringSliderDisplay.UV.SLIDER))
78
79 self.sliderPosX = slOffX - slBorderX
80 self.sliderPosY = slOffY
81 self.backgroundSizeX = bgSizeX - slOffX * 2
82 self.sliderSizeX = slSizeX - slBorderX * 2
83
84 local sliderMin = self.sliderPosX
85 local sliderMax = sliderMin + self.backgroundSizeX - self.sliderSizeX
86 local sliderCenter = sliderMin + (self.backgroundSizeX - self.sliderSizeX) * 0.5
87 self.sliderHudElement = HUDSliderElement.new(sliderOverlay, backgroundOverlay, {0.12, 0.05}, 1, 2.5, 1, sliderMin, sliderCenter, sliderMax)
88 self.sliderHudElement:setCallback(self.onSliderPositionChanged, self)
89
90 self:addChild(self.sliderHudElement)
91 self.sliderHudElement:setAxisPosition(sliderCenter)
92end

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
244function SteeringSliderDisplay.getBackgroundPosition(scale, width)
245 local offX, offY = getNormalizedScreenValues(unpack(SteeringSliderDisplay.POSITION.BACKGROUND))
246 return g_safeFrameOffsetX + offX * scale, g_safeFrameOffsetY - offY * scale
247end

getIsSliderActive

Description
Definition
getIsSliderActive()
Code
131function SteeringSliderDisplay:getIsSliderActive()
132 if self.lastInputHelpMode == GS_INPUT_HELP_MODE_GAMEPAD then
133 return false
134 end
135
136 if self.lastGyroscopeSteeringState then
137 return false
138 end
139
140 if self.vehicle ~= nil and self.vehicle:getIsAIActive() then
141 return false
142 end
143
144 if self.player ~= nil then
145 return false
146 end
147
148 return true
149end

getSteeringValue

Description
Definition
getSteeringValue()
Code
112function SteeringSliderDisplay:getSteeringValue()
113 -- IN: self.sliderPosition = [0,1]
114
115 local norm = self.sliderPosition * 2 - 1
116 -- norm = [-1,1]
117
118 -- no need for squaring if we are in the middle (and prevent from division by zero)
119 if norm == 0 then
120 return norm
121 end
122
123 -- Store sign so we can turn to [-1,1] again after the squaring.
124 local sign = norm / math.abs(norm)
125
126 return norm * norm * sign
127end

new

Description
Creates a new SteeringSliderDisplay instance.
Definition
new(string hudAtlasPath)
Arguments
stringhudAtlasPathPath to the HUD texture atlas.
Code
16function SteeringSliderDisplay.new(hud, hudAtlasPath)
17 local backgroundOverlay = SteeringSliderDisplay.createBackground()
18 local self = SteeringSliderDisplay:superClass().new(backgroundOverlay, nil, SteeringSliderDisplay_mt)
19
20 self.hud = hud
21 self.uiScale = 1.0
22 self.hudAtlasPath = hudAtlasPath
23
24 self.vehicle = nil -- currently controlled vehicle
25 self.isRideable = false
26
27 self.sliderPosition = 0
28 self.restPosition = 0.5
29 self.resetTime = 2500
30
31 self.lastInputHelpMode = GS_INPUT_HELP_MODE_KEYBOARD
32 self.lastGyroscopeSteeringState = false
33
34 self:createComponents()
35
36 return self
37end

onAIVehicleStateChanged

Description
Definition
onAIVehicleStateChanged()
Code
162function SteeringSliderDisplay:onAIVehicleStateChanged(state, vehicle)
163 self:updateVisibilityState()
164end

onGyroscopeSteeringChanged

Description
Definition
onGyroscopeSteeringChanged()
Code
168function SteeringSliderDisplay:onGyroscopeSteeringChanged(state)
169 self.lastGyroscopeSteeringState = state
170
171 self:updateVisibilityState()
172end

onInputHelpModeChange

Description
Definition
onInputHelpModeChange()
Code
154function SteeringSliderDisplay:onInputHelpModeChange(inputHelpMode)
155 self.lastInputHelpMode = inputHelpMode
156
157 self:updateVisibilityState()
158end

onSliderPositionChanged

Description
Definition
onSliderPositionChanged()
Code
106function SteeringSliderDisplay:onSliderPositionChanged(position)
107 self.sliderPosition = MathUtil.clamp(position, 0, 1)
108end

setPlayer

Description
Set the reference to the current player.
Definition
setPlayer()
Code
53function SteeringSliderDisplay:setPlayer(player)
54 self.player = player
55
56 self:updateVisibilityState()
57end

setScale

Description
Set this element's scale.
Definition
setScale()
Code
224function SteeringSliderDisplay:setScale(uiScale)
225 SteeringSliderDisplay:superClass().setScale(self, uiScale, uiScale)
226
227 local currentVisibility = self:getVisible()
228 self:setVisible(true, false)
229
230 self.uiScale = uiScale
231 local posX, posY = SteeringSliderDisplay.getBackgroundPosition(uiScale, self:getWidth())
232 self:setPosition(posX, posY)
233
234 self:storeOriginalPosition()
235 self:setVisible(currentVisibility, false)
236end

setVehicle

Description
Set the currently controlled vehicle which provides display data.
Definition
setVehicle(table vehicle)
Arguments
tablevehicleCurrently controlled vehicle
Code
42function SteeringSliderDisplay:setVehicle(vehicle)
43 self.vehicle = vehicle
44
45 if vehicle ~= nil then
46 self.isRideable = SpecializationUtil.hasSpecialization(Rideable, vehicle.specializations)
47 self.sliderHudElement:setUVs(GuiUtils.getUVs(SteeringSliderDisplay.UV.SLIDER))
48 end
49end

setVisible

Description
Set this element's visibility with optional animation.
Definition
setVisible(bool isVisible, bool animate)
Arguments
boolisVisibleTrue is visible, false is not.
boolanimateIf true, the element will play an animation before applying the visibility change.
Code
98function SteeringSliderDisplay:setVisible(isVisible, animate)
99 if not isVisible or g_inputBinding:getInputHelpMode() ~= GS_INPUT_HELP_MODE_GAMEPAD then
100 SteeringSliderDisplay:superClass().setVisible(self, isVisible, animate)
101 end
102end

update

Description
Update the fill levels state.
Definition
update()
Code
190function SteeringSliderDisplay:update(dt)
191 SteeringSliderDisplay:superClass().update(self, dt)
192
193 if not g_gameSettings:getValue(GameSettings.SETTING.GYROSCOPE_STEERING) then
194 if self.vehicle ~= nil then
195 if self.isRideable then
196 self.vehicle:setRideableSteer(self:getSteeringValue())
197 else
198 if self.vehicle.setSteeringInput ~= nil then
199 self.vehicle:setSteeringInput(self:getSteeringValue(), true, InputDevice.CATEGORY.WHEEL)
200 end
201 end
202 end
203 end
204
205 if self.sliderHudElement ~= nil then
206 self.sliderHudElement:update(dt)
207 end
208
209 -- debug enable mouse
210 if self.vehicle ~= nil then
211 if not g_gui:getIsGuiVisible() then
212 local show = Utils.getNoNil(Input.isKeyPressed(Input.KEY_lctrl), false)
213 g_inputBinding:setShowMouseCursor(show, false)
214 end
215 end
216end

updateVisibilityState

Description
Definition
updateVisibilityState()
Code
176function SteeringSliderDisplay:updateVisibilityState()
177 local animationState = self:getIsSliderActive()
178 if animationState ~= self.animationState then
179 self:setVisible(animationState, true)
180 self.sliderHudElement:setTouchIsActive(animationState)
181 end
182end