TaskStateMachine
Reusable state machine implementation for tasks
Library Implementation
-- TaskStateMachine.lua
-- Reusable state machine for task execution
local TaskStateMachine = {}
-- Create a new task state machine
function TaskStateMachine.new(subtaskNames)
local state = {
current = "INIT",
startTime = 0,
currentSubtask = 0,
subtaskResults = {},
data = {}
}
-- Build subtasks array
state.subtasks = {}
for i, name in ipairs(subtaskNames or {}) do
table.insert(state.subtasks, {
name = name,
status = "PENDING",
result = nil
})
end
return state
end
-- Transition to next state
function TaskStateMachine.transition(state, nextState, message)
state.current = nextState
return nextState, message
end
-- Check if all subtasks are complete
function TaskStateMachine.allSubtasksComplete(state)
for _, subtask in ipairs(state.subtasks) do
if subtask.status ~= "COMPLETE" then
return false
end
end
return true
end
-- Get next pending subtask
function TaskStateMachine.getNextSubtask(state)
for i, subtask in ipairs(state.subtasks) do
if subtask.status == "PENDING" then
return i, subtask
end
end
return nil, nil
end
return TaskStateMachine
1266 characters
Usage Example
-- Usage example in a task:
local TaskStateMachine = require("TaskStateMachine")
local taskState = nil
function init(params)
local subtaskNames = {"Plan", "Move", "Execute", "Assess", "Return"}
taskState = TaskStateMachine.new(subtaskNames)
taskState.startTime = vrf.getSimulationTime()
taskState.data = params or {}
return TaskStateMachine.transition(taskState, "READY", "Task initialized")
end
function tick()
if taskState.current == "READY" then
return TaskStateMachine.transition(taskState, "EXECUTING", "Starting execution")
elseif taskState.current == "EXECUTING" then
if TaskStateMachine.allSubtasksComplete(taskState) then
return TaskStateMachine.transition(taskState, "COMPLETE", "All subtasks done")
end
end
return "CONTINUE", "Processing"
end
Quick Reference
Import Statement
local TaskStateMachine = require("TaskStateMachine")
Category
state machine
Key Features
- Create and manage task state machines
- Handle state transitions (INIT → READY → EXECUTING → COMPLETE)
- Track subtask execution status
- Query state and progress