public RecyclerFSM(ExRecycler recycler) { this.recycler = recycler; state_off = new KFSMState("Off"); state_off.OnEnter = onenter_off; state_idle = new KFSMState("Idle"); state_idle.OnEnter = onenter_idle; state_idle.OnLeave = onleave_idle; state_captured_idle = new KFSMState("Captured Idle"); state_captured_idle.OnEnter = onenter_captured_idle; state_captured_idle.OnLeave = onleave_captured_idle; state_processing_part = new KFSMState("Processing Part"); state_processing_part.OnEnter = onenter_processing_part; state_processing_part.OnLeave = onleave_processing_part; state_transferring_resources = new KFSMState("Transferring Resources"); state_transferring_resources.OnEnter = onenter_transferring_resources; state_transferring_resources.OnLeave = onleave_transferring_resources; state_transferring_resources.OnFixedUpdate = onupdate_transferring_resources; event_enabled = new KFSMEvent("Enabled"); event_enabled.GoToStateOnEvent = state_idle; event_enabled.OnCheckCondition = check_enabled; event_enabled.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_enabled.OnEvent = delegate { LogEvent("Enabled"); }; event_disabled = new KFSMEvent("Disabled"); event_disabled.GoToStateOnEvent = state_off; event_disabled.OnCheckCondition = check_disabled; event_disabled.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_disabled.OnEvent = delegate { LogEvent("Disabled"); }; event_enter_field = new KFSMEvent("Enter Field"); event_enter_field.GoToStateOnEvent = state_captured_idle; event_enter_field.updateMode = KFSMUpdateMode.MANUAL_TRIGGER; event_enter_field.OnEvent = delegate { LogEvent("Enter Field"); }; event_part_selected = new KFSMEvent("Part Selected"); event_part_selected.GoToStateOnEvent = state_processing_part; event_part_selected.OnCheckCondition = check_part_selected; event_part_selected.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_part_selected.OnEvent = delegate { LogEvent("Part Selected"); }; event_resources_collected = new KFSMEvent("Resources Collected"); event_resources_collected.GoToStateOnEvent = state_transferring_resources; event_resources_collected.OnCheckCondition = check_resources_collected; event_resources_collected.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_resources_collected.OnEvent = delegate { LogEvent("Resources Collected"); }; event_resources_transferred = new KFSMEvent("Resources Transferred"); event_resources_transferred.GoToStateOnEvent = state_captured_idle; event_resources_transferred.OnCheckCondition = check_resources_transferred; event_resources_transferred.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_resources_transferred.OnEvent = delegate { LogEvent("Resources Transferred"); }; event_parts_exhausted = new KFSMEvent("Parts Exhausted"); event_parts_exhausted.GoToStateOnEvent = state_idle; event_parts_exhausted.OnCheckCondition = check_parts_exhausted; event_parts_exhausted.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_parts_exhausted.OnEvent = delegate { LogEvent("Parts Exhausted"); }; fsm = new RecFSM(); fsm.AddState(state_off); fsm.AddState(state_idle); fsm.AddState(state_captured_idle); fsm.AddState(state_processing_part); fsm.AddState(state_transferring_resources); fsm.AddEvent(event_enabled, new KFSMState [] { state_off }); fsm.AddEvent(event_disabled, new KFSMState [] { state_idle }); fsm.AddEvent(event_enter_field, new KFSMState [] { state_idle }); fsm.AddEvent(event_part_selected, new KFSMState [] { state_captured_idle }); fsm.AddEvent(event_resources_collected, new KFSMState [] { state_processing_part }); fsm.AddEvent(event_resources_transferred, new KFSMState [] { state_transferring_resources }); fsm.AddEvent(event_parts_exhausted, new KFSMState [] { state_captured_idle }); start_state = state_off; recycle_parts = new HashSet <uint> (); }
public RecyclerFSM (ExRecycler recycler) { this.recycler = recycler; state_off = new KFSMState ("Off"); state_off.OnEnter = onenter_off; state_idle = new KFSMState ("Idle"); state_idle.OnEnter = onenter_idle; state_idle.OnLeave = onleave_idle; state_captured_idle = new KFSMState ("Captured Idle"); state_captured_idle.OnEnter = onenter_captured_idle; state_captured_idle.OnLeave = onleave_captured_idle; state_processing_part = new KFSMState ("Processing Part"); state_processing_part.OnEnter = onenter_processing_part; state_processing_part.OnLeave = onleave_processing_part; state_transferring_resources = new KFSMState ("Transferring Resources"); state_transferring_resources.OnEnter = onenter_transferring_resources; state_transferring_resources.OnLeave = onleave_transferring_resources; state_transferring_resources.OnFixedUpdate = onupdate_transferring_resources; event_enabled = new KFSMEvent ("Enabled"); event_enabled.GoToStateOnEvent = state_idle; event_enabled.OnCheckCondition = check_enabled; event_enabled.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_enabled.OnEvent = delegate { LogEvent ("Enabled"); }; event_disabled = new KFSMEvent ("Disabled"); event_disabled.GoToStateOnEvent = state_off; event_disabled.OnCheckCondition = check_disabled; event_disabled.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_disabled.OnEvent = delegate { LogEvent ("Disabled"); }; event_enter_field = new KFSMEvent ("Enter Field"); event_enter_field.GoToStateOnEvent = state_captured_idle; event_enter_field.updateMode = KFSMUpdateMode.MANUAL_TRIGGER; event_enter_field.OnEvent = delegate { LogEvent ("Enter Field"); }; event_part_selected = new KFSMEvent ("Part Selected"); event_part_selected.GoToStateOnEvent = state_processing_part; event_part_selected.OnCheckCondition = check_part_selected; event_part_selected.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_part_selected.OnEvent = delegate { LogEvent ("Part Selected"); }; event_resources_collected = new KFSMEvent ("Resources Collected"); event_resources_collected.GoToStateOnEvent = state_transferring_resources; event_resources_collected.OnCheckCondition = check_resources_collected; event_resources_collected.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_resources_collected.OnEvent = delegate { LogEvent ("Resources Collected"); }; event_resources_transferred = new KFSMEvent ("Resources Transferred"); event_resources_transferred.GoToStateOnEvent = state_captured_idle; event_resources_transferred.OnCheckCondition = check_resources_transferred; event_resources_transferred.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_resources_transferred.OnEvent = delegate { LogEvent ("Resources Transferred"); }; event_parts_exhausted = new KFSMEvent ("Parts Exhausted"); event_parts_exhausted.GoToStateOnEvent = state_idle; event_parts_exhausted.OnCheckCondition = check_parts_exhausted; event_parts_exhausted.updateMode = KFSMUpdateMode.FIXEDUPDATE; event_parts_exhausted.OnEvent = delegate { LogEvent ("Parts Exhausted"); }; fsm = new RecFSM (); fsm.AddState (state_off); fsm.AddState (state_idle); fsm.AddState (state_captured_idle); fsm.AddState (state_processing_part); fsm.AddState (state_transferring_resources); fsm.AddEvent (event_enabled, new KFSMState [] {state_off}); fsm.AddEvent (event_disabled, new KFSMState [] {state_idle}); fsm.AddEvent (event_enter_field, new KFSMState [] {state_idle}); fsm.AddEvent (event_part_selected, new KFSMState [] {state_captured_idle}); fsm.AddEvent (event_resources_collected, new KFSMState [] {state_processing_part}); fsm.AddEvent (event_resources_transferred, new KFSMState [] {state_transferring_resources}); fsm.AddEvent (event_parts_exhausted, new KFSMState [] {state_captured_idle}); start_state = state_off; recycle_parts = new HashSet<uint> (); }