LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

PlayerControlPadDisplay

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
217function PlayerControlPadDisplay.createBackground()
218 local width, height = getNormalizedScreenValues(unpack(PlayerControlPadDisplay.SIZE.BACKGROUND))
219 local posX, posY = PlayerControlPadDisplay.getBackgroundPosition(1, width)
220
221 return Overlay.new(nil, posX, posY, width, height) -- empty overlay, only used as a positioning frame
222end

createComponents

Description
Definition
createComponents()
Code
51function PlayerControlPadDisplay:createComponents()
52 local baseX, baseY = self:getPosition()
53
54 --background
55 local bgSizeX, bgSizeY = getNormalizedScreenValues(unpack(PlayerControlPadDisplay.SIZE.BACKGROUND))
56 local backgroundOverlay = Overlay.new(self.hudAtlasPath, baseX, baseY, bgSizeX, bgSizeY)
57 backgroundOverlay:setUVs(GuiUtils.getUVs(PlayerControlPadDisplay.UV.BACKGROUND))
58 self.backgroundHudElement = HUDElement.new(backgroundOverlay)
59
60 self:addChild(self.backgroundHudElement)
61
62 -- joystick
63 local joySizeX, joySizeY = getNormalizedScreenValues(unpack(PlayerControlPadDisplay.SIZE.JOYSTICK))
64 local joystickOverlay = Overlay.new(self.hudAtlasPath, baseX + joySizeX / 2, baseY + joySizeY / 2, joySizeX, joySizeY)
65 joystickOverlay:setUVs(GuiUtils.getUVs(PlayerControlPadDisplay.UV.JOYSTICK))
66
67 self.joystickXHudElement = HUDSliderElement.new(joystickOverlay, backgroundOverlay, 1, 1, 2.5, 1, - joySizeX / 2, bgSizeX / 2 - joySizeX / 2, bgSizeX - joySizeX / 2)
68 self.joystickXHudElement:setCallback(self.onSliderPositionChangedX, self)
69
70 self.joystickYHudElement = HUDSliderElement.new(joystickOverlay, backgroundOverlay, 1, 1, 2.5, 2, - joySizeY / 2, bgSizeY / 2 - joySizeY / 2, bgSizeY - joySizeY / 2)
71 self.joystickYHudElement:setCallback(self.onSliderPositionChangedY, self)
72
73 self.joystickXHudElement.radius = bgSizeX / 2
74 self.joystickYHudElement.radius = bgSizeY / 2
75
76 self:addChild(self.joystickXHudElement)
77 self:addChild(self.joystickYHudElement)
78 self.joystickXHudElement:setAxisPosition(self.joystickXHudElement.centerTrans)
79 self.joystickYHudElement:setAxisPosition(self.joystickYHudElement.centerTrans)
80end

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
206function PlayerControlPadDisplay.getBackgroundPosition(scale, width)
207 local offX, offY = getNormalizedScreenValues(unpack(PlayerControlPadDisplay.POSITION.BACKGROUND))
208 return g_safeFrameOffsetX + offX * scale, g_safeFrameOffsetY - offY * scale
209end

new

Description
Creates a new PlayerControlPadDisplay instance.
Definition
new(string hudAtlasPath)
Arguments
stringhudAtlasPathPath to the HUD texture atlas.
Code
16function PlayerControlPadDisplay.new(hud, hudAtlasPath)
17 local backgroundOverlay = PlayerControlPadDisplay.createBackground()
18 local self = PlayerControlPadDisplay:superClass().new(backgroundOverlay, nil, PlayerControlPadDisplay_mt)
19
20 self.hud = hud
21 self.uiScale = 1.0
22 self.hudAtlasPath = hudAtlasPath
23
24 self.player = nil
25
26 self.joystickPosX = 0.5
27 self.joystickPosY = 0.5
28
29 self.lastInputHelpMode = GS_INPUT_HELP_MODE_KEYBOARD
30
31 self:createComponents()
32
33 return self
34end

onAnimateVisibilityFinished

Description
Definition
onAnimateVisibilityFinished()
Code
171function PlayerControlPadDisplay:onAnimateVisibilityFinished(isVisible)
172 PlayerControlPadDisplay:superClass().onAnimateVisibilityFinished(self, isVisible)
173
174 if isVisible then
175 self.joystickXHudElement:resetSlider()
176 self.joystickYHudElement:resetSlider()
177 end
178end

