/// <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; }