/// <summary>
    /// Event를 기다리는 State입니다.
    /// </summary>
    /// <param name="e">기다릴 Event</param>
    /// <param name="nextState">이 State 다음 State</param>
    /// <param name="paramCondition">Event발생시 매개변수를 검사하여 nextState로 Tranisition 여부를 결정하는 Predicate</param>
    public TurnMgr_WaitSingleEvent_(
        TurnMgr owner, Unit unit, Event e, TurnMgr_State_ nextState,
        Predicate <EventParam> paramCondition = null, Action onWaitEnter = null,
        Action onWaitExecute = null, Action onWaitExit = null) : base(owner, unit)
    {
        _e              = e;
        _nextState      = nextState;
        _paramCondition = paramCondition;

        _onWaitEnter   = onWaitEnter;
        _onWaitExecute = onWaitExecute;
        _onWaitExit    = onWaitExit;
    }
    protected override void OnEvent(EventParam param)
    {
        if (_ignoreCondition(param))
            return;

        foreach(var pair in _branches)
        {
            Predicate<EventParam> condition = pair.Key;
            TurnMgr_State_ nextState = pair.Value;

            if (condition(param))
            {
                owner.stateMachine.ChangeState(nextState, StateMachine<TurnMgr>.StateTransitionMethod.PopNPush);
                return;
            }
        }
    }
 /// <summary>
 /// Event를 기다리는 State입니다.
 /// </summary>
 /// <param name="e">기다릴 Event</param>
 /// <param name="nextState">Event발생시 Transition할 다음 State</param>
 /// <param name="onEvent">state를 바꾸기 전에 호출할 함수가 있다면 추가하세요.</param>
 public TurnMgr_WaitMultipleEvents_(TurnMgr owner, Unit unit, List <ObserverEvent> events,
                                    TurnMgr_State_ nextState, Action onWaitEnter = null, Action onWaitExecute = null, Action onWaitExit = null)
     : base(owner, unit, null, nextState, null, onWaitEnter, onWaitExecute, onWaitExit)
 {
     _events = events;
 }