예제 #1
0
        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> ();
		}