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
SpeedSliderDisplay
DescriptionVehicle Speed Slider for Mobile VersionParent
HUDDisplayElementFunctions
- createBackground
- createBar
- createComponents
- createHUDElement
- delete
- draw
- getAccelerateAndBrakeValue
- getBackgroundPosition
- getIsSliderActive
- hideSlider
- new
- onAIVehicleStateChanged
- onDialogOpened
- onInputHelpModeChange
- onJumpEventCallback
- onSliderPositionChanged
- onSliderVisibilityChangeFinished
- setPlayer
- setScale
- setSliderState
- setVehicle
- showSlider
- update
- updateElementsVisibility
- updateVisibilityState
createBackground
DescriptionCreate an empty background overlay as a base frame for this element.Definition
createBackground()Code
619 | function SpeedSliderDisplay.createBackground() |
620 | local width, height = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.BACKGROUND)) |
621 | local posX, posY = SpeedSliderDisplay.getBackgroundPosition(1, width) |
622 | |
623 | return Overlay.new(nil, posX, posY, width, height) -- empty overlay, only used as a positioning frame |
624 | end |
createBar
DescriptionDefinitioncreateBar()Code
400 | function SpeedSliderDisplay:createBar(position, size, color) |
401 | local baseX, baseY = self:getPosition() |
402 | |
403 | local posX, posY = getNormalizedScreenValues(unpack(position)) |
404 | local sizeX, sizeY = getNormalizedScreenValues(unpack(size)) |
405 | local barOverlay = Overlay.new(self.hudAtlasPath, baseX + posX, baseY + posY, sizeX, sizeY) |
406 | barOverlay:setUVs(GuiUtils.getUVs(HUDElement.UV.FILL)) |
407 | barOverlay:setColor(unpack(color)) |
408 | |
409 | return HUDElement.new(barOverlay) |
410 | end |
createComponents
DescriptionDefinitioncreateComponents()Code
73 | function SpeedSliderDisplay:createComponents() |
74 | local baseX, baseY = self:getPosition() |
75 | |
76 | for _, element in ipairs(self.hudElements) do |
77 | element:delete() |
78 | end |
79 | self.hudElements = {} |
80 | |
81 | --background |
82 | local bgSizeX, bgSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.BACKGROUND)) |
83 | local backgroundOverlay = Overlay.new(self.hudAtlasPath, baseX, baseY, bgSizeX, bgSizeY) |
84 | backgroundOverlay:setUVs(GuiUtils.getUVs(SpeedSliderDisplay.UV.BACKGROUND)) |
85 | self.backgroundHudElement = HUDElement.new(backgroundOverlay) |
86 | table.insert(self.hudElements, self.backgroundHudElement) |
87 | |
88 | self.snapSteps = {} |
89 | self.snapSteps[1] = self:createHUDElement(SpeedSliderDisplay.POSITION.SNAP1, SpeedSliderDisplay.SIZE.SNAP, SpeedSliderDisplay.UV.SNAP) |
90 | self.snapSteps[2] = self:createHUDElement(SpeedSliderDisplay.POSITION.SNAP2, SpeedSliderDisplay.SIZE.SNAP, SpeedSliderDisplay.UV.SNAP) |
91 | self.snapSteps[3] = self:createHUDElement(SpeedSliderDisplay.POSITION.SNAP3, SpeedSliderDisplay.SIZE.SNAP, SpeedSliderDisplay.UV.SNAP) |
92 | |
93 | for i=1, 3 do |
94 | table.insert(self.hudElements, self.snapSteps[i]) |
95 | self.snapSteps[i]:setVisible(false) |
96 | end |
97 | |
98 | --positive bar |
99 | self.positiveBarHudElement = self:createBar(SpeedSliderDisplay.POSITION.POSITIVE_BAR, SpeedSliderDisplay.SIZE.POSITIVE_BAR, SpeedSliderDisplay.COLOR.POSITIVE_BAR) |
100 | table.insert(self.hudElements, self.positiveBarHudElement) |
101 | |
102 | --positive bar |
103 | self.negativeBarHudElement = self:createBar(SpeedSliderDisplay.POSITION.NEGATIVE_BAR, SpeedSliderDisplay.SIZE.NEGATIVE_BAR, SpeedSliderDisplay.COLOR.NEGATIVE_BAR) |
104 | table.insert(self.hudElements, self.negativeBarHudElement) |
105 | self.negativeBarPosX, self.negativeBarPosY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.NEGATIVE_BAR)) |
106 | local _, negativeBarSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.NEGATIVE_BAR)) |
107 | self.negativeBarSizeY = negativeBarSizeY |
108 | |
109 | --gamepad background |
110 | local gpbgPosX, gpbgPosY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.GAMEPAD_BACKGROUND)) |
111 | local gpbgSizeX, gpbgSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.GAMEPAD_BACKGROUND)) |
112 | local gamepadBackgroundOverlay = Overlay.new(self.hudAtlasPath, baseX + gpbgPosX, baseY + gpbgPosY, gpbgSizeX, gpbgSizeY) |
113 | gamepadBackgroundOverlay:setUVs(GuiUtils.getUVs(SpeedSliderDisplay.UV.GAMEPAD_BACKGROUND)) |
114 | self.gamepadBackgroundHudElement = HUDElement.new(gamepadBackgroundOverlay) |
115 | table.insert(self.hudElements, self.gamepadBackgroundHudElement) |
116 | |
117 | -- lower border of gamepad background |
118 | local gpbgbPosX, gpbgbPosY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.GAMEPAD_BACKGROUND)) |
119 | local gpbgbSizeX, gpbgbSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.GAMEPAD_BACKGROUND_BORDER)) |
120 | local gamepadBackgroundBorderOverlay = Overlay.new(self.hudAtlasPath, baseX + gpbgbPosX, baseY + gpbgbPosY, gpbgbSizeX, gpbgbSizeY) |
121 | gamepadBackgroundBorderOverlay:setUVs(GuiUtils.getUVs(SpeedSliderDisplay.UV.GAMEPAD_BACKGROUND_BORDER)) |
122 | self.gamepadBackgroundHudElement:addChild(HUDElement.new(gamepadBackgroundBorderOverlay)) |
123 | |
124 | -- player jump background |
125 | local pljbgPosX, pljbgPosY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.PLAYER_JUMP_BACKGROUND)) |
126 | local pljbgSizeX, pljbgSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.PLAYER_JUMP_BACKGROUND)) |
127 | self.playerJumpBackgroundHudElement = HUDFrameElement.new(self.hudAtlasPath, baseX + pljbgPosX, baseY + pljbgPosY, pljbgSizeX, pljbgSizeY, nil, false, 2) |
128 | self.playerJumpBackgroundHudElement:setColor(unpack(SpeedSliderDisplay.COLOR.PLAYER_JUMP_BACKGROUND)) |
129 | self.playerJumpBackgroundHudElement:setFrameColor(unpack(SpeedSliderDisplay.COLOR.PLAYER_JUMP_BACKGROUND_FRAME)) |
130 | table.insert(self.hudElements, self.playerJumpBackgroundHudElement) |
131 | |
132 | -- text |
133 | self.textPosX, self.textPosY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.SPEED_TEXT)) |
134 | local _, textSize = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.SPEED_TEXT)) |
135 | self.textSize = textSize |
136 | |
137 | -- slider |
138 | local slOffX, slOffY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.SLIDER_OFFSET)) |
139 | local slSizeX, slSizeY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.SLIDER_SIZE)) |
140 | local sliderOverlay = Overlay.new(self.hudAtlasPath, baseX+slOffX, baseY+slOffY, slSizeX, slSizeY) |
141 | sliderOverlay:setUVs(GuiUtils.getUVs(SpeedSliderDisplay.UV.SLIDER)) |
142 | |
143 | self.sliderPosX = slOffX |
144 | self.sliderPosY = slOffY |
145 | self.backgroundSizeY = bgSizeY - slOffY * 2 |
146 | |
147 | local _, slAreaY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.SIZE.SLIDER_AREA)) |
148 | self.sliderAreaY = slAreaY |
149 | |
150 | local _, slCenterY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.SLIDER_CENTER)) |
151 | self.restPosition = slCenterY / slAreaY |
152 | |
153 | local sliderMin = self.sliderPosY |
154 | local sliderMax = sliderMin + self.sliderAreaY |
155 | local sliderCenter = sliderMin + self.sliderAreaY * self.restPosition |
156 | self.sliderHudElement = HUDSliderElement.new(sliderOverlay, backgroundOverlay, 2.5, 0.4, 4, 2, sliderMin, sliderCenter, sliderMax, sliderMax) |
157 | self.sliderHudElement:setCallback(self.onSliderPositionChanged, self) |
158 | table.insert(self.hudElements, self.sliderHudElement) |
159 | |
160 | for _, element in ipairs(self.hudElements) do |
161 | self:addChild(element) |
162 | end |
163 | |
164 | self.sliderHudElement:setAxisPosition(sliderCenter) |
165 | end |
createHUDElement
DescriptionDefinitioncreateHUDElement()Code
385 | function SpeedSliderDisplay:createHUDElement(position, size, uvs, color) |
386 | local baseX, baseY = self:getPosition() |
387 | local posX, posY = getNormalizedScreenValues(unpack(position)) |
388 | local sizeX, sizeY = getNormalizedScreenValues(unpack(size)) |
389 | local overlay = Overlay.new(self.hudAtlasPath, baseX + posX, baseY + posY, sizeX, sizeY) |
390 | overlay:setUVs(GuiUtils.getUVs(uvs)) |
391 | if color ~= nil then |
392 | overlay:setColor(unpack(color)) |
393 | end |
394 | |
395 | return HUDElement.new(overlay) |
396 | end |
delete
DescriptionDefinitiondelete()Code
65 | function SpeedSliderDisplay:delete() |
66 | g_messageCenter:unsubscribeAll(self) |
67 | SpeedSliderDisplay:superClass().delete(self) |
68 | end |
draw
DescriptionDefinitiondraw()Code
567 | function SpeedSliderDisplay:draw() |
568 | SpeedSliderDisplay:superClass().draw(self) |
569 | |
570 | if self.vehicle ~= nil and not self.isRideable then |
571 | local speed = self.vehicle:getLastSpeed() |
572 | local baseX, baseY = self:getPosition() |
573 | |
574 | setTextColor(1, 1, 1, 1) |
575 | setTextBold(true) |
576 | setTextAlignment(RenderText.ALIGN_CENTER) |
577 | renderText(baseX+self.textPosX, baseY+self.textPosY, self.textSize, string.format("%02d", speed)) |
578 | setTextAlignment(RenderText.ALIGN_LEFT) |
579 | setTextBold(false) |
580 | end |
581 | end |
getAccelerateAndBrakeValue
DescriptionDefinitiongetAccelerateAndBrakeValue()Code
444 | function SpeedSliderDisplay:getAccelerateAndBrakeValue() |
445 | return MathUtil.clamp((self.sliderPosition - self.restPosition) / (1-self.restPosition), 0, 1), 1 - MathUtil.clamp(self.sliderPosition / self.restPosition, 0, 1) |
446 | 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 |
608 | function SpeedSliderDisplay.getBackgroundPosition(scale, width) |
609 | local offX, offY = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.BACKGROUND)) |
610 | return 1 - g_safeFrameOffsetX - width - offX * scale, g_safeFrameOffsetY - offY * scale |
611 | end |
getIsSliderActive
DescriptionDefinitiongetIsSliderActive()Code
519 | function SpeedSliderDisplay:getIsSliderActive() |
520 | if self.lastInputHelpMode == GS_INPUT_HELP_MODE_GAMEPAD then |
521 | return false |
522 | end |
523 | |
524 | if self.vehicle ~= nil and self.vehicle:getIsAIActive() then |
525 | return false |
526 | end |
527 | |
528 | if self.player ~= nil then |
529 | return false |
530 | end |
531 | |
532 | return true |
533 | end |
hideSlider
DescriptionHide slider and only show speed displayDefinition
hideSlider()Code
181 | function SpeedSliderDisplay:hideSlider() |
182 | local _, yOffset = getNormalizedScreenValues(unpack(SpeedSliderDisplay.POSITION.GAMEPAD_BACKGROUND)) |
183 | local startX, startY = self:getPosition() |
184 | |
185 | local sequence = TweenSequence.new(self) |
186 | sequence:insertTween(MultiValueTween.new(self.setPosition, {startX, startY}, {self.origX, self.origY - yOffset}, HUDDisplayElement.MOVE_ANIMATION_DURATION), 0) |
187 | sequence:start() |
188 | |
189 | self.animation = sequence |
190 | |
191 | self.sliderState = false |
192 | self.sliderHudElement:setTouchIsActive(false) |
193 | |
194 | self:updateElementsVisibility() |
195 | end |
new
DescriptionCreates a new SpeedSliderDisplay instance.Definition
new(string hudAtlasPath)Arguments
string | hudAtlasPath | Path to the HUD texture atlas. |
35 | function SpeedSliderDisplay.new(hud, hudAtlasPath) |
36 | local backgroundOverlay = SpeedSliderDisplay.createBackground() |
37 | local self = SpeedSliderDisplay:superClass().new(backgroundOverlay, nil, SpeedSliderDisplay_mt) |
38 | |
39 | self.hud = hud |
40 | self.uiScale = 1.0 |
41 | self.hudAtlasPath = hudAtlasPath |
42 | |
43 | self.vehicle = nil -- currently controlled vehicle |
44 | self.player = nil |
45 | self.isRideable = false |
46 | |
47 | self.sliderPosition = 0 |
48 | self.restPosition = 0.25 |
49 | |
50 | self.hudElements = {} |
51 | |
52 | self.lastInputHelpMode = GS_INPUT_HELP_MODE_KEYBOARD |
53 | |
54 | self.sliderState = nil |
55 | |
56 | self:createComponents() |
57 | |
58 | g_messageCenter:subscribe(MessageType.GUI_DIALOG_OPENED, self.onDialogOpened, self) |
59 | |
60 | return self |
61 | end |
onAIVehicleStateChanged
DescriptionDefinitiononAIVehicleStateChanged()Code
550 | function SpeedSliderDisplay:onAIVehicleStateChanged(state, vehicle) |
551 | if vehicle == self.vehicle then |
552 | self:updateVisibilityState() |
553 | end |
554 | end |
onDialogOpened
DescriptionDefinitiononDialogOpened()Code
628 | function SpeedSliderDisplay:onDialogOpened(guiName, overlappingDialog) |
629 | -- only reset silder if it's a direct dialog, not in a menu since the game is paused there anyway |
630 | if not overlappingDialog then |
631 | self.sliderHudElement:resetSlider() |
632 | end |
633 | end |
onInputHelpModeChange
DescriptionDefinitiononInputHelpModeChange()Code
537 | function SpeedSliderDisplay:onInputHelpModeChange(inputHelpMode) |
538 | self.lastInputHelpMode = inputHelpMode |
539 | |
540 | -- reset speed slider if user starts using gamepad |
541 | if inputHelpMode == GS_INPUT_HELP_MODE_GAMEPAD then |
542 | self.sliderHudElement:setAxisPosition(self.sliderPosY + self.sliderAreaY * self.restPosition) |
543 | end |
544 | |
545 | self:updateVisibilityState() |
546 | end |
onJumpEventCallback
DescriptionDefinitiononJumpEventCallback()Code
450 | function SpeedSliderDisplay:onJumpEventCallback() |
451 | if self.vehicle ~= nil then |
452 | if self.isRideable then |
453 | if self.vehicle:getIsRideableJumpAllowed() then |
454 | self.vehicle:jump() |
455 | end |
456 | end |
457 | end |
458 | |
459 | if self.player ~= nil then |
460 | self.player:onInputJump(nil, 1) |
461 | end |
462 | end |
onSliderPositionChanged
DescriptionDefinitiononSliderPositionChanged()Code
413 | function SpeedSliderDisplay:onSliderPositionChanged(position) |
414 | self.sliderPosition = MathUtil.clamp(position, 0, 1) |
415 | local selfX, selfY = self:getPosition() |
416 | |
417 | local acc, brake = self:getAccelerateAndBrakeValue() |
418 | |
419 | self.positiveBarHudElement:setScale(1, acc) |
420 | self.positiveBarHudElement:setColor(unpack(self.cruiseControlIsActive and SpeedSliderDisplay.COLOR.CRUISE_CONTROL or SpeedSliderDisplay.COLOR.POSITIVE_BAR)) |
421 | |
422 | self.negativeBarHudElement:setPosition(selfX + self.negativeBarPosX, selfY + self.negativeBarPosY + self.negativeBarSizeY * (1-brake)) |
423 | self.negativeBarHudElement:setScale(1, brake) |
424 | |
425 | if self.vehicle ~= nil then |
426 | if self.isRideable then |
427 | for gait=1, #SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS do |
428 | if math.abs(position - SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS[gait]) < 0.01 then |
429 | self.vehicle:setCurrentGait(gait) |
430 | |
431 | self.lastGait = gait |
432 | self.lastGaitTime = g_time |
433 | break |
434 | end |
435 | end |
436 | |
437 | self:setJumpButtonActive(self.vehicle:getIsRideableJumpAllowed(true)) |
438 | end |
439 | end |
440 | end |
onSliderVisibilityChangeFinished
DescriptionCalled when the sliders visibility changedDefinition
onSliderVisibilityChangeFinished()Code
234 | function SpeedSliderDisplay:onSliderVisibilityChangeFinished(visibility) |
235 | if visibility then |
236 | self:updateElementsVisibility() |
237 | |
238 | for i=1, 3 do |
239 | self.snapSteps[i]:setVisible(self.isRideable) |
240 | end |
241 | end |
242 | end |
setPlayer
DescriptionSet the reference to the current player.Definition
setPlayer()Code
278 | function SpeedSliderDisplay:setPlayer(player) |
279 | self.player = player |
280 | |
281 | if player ~= nil then |
282 | if self.vehicle ~= nil then |
283 | self:setVehicle(nil) |
284 | end |
285 | |
286 | self:removeJumpButton() |
287 | self:addJumpButton() |
288 | self:setJumpButtonActive(true) |
289 | |
290 | self.sliderHudElement:resetSlider() |
291 | self.sliderHudElement:clearSnapPositions() |
292 | for i=1, #SpeedSliderDisplay.PLAYER_SNAP_POSITIONS do |
293 | self.sliderHudElement:addSnapPosition(self.sliderPosY + self.sliderAreaY * SpeedSliderDisplay.PLAYER_SNAP_POSITIONS[i]) |
294 | end |
295 | end |
296 | |
297 | self:updateVisibilityState() |
298 | self:updateElementsVisibility() |
299 | end |
setScale
DescriptionSet this element's scale.Definition
setScale()Code
588 | function SpeedSliderDisplay:setScale(uiScale) |
589 | SpeedSliderDisplay:superClass().setScale(self, uiScale, uiScale) |
590 | |
591 | local currentVisibility = self:getVisible() |
592 | self:setVisible(true, false) |
593 | |
594 | self.uiScale = uiScale |
595 | local posX, posY = SpeedSliderDisplay.getBackgroundPosition(uiScale, self:getWidth()) |
596 | self:setPosition(posX, posY) |
597 | |
598 | self:storeOriginalPosition() |
599 | self:setVisible(currentVisibility, false) |
600 | end |
setSliderState
DescriptionSet silder stateDefinition
setSliderState()Code
169 | function SpeedSliderDisplay:setSliderState(state) |
170 | if self.sliderState ~= state then |
171 | if state then |
172 | self:showSlider() |
173 | else |
174 | self:hideSlider() |
175 | end |
176 | end |
177 | end |
setVehicle
DescriptionSet the currently controlled vehicle which provides display data.Definition
setVehicle(table vehicle)Arguments
table | vehicle | Currently controlled vehicle |
247 | function SpeedSliderDisplay:setVehicle(vehicle) |
248 | self.vehicle = vehicle |
249 | |
250 | if vehicle ~= nil then |
251 | self.isRideable = SpecializationUtil.hasSpecialization(Rideable, vehicle.specializations) |
252 | |
253 | if self.player ~= nil then |
254 | self:setPlayer(nil) |
255 | end |
256 | |
257 | self:removeJumpButton() |
258 | self.sliderHudElement:resetSlider() |
259 | self.sliderHudElement:clearSnapPositions() |
260 | if self.isRideable then |
261 | for i=1, #SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS do |
262 | self.sliderHudElement:addSnapPosition(self.sliderPosY + self.sliderAreaY * SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS[i]) |
263 | end |
264 | |
265 | self:addJumpButton() |
266 | end |
267 | |
268 | for i=1, 3 do |
269 | self.snapSteps[i]:setVisible(self.isRideable) |
270 | end |
271 | end |
272 | |
273 | self:updateElementsVisibility() |
274 | end |
showSlider
DescriptionShow slider and speed displayDefinition
showSlider()Code
199 | function SpeedSliderDisplay:showSlider() |
200 | local startX, startY = self:getPosition() |
201 | |
202 | local sequence = TweenSequence.new(self) |
203 | sequence:insertTween(MultiValueTween.new(self.setPosition, {startX, startY}, {self.origX, self.origY}, HUDDisplayElement.MOVE_ANIMATION_DURATION), 0) |
204 | sequence:addCallback(self.onSliderVisibilityChangeFinished, true) |
205 | sequence:start() |
206 | |
207 | self.animation = sequence |
208 | |
209 | self.sliderState = true |
210 | |
211 | self.sliderHudElement:resetSlider() |
212 | self.sliderHudElement:setTouchIsActive(true) |
213 | end |
update
DescriptionUpdate the fill levels state.Definition
update()Code
470 | function SpeedSliderDisplay:update(dt) |
471 | SpeedSliderDisplay:superClass().update(self, dt) |
472 | |
473 | if self.sliderHudElement ~= nil then |
474 | self.sliderHudElement:update(dt) |
475 | end |
476 | |
477 | if self.vehicle ~= nil then |
478 | if self.vehicle.setAccelerationPedalInput ~= nil then |
479 | local acceleration, brake = self:getAccelerateAndBrakeValue() |
480 | |
481 | local direction = acceleration > 0 and 1 or (brake > 0 and -1 or 0) |
482 | self.vehicle:setTargetSpeedAndDirection(math.abs(acceleration + brake), direction) |
483 | end |
484 | |
485 | -- reset slider if the gait was changed from rideable due to collisions or user input on pc |
486 | if self.isRideable then |
487 | local currentGait = self.vehicle:getCurrentGait() |
488 | if currentGait ~= self.lastGait then |
489 | if self.lastGaitTime < g_time - 250 then |
490 | if SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS[currentGait] ~= nil then |
491 | self.sliderHudElement:setAxisPosition(self.sliderPosY + self.sliderAreaY * SpeedSliderDisplay.RIDEABLE_SNAP_POSITIONS[currentGait]) |
492 | self.lastGait = currentGait |
493 | end |
494 | end |
495 | end |
496 | end |
497 | end |
498 | |
499 | if self.player ~= nil then |
500 | local acceleration, brake = self:getAccelerateAndBrakeValue() |
501 | self.player:onInputMoveForward(nil, -(acceleration - brake)) |
502 | |
503 | if acceleration > 0.75 then |
504 | self.player:onInputRun(nil, 1) |
505 | end |
506 | end |
507 | |
508 | -- debug enable mouse |
509 | if self.vehicle ~= nil or self.player ~= nil then |
510 | if not g_gui:getIsGuiVisible() then |
511 | local show = Utils.getNoNil(Input.isKeyPressed(Input.KEY_lctrl), false) |
512 | g_inputBinding:setShowMouseCursor(show, false) |
513 | end |
514 | end |
515 | end |
updateElementsVisibility
DescriptionHide slider and only show speed displayDefinition
updateElementsVisibility()Code
217 | function SpeedSliderDisplay:updateElementsVisibility() |
218 | for _, element in ipairs(self.hudElements) do |
219 | if not self.sliderState then |
220 | if self.player ~= nil then |
221 | element:setVisible(element == self.playerJumpBackgroundHudElement) |
222 | else |
223 | element:setVisible(element == self.gamepadBackgroundHudElement) |
224 | end |
225 | else |
226 | element:setVisible(element ~= self.playerJumpBackgroundHudElement and element ~= self.gamepadBackgroundHudElement) |
227 | end |
228 | end |
229 | end |
updateVisibilityState
DescriptionDefinitionupdateVisibilityState()Code
558 | function SpeedSliderDisplay:updateVisibilityState() |
559 | local sliderState = self:getIsSliderActive() |
560 | if sliderState ~= self.sliderState then |
561 | self:setSliderState(sliderState, true) |
562 | end |
563 | end |