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
- PlayerStateAnimalInteract
- PlayerStateAnimalPet
- PlayerStateAnimalRide
- PlayerStateBase
- PlayerStateCrouch
- PlayerStateCycleHandtool
- PlayerStateDrop
- PlayerStateFall
- PlayerStateIdle
- PlayerStateJump
- PlayerStateMachine
- PlayerStatePickup
- PlayerStateRun
- PlayerStateSwim
- PlayerStateThrow
- PlayerStateUseLight
- PlayerStateWalk
- 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
PlayerStateMachine
Functions- activateState
- consoleCommandDebugFinalStateMachine
- deactivateState
- debugDraw
- delete
- getState
- isActive
- isAvailable
- load
- new
- update
- updateTick
activateState
DescriptionActivates a player state. Checks if active states allows to use the player state we want to activate. If allowed, the state is activated.Definition
activateState(string stateNameTo)Arguments
string | stateNameTo | the player state we want to activate |
220 | function PlayerStateMachine:activateState(stateNameTo) |
221 | local allowed = true |
222 | |
223 | for stateNameFrom, stateInstance in pairs(self.stateList) do |
224 | if stateInstance.isActive and (self.fsmTable[stateNameFrom] == nil or not self.fsmTable[stateNameFrom][stateNameTo]) then |
225 | allowed = false |
226 | break |
227 | end |
228 | end |
229 | |
230 | -- if self.debugMode then |
231 | -- print(string.format("-- [PlayerStateMachine:activateState] state(%s) allowed(%s) active(%s)", stateNameTo, tostring(allowed), tostring(self.stateList[stateNameTo].isActive))) |
232 | -- end |
233 | if allowed and (self.stateList[stateNameTo] ~= nil) and (self.stateList[stateNameTo].isActive == false) then |
234 | self.stateList[stateNameTo]:activate() |
235 | end |
236 | end |
consoleCommandDebugFinalStateMachine
DescriptionConsole command to toggle debug of player state machineDefinition
consoleCommandDebugFinalStateMachine()Code
263 | function PlayerStateMachine:consoleCommandDebugFinalStateMachine() |
264 | if self.debugMode then |
265 | self.debugMode = false |
266 | else |
267 | self.debugMode = true |
268 | end |
269 | end |
deactivateState
DescriptionDeactivates a player stateDefinition
deactivateState(string stateName)Arguments
string | stateName |
241 | function PlayerStateMachine:deactivateState(stateName) |
242 | if (self.stateList[stateName] ~= nil) and (self.stateList[stateName].isActive == true) then |
243 | self.stateList[stateName]:deactivate() |
244 | end |
245 | end |
debugDraw
DescriptionExecute all debug draw methods. Displays is states are active and available. Also draw internal player state debug method.Definition
debugDraw(float dt)Arguments
float | dt | delta time in ms |
199 | function PlayerStateMachine:debugDraw(dt) |
200 | if self.debugMode then |
201 | setTextColor(1, 1, 0, 1) |
202 | renderText(0.05, 0.60, 0.02, "[state machine]") |
203 | local i = 0 |
204 | for stateName, stateInstance in pairs(self.stateList) do |
205 | renderText(0.05, 0.58 - i * 0.02 , 0.02, string.format("- %s active(%s) isAvailable(%s)", stateName, tostring(stateInstance.isActive), tostring(stateInstance:isAvailable()))) |
206 | i = i + 1 |
207 | end |
208 | end |
209 | |
210 | for stateName, stateInstance in pairs(self.stateList) do |
211 | if stateInstance.inDebugMode(self) then |
212 | stateInstance:debugDraw(dt) |
213 | end |
214 | end |
215 | end |
delete
DescriptionMethods for deleting player state machineDefinition
delete()Code
131 | function PlayerStateMachine:delete() |
132 | if self.player.isOwner then |
133 | removeConsoleCommand("gsPlayerFsmDebug") |
134 | end |
135 | |
136 | for _, stateInstance in pairs(self.stateList) do |
137 | stateInstance:delete() |
138 | stateInstance = {} |
139 | end |
140 | end |
getState
DescriptionReturns a player stateDefinition
getState(string stateName)Arguments
string | stateName | name of the state to search for |
table | player | state |
146 | function PlayerStateMachine:getState(stateName) |
147 | return self.stateList[stateName] |
148 | end |
isActive
DescriptionCheck if a player state is activeDefinition
isActive(string stateName)Arguments
string | stateName |
bool | true | if player state is active |
167 | function PlayerStateMachine:isActive(stateName) |
168 | if self.stateList[stateName] ~= nil then |
169 | return self.stateList[stateName].isActive |
170 | end |
171 | return false |
172 | end |
isAvailable
DescriptionCheck if a player state is available and not already active.Definition
isAvailable(string stateName)Arguments
string | stateName |
bool | true | if player state is available |
154 | function PlayerStateMachine:isAvailable(stateName) |
155 | if self.stateList[stateName] ~= nil then |
156 | local result = (self.stateList[stateName].isActive == false) and self.stateList[stateName]:isAvailable() |
157 | |
158 | return result |
159 | end |
160 | return false |
161 | end |
load
DescriptionLoads statesDefinition
load()Code
249 | function PlayerStateMachine:load() |
250 | for _, stateInstance in pairs(self.stateList) do |
251 | stateInstance:load() |
252 | end |
253 | |
254 | -- Console commands |
255 | -- self.player.isOwner is init at this point |
256 | if self.player.isOwner then |
257 | addConsoleCommand("gsPlayerFsmDebug", "Toggle debug mode for player state machine", "consoleCommandDebugFinalStateMachine", self) |
258 | end |
259 | end |
new
DescriptionCreating instance of player state machine. Initializing member variables: player states and a table containing those states.Definition
new(table player, table custom_mt)Arguments
table | player | instance of player |
table | custom_mt | meta table |
table | instance | instance of object |
19 | function PlayerStateMachine.new(player, custom_mt) |
20 | if custom_mt == nil then |
21 | custom_mt = PlayerStateMachine_mt |
22 | end |
23 | local self = setmetatable({}, custom_mt) |
24 | self.player = player |
25 | |
26 | -- State Machine information |
27 | self.playerStateIdle = PlayerStateIdle.new(self.player, self) |
28 | self.playerStateWalk = PlayerStateWalk.new(self.player, self) |
29 | self.playerStateRun = PlayerStateRun.new(self.player, self) |
30 | self.playerStateJump = PlayerStateJump.new(self.player, self) |
31 | self.playerStateSwim = PlayerStateSwim.new(self.player, self) |
32 | self.playerStateFall = PlayerStateFall.new(self.player, self) |
33 | self.playerStateCrouch = PlayerStateCrouch.new(self.player, self) |
34 | self.playerStateAnimalInteract = PlayerStateAnimalInteract.new(self.player, self) |
35 | self.playerStateAnimalRide = PlayerStateAnimalRide.new(self.player, self) |
36 | self.playerStateAnimalPet = PlayerStateAnimalPet.new(self.player, self) |
37 | self.playerStatePickup = PlayerStatePickup.new(self.player, self) |
38 | self.playerStateDrop = PlayerStateDrop.new(self.player, self) |
39 | self.playerStateThrow = PlayerStateThrow.new(self.player, self) |
40 | self.playerStateUseLight = PlayerStateUseLight.new(self.player, self) |
41 | self.playerStateCycleHandtool = PlayerStateCycleHandtool.new(self.player, self) |
42 | |
43 | self.stateList = { ["idle"] = self.playerStateIdle, |
44 | ["walk"] = self.playerStateWalk, |
45 | ["run"] = self.playerStateRun, |
46 | ["jump"] = self.playerStateJump, |
47 | ["swim"] = self.playerStateSwim, |
48 | ["fall"] = self.playerStateFall, |
49 | ["crouch"] = self.playerStateCrouch, |
50 | ["animalInteract"] = self.playerStateAnimalInteract, |
51 | ["animalRide"] = self.playerStateAnimalRide, |
52 | ["animalPet"] = self.playerStateAnimalPet, |
53 | ["pickup"] = self.playerStatePickup, |
54 | ["drop"] = self.playerStateDrop, |
55 | ["throw"] = self.playerStateThrow, |
56 | ["useLight"] = self.playerStateUseLight, |
57 | ["cycleHandtool"] = self.playerStateCycleHandtool, |
58 | } |
59 | |
60 | -- field [from][to] : allowed |
61 | self.fsmTable = {} |
62 | self.fsmTable["walk"] = {} |
63 | self.fsmTable["walk"]["jump"] = true |
64 | self.fsmTable["walk"]["run"] = true |
65 | self.fsmTable["walk"]["swim"] = true |
66 | self.fsmTable["walk"]["crouch"] = true |
67 | self.fsmTable["walk"]["pickup"] = true |
68 | self.fsmTable["walk"]["drop"] = true |
69 | self.fsmTable["walk"]["throw"] = true |
70 | self.fsmTable["walk"]["useLight"] = true |
71 | self.fsmTable["walk"]["cycleHandtool"] = true |
72 | self.fsmTable["run"] = {} |
73 | self.fsmTable["run"]["jump"] = true |
74 | self.fsmTable["run"]["swim"] = true |
75 | self.fsmTable["run"]["pickup"] = true |
76 | self.fsmTable["run"]["drop"] = true |
77 | self.fsmTable["run"]["throw"] = true |
78 | self.fsmTable["run"]["useLight"] = true |
79 | self.fsmTable["run"]["cycleHandtool"] = true |
80 | self.fsmTable["run"]["crouch"] = true |
81 | self.fsmTable["crouch"] = {} |
82 | self.fsmTable["crouch"]["walk"] = true |
83 | self.fsmTable["crouch"]["jump"] = true |
84 | self.fsmTable["crouch"]["swim"] = true |
85 | self.fsmTable["crouch"]["animalInteract"] = true |
86 | self.fsmTable["crouch"]["animalRide"] = true |
87 | self.fsmTable["crouch"]["animalPet"] = true |
88 | self.fsmTable["crouch"]["pickup"] = true |
89 | self.fsmTable["crouch"]["drop"] = true |
90 | self.fsmTable["crouch"]["throw"] = true |
91 | self.fsmTable["crouch"]["useLight"] = true |
92 | self.fsmTable["crouch"]["cycleHandtool"] = true |
93 | self.fsmTable["fall"] = {} |
94 | self.fsmTable["fall"]["swim"] = true |
95 | self.fsmTable["fall"]["useLight"] = true |
96 | self.fsmTable["jump"] = {} |
97 | self.fsmTable["idle"] = {} |
98 | self.fsmTable["idle"]["jump"] = true |
99 | self.fsmTable["idle"]["crouch"] = true |
100 | self.fsmTable["idle"]["walk"] = true |
101 | self.fsmTable["idle"]["run"] = true |
102 | self.fsmTable["idle"]["animalInteract"] = true |
103 | self.fsmTable["idle"]["animalRide"] = true |
104 | self.fsmTable["idle"]["animalPet"] = true |
105 | self.fsmTable["idle"]["pickup"] = true |
106 | self.fsmTable["idle"]["drop"] = true |
107 | self.fsmTable["idle"]["throw"] = true |
108 | self.fsmTable["idle"]["useLight"] = true |
109 | self.fsmTable["idle"]["cycleHandtool"] = true |
110 | self.fsmTable["swim"] = {} |
111 | self.fsmTable["swim"]["walk"] = true |
112 | self.fsmTable["swim"]["run"] = true |
113 | self.fsmTable["swim"]["useLight"] = true |
114 | self.fsmTable["animalInteract"] = {} |
115 | self.fsmTable["animalInteract"]["crouch"] = true |
116 | self.fsmTable["animalInteract"]["idle"] = true |
117 | self.fsmTable["animalInteract"]["walk"] = true |
118 | self.fsmTable["animalInteract"]["run"] = true |
119 | self.fsmTable["animalPet"] = {} |
120 | self.fsmTable["animalPet"]["crouch"] = true |
121 | self.fsmTable["animalPet"]["idle"] = true |
122 | self.fsmTable["animalPet"]["walk"] = true |
123 | self.fsmTable["animalPet"]["run"] = true |
124 | |
125 | self.debugMode = false |
126 | return self |
127 | end |
update
DescriptionExecute all update methods of active player statesDefinition
update(float dt)Arguments
float | dt | delta time in ms |
177 | function PlayerStateMachine:update(dt) |
178 | for stateName, stateInstance in pairs(self.stateList) do |
179 | if stateInstance.isActive then |
180 | stateInstance:update(dt) |
181 | end |
182 | end |
183 | end |
updateTick
DescriptionExecute all update methods when network tick of active player statesDefinition
updateTick(float dt)Arguments
float | dt | delta time in ms |
188 | function PlayerStateMachine:updateTick(dt) |
189 | for stateName, stateInstance in pairs(self.stateList) do |
190 | if stateInstance.isActive then |
191 | stateInstance:updateTick(dt) |
192 | end |
193 | end |
194 | end |