Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- 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
PlayerStateCrouch
ParentPlayerStateBaseFunctions
deactivate
DescriptionDeactivate method. Player camera node translation is set.Definition
deactivate()Code
63 | function PlayerStateCrouch:deactivate() |
64 | PlayerStateCrouch:superClass().deactivate(self) |
65 | |
66 | setTranslation(self.player.cameraNode, 0.0, self.cameraY, 0.0) |
67 | end |
isAvailable
DescriptionCheck if state is available. Player cannot crouch while in waterDefinition
isAvailable()Return Values
bool | true | if player can crouch |
50 | function PlayerStateCrouch:isAvailable() |
51 | if self.player.baseInformation.isInWater then |
52 | return false |
53 | end |
54 | |
55 | if self.player:hasHandtoolEquipped() and self.player.baseInformation.currentHandtool:isBeingUsed() then |
56 | return false |
57 | end |
58 | return true |
59 | end |
moveCamera
DescriptionDefinitionmoveCamera()Code
113 | function PlayerStateCrouch:moveCamera(dt) |
114 | if self.progress == PlayerStateCrouch.PROGRESS_STATES.CROUCHING then |
115 | local dtInSec = dt * 0.001 |
116 | self.crouchFactor = math.min(1.0, self.crouchFactor + dtInSec / self.crouchTime) |
117 | elseif self.progress == PlayerStateCrouch.PROGRESS_STATES.CROUCH then |
118 | elseif self.progress == PlayerStateCrouch.PROGRESS_STATES.STANDING then |
119 | local dtInSec = dt * 0.001 |
120 | self.crouchFactor = math.max(0.0, self.crouchFactor - dtInSec / self.crouchTime) |
121 | elseif self.progress == PlayerStateCrouch.PROGRESS_STATES.UP then |
122 | self:deactivate() |
123 | end |
124 | |
125 | self.crouchCameraY = self.cameraY - self.crouchYOffset * self.crouchFactor |
126 | end |
new
DescriptionCreating instance of state.Definition
new(table player, table stateMachine)Arguments
table | player | instance of player |
table | stateMachine | instance of the state machine manager |
table | instance | instance of object |
27 | function PlayerStateCrouch.new(player, stateMachine) |
28 | local self = PlayerStateBase.new(player, stateMachine, PlayerStateCrouch_mt) |
29 | |
30 | self.crouchTime = 0.25 -- in sec |
31 | self.crouchFactor = 0 |
32 | self.crouchYOffset = 0.8 |
33 | self.cameraY = 0.0 |
34 | self.crouchCameraY = 0.0 |
35 | self.progress = PlayerStateCrouch.PROGRESS_STATES.UP |
36 | self.toggleMode = false |
37 | |
38 | return self |
39 | end |
processInput
DescriptionDefinitionprocessInput()Code
85 | function PlayerStateCrouch:processInput() |
86 | if self.player.baseInformation.currentHandtool == nil or self.player:hasHandtoolEquipped() and not self.player.baseInformation.currentHandtool:isBeingUsed() then |
87 | local crouchState = self.progress |
88 | local inputState = self.player.inputInformation.crouchState |
89 | |
90 | local isCrouching = crouchState == PlayerStateCrouch.PROGRESS_STATES.CROUCHING or crouchState == PlayerStateCrouch.PROGRESS_STATES.CROUCH |
91 | local isStanding = crouchState == PlayerStateCrouch.PROGRESS_STATES.STANDING or crouchState == PlayerStateCrouch.PROGRESS_STATES.UP |
92 | |
93 | if self.toggleMode then |
94 | if inputState == Player.BUTTONSTATES.PRESSED then |
95 | if isCrouching then |
96 | self.progress = PlayerStateCrouch.PROGRESS_STATES.STANDING |
97 | elseif isStanding then |
98 | self.progress = PlayerStateCrouch.PROGRESS_STATES.CROUCHING |
99 | end |
100 | end |
101 | else |
102 | if inputState == Player.BUTTONSTATES.PRESSED and isStanding then |
103 | self.progress = PlayerStateCrouch.PROGRESS_STATES.CROUCHING |
104 | elseif inputState == Player.BUTTONSTATES.RELEASED and isCrouching then |
105 | self.progress = PlayerStateCrouch.PROGRESS_STATES.STANDING |
106 | end |
107 | end |
108 | end |
109 | end |
update
DescriptionUpdate method. Slowly update camera Y position.Definition
update()Code
71 | function PlayerStateCrouch:update(dt) |
72 | -- print(string.format("-- [PlayerStateCrouch:update] toggle(%s) progress(%d) inputState(%d) factor(%.3f)", tostring(self.toggleMode), self.progress, self.player.inputInformation.crouchState, self.crouchFactor)) |
73 | self:processInput() |
74 | self:moveCamera(dt) |
75 | |
76 | if self.crouchFactor == 1.0 then |
77 | self.progress = PlayerStateCrouch.PROGRESS_STATES.CROUCH |
78 | elseif self.crouchFactor == 0.0 then |
79 | self.progress = PlayerStateCrouch.PROGRESS_STATES.UP |
80 | end |
81 | end |