LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

PlayerStateMachine

Functions

activateState

Description
Activates 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
stringstateNameTothe player state we want to activate
Code
220function 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
236end

consoleCommandDebugFinalStateMachine

Description
Console command to toggle debug of player state machine
Definition
consoleCommandDebugFinalStateMachine()
Code
263function PlayerStateMachine:consoleCommandDebugFinalStateMachine()
264 if self.debugMode then
265 self.debugMode = false
266 else
267 self.debugMode = true
268 end
269end

deactivateState

Description
Deactivates a player state
Definition
deactivateState(string stateName)
Arguments
stringstateName
Code
241function PlayerStateMachine:deactivateState(stateName)
242 if (self.stateList[stateName] ~= nil) and (self.stateList[stateName].isActive == true) then
243 self.stateList[stateName]:deactivate()
244 end
245end

debugDraw

Description
Execute all debug draw methods. Displays is states are active and available. Also draw internal player state debug method.
Definition
debugDraw(float dt)
Arguments
floatdtdelta time in ms
Code
199function 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
215end

delete

Description
Methods for deleting player state machine
Definition
delete()
Code
131function 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
140end

getState

Description
Returns a player state
Definition
getState(string stateName)
Arguments
stringstateNamename of the state to search for
Return Values
tableplayerstate
Code
146function PlayerStateMachine:getState(stateName)
147 return self.stateList[stateName]
148end

isActive

Description
Check if a player state is active
Definition
isActive(string stateName)
Arguments
stringstateName
Return Values
booltrueif player state is active
Code
167function PlayerStateMachine:isActive(stateName)
168 if self.stateList[stateName] ~= nil then
169 return self.stateList[stateName].isActive
170 end
171 return false
172end

isAvailable

Description
Check if a player state is available and not already active.
Definition
isAvailable(string stateName)
Arguments
stringstateName
Return Values
booltrueif player state is available
Code
154function 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
161end

load

Description
Loads states
Definition
load()
Code
249function 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
259end

new

Description
Creating instance of player state machine. Initializing member variables: player states and a table containing those states.
Definition
new(table player, table custom_mt)
Arguments
tableplayerinstance of player
tablecustom_mtmeta table
Return Values
tableinstanceinstance of object
Code
19function 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
127end

update

Description
Execute all update methods of active player states
Definition
update(float dt)
Arguments
floatdtdelta time in ms
Code
177function 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
183end

updateTick

Description
Execute all update methods when network tick of active player states
Definition
updateTick(float dt)
Arguments
floatdtdelta time in ms
Code
188function 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
194end