Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ColorPickButtonElement
- ConstructionScreen
- ContextActionDisplay
- ControlBarDisplay
- DialogElement
- DynamicFadedBitmapElement
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GameInfoDisplayMobile
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiTopDownCursor
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDSliderElement
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InfoDisplay
- InfoHUDBox
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputGlyphElementUI
- InputHelpDisplay
- KeyValueInfoHUDBox
- ListElement
- ListItemElement
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PictureElement
- PlatformIconElement
- PlayerControlPadDisplay
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- ScrollingLayoutElement
- SettingsModel
- SideNotification
- SideNotificationMobile
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- SpeedSliderDisplay
- StatusBar
- SteeringSliderDisplay
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TerrainLayerElement
- TextBackdropElement
- TextElement
- TextInputElement
- ThreePartBitmapElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VariableWorkWidthHUDExten...
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- WardrobeScreen
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
SteeringSliderDisplay
DescriptionVehicle Steering Slider for Mobile VersionParent
HUDDisplayElementFunctions
- createBackground
- createComponents
- getBackgroundPosition
- getIsSliderActive
- getSteeringValue
- new
- onAIVehicleStateChanged
- onGyroscopeSteeringChanged
- onInputHelpModeChange
- onSliderPositionChanged
- setPlayer
- setScale
- setVehicle
- setVisible
- update
- updateVisibilityState
createBackground
DescriptionCreate an empty background overlay as a base frame for this element.Definition
createBackground()Code
255 | function 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 |
260 | end |
createComponents
DescriptionDefinitioncreateComponents()Code
61 | function 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) |
92 | 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 |
244 | function SteeringSliderDisplay.getBackgroundPosition(scale, width) |
245 | local offX, offY = getNormalizedScreenValues(unpack(SteeringSliderDisplay.POSITION.BACKGROUND)) |
246 | return g_safeFrameOffsetX + offX * scale, g_safeFrameOffsetY - offY * scale |
247 | end |
getIsSliderActive
DescriptionDefinitiongetIsSliderActive()Code
131 | function 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 |
149 | end |
getSteeringValue
DescriptionDefinitiongetSteeringValue()Code
112 | function 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 |
127 | end |
new
DescriptionCreates a new SteeringSliderDisplay instance.Definition
new(string hudAtlasPath)Arguments
string | hudAtlasPath | Path to the HUD texture atlas. |
16 | function 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 |
37 | end |
onAIVehicleStateChanged
DescriptionDefinitiononAIVehicleStateChanged()Code
162 | function SteeringSliderDisplay:onAIVehicleStateChanged(state, vehicle) |
163 | self:updateVisibilityState() |
164 | end |
onGyroscopeSteeringChanged
DescriptionDefinitiononGyroscopeSteeringChanged()Code
168 | function SteeringSliderDisplay:onGyroscopeSteeringChanged(state) |
169 | self.lastGyroscopeSteeringState = state |
170 | |
171 | self:updateVisibilityState() |
172 | end |
onInputHelpModeChange
DescriptionDefinitiononInputHelpModeChange()Code
154 | function SteeringSliderDisplay:onInputHelpModeChange(inputHelpMode) |
155 | self.lastInputHelpMode = inputHelpMode |
156 | |
157 | self:updateVisibilityState() |
158 | end |
onSliderPositionChanged
DescriptionDefinitiononSliderPositionChanged()Code
106 | function SteeringSliderDisplay:onSliderPositionChanged(position) |
107 | self.sliderPosition = MathUtil.clamp(position, 0, 1) |
108 | end |
setPlayer
DescriptionSet the reference to the current player.Definition
setPlayer()Code
53 | function SteeringSliderDisplay:setPlayer(player) |
54 | self.player = player |
55 | |
56 | self:updateVisibilityState() |
57 | end |
setScale
DescriptionSet this element's scale.Definition
setScale()Code
224 | function 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) |
236 | end |
setVehicle
DescriptionSet the currently controlled vehicle which provides display data.Definition
setVehicle(table vehicle)Arguments
table | vehicle | Currently controlled vehicle |
42 | function 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 |
49 | end |
setVisible
DescriptionSet this element's visibility with optional animation.Definition
setVisible(bool isVisible, bool animate)Arguments
bool | isVisible | True is visible, false is not. |
bool | animate | If true, the element will play an animation before applying the visibility change. |
98 | function 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 |
102 | end |
update
DescriptionUpdate the fill levels state.Definition
update()Code
190 | function 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 |
216 | end |
updateVisibilityState
DescriptionDefinitionupdateVisibilityState()Code
176 | function 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 |
182 | end |