import { LoadedMachineConfiguration } from "../../src/types"; import { StateMachine } from "../../src/state-machines/state-machine"; export class VR_HELP_STATE_MACHINE extends StateMachine { constructor(options: LoadedMachineConfiguration) { const { context } = options; super([ { "context": { "errorCounter": 0, "task.name": "", ...context }, "id": "VR_HELP", "initial": "ready", "states": { "ATTRATTORE1": { "exit": [], "meta": { "VR": [ { "name": "Freccia" } ] }, "on": { "INSTANT": "IDLE" }, "type": "" }, "ATTRATTORE2": { "exit": [], "meta": { "VR": [ { "name": "Spotlight" } ] }, "on": { "INSTANT": "IDLE" }, "type": "" }, "GENERIC_HELP": { "exit": [], "meta": { "CA": { "utterance": "HELP" } }, "on": { "ASK_HOW": "HELP_HOW", "ASK_WHAT": [ { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "HELP_WHAT_GAZE" }, { "actions": [ "" ], "cond": "taskATnameEQUALselect", "target": "HELP_WHAT_SELECT" }, { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "HELP_WHAT_MOVE" } ], "ASK_WHERE": [ { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "WHERE_MOVE" }, { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "WHERE_GAZE" } ], "NEGATIVE": "IDLE", "SILENT": "IDLE" }, "type": "" }, "GET_HELP_INFO": { "exit": [], "meta": { "CA": { "utterance": "NEED_HELP" } }, "on": { "AFFIRMATIVE": "GENERIC_HELP", "ASK_TASK": [ { "actions": [ "" ], "cond": "taskATnameEQUALselect", "target": "REPEAT_GOAL_SELECT" }, { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "REPEAT_GOAL_MOVE" }, { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "REPEAT_GOAL_GAZE" } ], "NEGATIVE": "IDLE", "SILENT": "GENERIC_HELP" }, "type": "" }, "HELP_HOW": { "exit": [], "meta": { "CA": { "utterance": "EXPLAIN_TASK" } }, "on": { "INSTANT": [ { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "HOW_GAZE" }, { "actions": [ "" ], "cond": "taskATnameEQUALselect", "target": "HOW_SELECT" }, { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "HOW_MOVE" } ] }, "type": "" }, "HELP_WHAT_GAZE": { "exit": [], "meta": { "CA": { "utterance": "WHAT_GAZE" }, "VR": [ { "name": "immagini_CA" } ] }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" } ] }, "type": "" }, "HELP_WHAT_MOVE": { "exit": [], "meta": { "CA": { "utterance": "WHAT_MOVE" }, "VR": [ { "name": "immagini_CA" } ] }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" } ] }, "type": "" }, "HELP_WHAT_SELECT": { "exit": [], "meta": { "CA": { "utterance": "WHAT_SELECT" }, "VR": [ { "name": "immagini_CA" } ] }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" } ] }, "type": "" }, "HOW_GAZE": { "exit": [], "meta": { "CA": { "utterance": "DESCRIBE_GAZE" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" } ] }, "type": "" }, "HOW_MOVE": { "exit": [], "meta": { "CA": { "utterance": "DESCRIBE_MOVE" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" } ] }, "type": "" }, "HOW_SELECT": { "exit": [], "meta": { "CA": { "utterance": "DESCRIBE_SELECT" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" } ] }, "type": "" }, "IDLE": { "exit": [], "meta": {}, "on": { "ASK_HELP": "GENERIC_HELP", "ASK_HOW": "HELP_HOW", "ASK_TASK": [ { "actions": [ "" ], "cond": "taskATnameEQUALselect", "target": "REPEAT_GOAL_SELECT" }, { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "REPEAT_GOAL_MOVE" }, { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "REPEAT_GOAL_GAZE" } ], "ASK_WHAT": [ { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "HELP_WHAT_GAZE" }, { "actions": [ "" ], "cond": "taskATnameEQUALselect", "target": "HELP_WHAT_SELECT" }, { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "HELP_WHAT_MOVE" } ], "ASK_WHERE": [ { "actions": [ "" ], "cond": "taskATnameEQUALmove", "target": "WHERE_MOVE" }, { "actions": [ "" ], "cond": "taskATnameEQUALgaze", "target": "WHERE_GAZE" } ], "INACTIVE": "GET_HELP_INFO" }, "type": "" }, "REPEAT_GOAL_GAZE": { "exit": [], "meta": { "CA": { "utterance": "GAZE_AT" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "", "target": "IDLE" } ] }, "type": "" }, "REPEAT_GOAL_MOVE": { "exit": [], "meta": { "CA": { "utterance": "MOVE_TO" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "", "target": "IDLE" } ] }, "type": "" }, "REPEAT_GOAL_SELECT": { "exit": [], "meta": { "CA": { "utterance": "SELECT_AT" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "", "target": "IDLE" } ] }, "type": "" }, "WHERE_GAZE": { "exit": [], "meta": { "CA": { "utterance": "WHERE_GAZE" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" } ] }, "type": "" }, "WHERE_MOVE": { "exit": [], "meta": { "CA": { "utterance": "WHERE_MOVE" } }, "on": { "INSTANT": [ { "actions": [ "errorCounterINCREMENT" ], "cond": "errorCounterLOWER3", "target": "IDLE" }, { "actions": [ "" ], "cond": "errorCounterGREATER4", "target": "ATTRATTORE2" }, { "actions": [ "" ], "cond": "errorCounterGREATER2", "target": "ATTRATTORE1" } ] }, "type": "" }, "end": { "exit": [], "meta": { "VR": [ { "name": "task_completed" } ] }, "on": { "INSTANT": "end" }, "type": "final" }, "ready": { "exit": [], "meta": {}, "on": { "READY": "IDLE" }, "type": "" } } }, { actions: { errorCounterINCREMENT: (context:any) => {context.errorCounter++;} }, guards: { errorCounterGREATER2: (context:any) => {return context.errorCounter > 2;}, errorCounterGREATER4: (context:any) => {return context.errorCounter > 4;}, errorCounterLOWER3: (context:any) => {return context.errorCounter < 3;}, taskATnameEQUALgaze: (context:any) => {return context.task.name === "gaze";}, taskATnameEQUALmove: (context:any) => {return context.task.name === "move";}, taskATnameEQUALselect: (context:any) => {return context.task.name === "select";} } } ]); } }