Files
OpenSpace/data/assets/util/state_machine_helper.asset
T
Emil Axelsson c2cc2bab17 Feature/state machine (#673)
* Implement simple state machine example in Lua
* Use defaults for trail widths
2018-07-13 10:29:45 -04:00

60 lines
1.8 KiB
Plaintext

local goToNextStateFunction = function (machine)
if (machine.currentStateIndex >= #machine.states) then
machine.currentStateIndex = #machine.states
return
end
if (machine.currentStateIndex == 0) then
openspace.printInfo("Starting state machine with " ..
machine.states[machine.currentStateIndex + 1].Title)
elseif (machine.currentStateIndex == #machine.states) then
openspace.printInfo("Proceed from " ..
machine.states[machine.currentStateIndex].Title
)
else
openspace.printInfo("Proceed from " ..
machine.states[machine.currentStateIndex].Title .. " to " ..
machine.states[machine.currentStateIndex + 1].Title
)
end
machine.currentStateIndex = machine.currentStateIndex + 1
machine.states[machine.currentStateIndex].Play()
end
local goToPreviousStateFunction = function (machine)
if (machine.currentStateIndex < 1) then
machine.currentStateIndex = 0
return
end
if (machine.currentStateIndex == 1) then
openspace.printInfo("Rewind from " ..
machine.states[machine.currentStateIndex].Title
)
else
openspace.printInfo("Rewind from " ..
machine.states[machine.currentStateIndex].Title .. " to " ..
machine.states[machine.currentStateIndex - 1].Title
)
end
machine.states[machine.currentStateIndex].Rewind()
machine.currentStateIndex = machine.currentStateIndex - 1
end
local createStateMachine = function (states)
local machine = {
states = states,
currentStateIndex = 0
}
machine.goToNextState = function () goToNextStateFunction(machine) end
machine.goToPreviousState = function () goToPreviousStateFunction(machine) end
return machine
end
asset.export('createStateMachine', createStateMachine)