onInputHelpModeChange

Description
Definition
onInputHelpModeChange()
Code
133function PlayerControlPadDisplay:onInputHelpModeChange(inputHelpMode)
134 self.lastInputHelpMode = inputHelpMode
135
136 local state = self.player ~= nil and inputHelpMode ~= GS_INPUT_HELP_MODE_GAMEPAD
137 if state ~= self.animationState then
138 self:setVisible(state, true)
139 end
140end

onSliderPositionChangedX

Description
Definition
onSliderPositionChangedX()
Code
94function PlayerControlPadDisplay:onSliderPositionChangedX(position)
95 self.joystickPosX = position * 2 - 1
96
97 local posX, _ = self:updateJoystickPosition()
98 if posX ~= nil then
99 return posX
100 end
101end

onSliderPositionChangedY

Description
Definition
onSliderPositionChangedY()
Code
105function PlayerControlPadDisplay:onSliderPositionChangedY(position)
106 self.joystickPosY = position * 2 - 1
107
108 local _, posY = self:updateJoystickPosition()
109 if posY ~= nil then
110 return posY
111 end
112end

setPlayer

Description
Set the reference to the current player.
Definition
setPlayer()
Code
38function PlayerControlPadDisplay:setPlayer(player)
39 self.player = player
40
41 local state = self.player ~= nil and self.lastInputHelpMode ~= GS_INPUT_HELP_MODE_GAMEPAD
42 if state ~= self.animationState then
43 self:setVisible(state, true)
44 self.joystickXHudElement:setTouchIsActive(state)
45 self.joystickYHudElement:setTouchIsActive(state)
46 end
47end

setScale

Description
Set this element's scale.
Definition
setScale()
Code
186function PlayerControlPadDisplay:setScale(uiScale)
187 PlayerControlPadDisplay:superClass().setScale(self, uiScale, uiScale)
188
189 local currentVisibility = self:getVisible()
190 self:setVisible(true, false)
191
192 self.uiScale = uiScale
193 local posX, posY = PlayerControlPadDisplay.getBackgroundPosition(uiScale, self:getWidth())
194 self:setPosition(posX, posY)
195
196 self:storeOriginalPosition()
197 self:setVisible(currentVisibility, false)
198end

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
86function PlayerControlPadDisplay:setVisible(isVisible, animate)
87 if not isVisible or g_inputBinding:getInputHelpMode() ~= GS_INPUT_HELP_MODE_GAMEPAD then
88 PlayerControlPadDisplay:superClass().setVisible(self, isVisible, animate)
89 end
90end

update

Description
Update the fill levels state.
Definition
update()
Code
149function PlayerControlPadDisplay:update(dt)
150 PlayerControlPadDisplay:superClass().update(self, dt)
151
152 if self.player ~= nil then
153 if self.joystickXHudElement ~= nil and self.joystickYHudElement ~= nil then
154 self.joystickXHudElement:update(dt)
155 self.joystickYHudElement:update(dt)
156 end
157
158 self.player:onInputMoveSide(nil, self.joystickPosX, nil, nil, false)
159 self.player:onInputMoveForward(nil, -self.joystickPosY, nil, nil, false)
160
161 -- debug enable mouse
162 if not g_gui:getIsGuiVisible() then
163 local show = Utils.getNoNil(Input.isKeyPressed(Input.KEY_lctrl), false)
164 g_inputBinding:setShowMouseCursor(show, false)
165 end
166 end
167end

updateJoystickPosition

Description
Definition
updateJoystickPosition()
Code
116function PlayerControlPadDisplay:updateJoystickPosition()
117 local distance = math.sqrt(self.joystickPosX ^ 2 + self.joystickPosY ^ 2)
118 if distance > 1 then
119 self.joystickPosX = self.joystickPosX / distance
120 local posX = self.joystickXHudElement.minTrans + (self.joystickXHudElement.maxTrans - self.joystickXHudElement.minTrans) * (self.joystickPosX / 2 + 0.5)
121 self.joystickXHudElement:setAxisPosition(posX, true)
122
123 self.joystickPosY = self.joystickPosY / distance
124 local posY = self.joystickYHudElement.minTrans + (self.joystickYHudElement.maxTrans - self.joystickYHudElement.minTrans) * (self.joystickPosY / 2 + 0.5)
125 self.joystickYHudElement:setAxisPosition(posY, true)
126
127 return posX, posY
128 end
129end