public override void SetTransitionEvents()
        {
            StateTransition selectingUnit = GetTransitionByID(TransitionID.Previous);
            if (selectingUnit != null)
            {
                // 1. Disable Input
                DisableInputEvent disableInputEvent = new DisableInputEvent(EventID.DisableInput, this, new EventArgs<InputHandler>(stateMachine.InputHandler));
                selectingUnit.AddEvent(disableInputEvent, CoroutineID.Execute);

                // 2. Hide Expanded Unit GUI
                UnitWindow unitWindow = GameObject.Find("Unit Window").GetComponent<UnitWindow>();
                HideWindowEvent hideUnitWindow = new HideWindowEvent(EventID.HideUnitWindow, this, new EventArgs<Window>(unitWindow));
                selectingUnit.AddEvent(hideUnitWindow, CoroutineID.Execute);

                // 3. Deactivate Unit
                DeactivateUnitEvent deactivateUnitEvent = new DeactivateUnitEvent
                    (EventID.DeactivateUnit, this, new EventArgs<Actors.Cursor, Faction>(stateMachine.MouseCursor, stateMachine.TurnHandler.ActiveFaction));
                selectingUnit.AddEvent(deactivateUnitEvent, CoroutineID.Execute);

                // 4. Deselect Unit
                DeselectUnitEvent deselectUnit = new DeselectUnitEvent(EventID.DeselectUnit, this,
                    new EventArgs<Actors.Cursor>(stateMachine.MouseCursor));
                selectingUnit.AddEvent(deselectUnit, CoroutineID.Execute);

                // 5. Enable Input
                EnableInputEvent enableInput = new EnableInputEvent(EventID.EnableInput, this,
                    new EventArgs<InputHandler>(stateMachine.InputHandler));
                selectingUnit.AddEvent(enableInput, CoroutineID.Execute);
            }

            StateTransition changingTurns = GetTransitionByID(TransitionID.Next);
            if (changingTurns != null)
            {
                // 1. Disable Input
                DisableInputEvent disableInputEvent = new DisableInputEvent(EventID.DisableInput, this, new EventArgs<InputHandler>(stateMachine.InputHandler));
                changingTurns.AddEvent(disableInputEvent, CoroutineID.Execute);

                // 2. Hide Expanded Unit GUI
                UnitWindow unitWindow = GameObject.Find("Unit Window").GetComponent<UnitWindow>();
                HideWindowEvent hideUnitWindow = new HideWindowEvent(EventID.HideUnitWindow, this, new EventArgs<Window>(unitWindow));
                changingTurns.AddEvent(hideUnitWindow, CoroutineID.Execute);

                // 3. Deactivate Unit
                DeactivateUnitEvent deactivateUnitEvent = new DeactivateUnitEvent
                    (EventID.DeactivateUnit, this, new EventArgs<Actors.Cursor, Faction>(stateMachine.MouseCursor, stateMachine.TurnHandler.ActiveFaction));
                changingTurns.AddEvent(deactivateUnitEvent, CoroutineID.Execute);

                // 4. Deselect Unit
                DeselectUnitEvent deselectUnit = new DeselectUnitEvent(EventID.DeselectUnit, this,
                    new EventArgs<Actors.Cursor>(stateMachine.MouseCursor));
                changingTurns.AddEvent(deselectUnit, CoroutineID.Execute);
            }
        }
        public override void SetTransitionEvents()
        {
            // Get Unit Action Menu
            GameObject unitActionMenuObject = GameObject.Find("Unit Action Menu");
            UnitActionMenu unitActionMenu = null;

            if (unitActionMenuObject != null)
                unitActionMenu = unitActionMenuObject.GetComponent<UnitActionMenu>();

            StateTransition deselectingUnit = GetTransitionByID(TransitionID.Previous);
            if (deselectingUnit != null)
            {
                // 1. Disable Input
                DisableInputEvent disableInput = new DisableInputEvent(EventID.DisableInput, this,
                    new EventArgs<InputHandler>(stateMachine.InputHandler));
                deselectingUnit.AddEvent(disableInput, CoroutineID.Execute);

                // 2. Hide Expanded Unit GUI
                UnitWindow unitWindow = GameObject.Find("Unit Window").GetComponent<UnitWindow>();
                HideWindowEvent hideUnitWindow = new HideWindowEvent(EventID.HideUnitWindow, this, new EventArgs<Window>(unitWindow));
                deselectingUnit.AddEvent(hideUnitWindow, CoroutineID.Execute);

                // 3. Hide Movement Area of Selected Unit
                // 4. Hide Movement Line within Movement Area
                HideMovementAreaEvent hideMovementArea = new HideMovementAreaEvent(EventID.HideMovementArea, this,
                    new EventArgs<Pathfinder>(stateMachine.Pathfinder));
                deselectingUnit.AddEvent(hideMovementArea, CoroutineID.Execute);

                // 5. Deselect Unit
                DeselectUnitEvent deselectUnit = new DeselectUnitEvent(EventID.DeselectUnit, this,
                    new EventArgs<Actors.Cursor>(stateMachine.MouseCursor));
                deselectingUnit.AddEvent(deselectUnit, CoroutineID.Execute);

                // 6. Enable Input
                EnableInputEvent enableInput = new EnableInputEvent(EventID.EnableInput, this,
                    new EventArgs<InputHandler>(stateMachine.InputHandler));
                deselectingUnit.AddEvent(enableInput, CoroutineID.Execute);
            }

            StateTransition confirmingUnitMove = GetTransitionByID(TransitionID.Next);
            if (confirmingUnitMove != null)
            {
                // 1. Disable Input
                DisableInputEvent disableInput = new DisableInputEvent(EventID.DisableInput, this,
                    new EventArgs<InputHandler>(stateMachine.InputHandler));
                confirmingUnitMove.AddEvent(disableInput, CoroutineID.Execute);

                // 2. Disable Movement Area
                // 3. Disable Movement Line
                HideMovementAreaEvent hideMovementArea = new HideMovementAreaEvent(
                    EventID.HideMovementArea, this, new EventArgs<Pathfinder>(stateMachine.Pathfinder));
                confirmingUnitMove.AddEvent(hideMovementArea, CoroutineID.Execute);

                // 4. Move unit to selected node
                MoveUnitEvent moveUnit = new MoveUnitEvent(EventID.MoveUnit, this,
                    new EventArgs<Actors.Cursor, Pathfinder, float>(stateMachine.MouseCursor, stateMachine.Pathfinder, 0.1f));
                confirmingUnitMove.AddEvent(moveUnit, CoroutineID.Execute);

                // 4. Pan Camera to Selected Unit
                PanCameraToSelectedUnitObjectEvent panCameraToSelectedUnitObject = new PanCameraToSelectedUnitObjectEvent(
                    EventID.PanCameraToSelectedUnitObject, this,
                    new EventArgs<CameraHandler, Actors.Cursor, float>(stateMachine.CameraHandler, stateMachine.MouseCursor, 1.0f));
                confirmingUnitMove.AddEvent(panCameraToSelectedUnitObject, CoroutineID.Execute);

                // 5. Show Unit Action Menu
                ShowWindowEvent showWindow = new ShowWindowEvent(EventID.ShowWindow, this, new EventArgs<Window>(unitActionMenu));
                confirmingUnitMove.AddEvent(showWindow, CoroutineID.Execute);

                // 6. Enable Keyboard
                EnableKeyboardEvent enableKeyboard = new EnableKeyboardEvent(EventID.EnableKeyboard, this, new EventArgs<InputHandler>(stateMachine.InputHandler));
                confirmingUnitMove.AddEvent(enableKeyboard, CoroutineID.Execute);
            }
        }