public void Update() { stateDict[currentState].Update(); eUnitState newState = stateDict[currentState].Evaluate(); if (newState != currentState) { stateDict[currentState].Exit(); currentState = newState; stateDict[currentState].Enter(); } }
public void switchToState(eUnitState newState, int targetID = Utilities.INVALID_ID, Vector3 position = new Vector3()) { m_targetID = targetID; m_currentState = newState; switch (newState) { case eUnitState.AwaitingDecision: case eUnitState.AttackingEnemy: m_tankMovement.stop(); break; case eUnitState.MovingToNewPosition: m_tankMovement.moveTo(position); break; case eUnitState.SetDestination: { m_currentState = eUnitState.MovingToNewPosition; m_tankMovement.moveTo(position); } break; case eUnitState.SetAttackDestination: { m_currentState = eUnitState.AttackMovingToNewPosition; m_tankMovement.moveTo(position); } break; case eUnitState.SetDestinationToSafePosition: { m_tankMovement.moveTo(Pathfinder.Instance.getSafePosition(transform.position, (int)m_unit.getFactionName(), m_unit.getScaredValue())); m_currentState = eUnitState.MovingToNewPosition; } break; } }
public StateMachine(eUnitState currentState, Dictionary <eUnitState, BaseState> stateDict) { this.currentState = currentState; this.stateDict = stateDict; }
public Transition(eUnitState toState, List <MyDelegate> list, Enemy enemy) { this.toState = toState; this.list = list; this.enemy = enemy; }
public BaseState(Enemy e, List <Transition> list, eUnitState state) { this.enemy = e; this.list = list; this.state = state; }
public void StateChange(eUnitState state) { if (unitState != state) { switch (unitState) { case eUnitState.Standby: break; case eUnitState.Move: StopCoroutine("Move"); break; case eUnitState.Atk: StopCoroutine("Attack"); break; case eUnitState.Build: StopCoroutine("Attack"); break; case eUnitState.Work: Renderer[] rl = transform.GetComponentsInChildren <Renderer>(); foreach (Renderer r in rl) { r.enabled = true; } Collider[] cl = transform.GetComponentsInChildren <Collider>(); foreach (Collider c in cl) { c.enabled = true; } Target.OnTargetEnable(); break; } unitState = state; switch (state) { case eUnitState.Standby: ani.Play("StandAni"); break; case eUnitState.Move: ani.Play("WalkAni"); break; case eUnitState.Atk: StartCoroutine("Attack"); break; case eUnitState.Build: StartCoroutine("Attack"); break; case eUnitState.Dead: StopAllCoroutines(); StartCoroutine("Dead"); break; case eUnitState.Work: Renderer[] rl = transform.GetComponentsInChildren <Renderer>(); foreach (Renderer r in rl) { r.enabled = false; } Collider[] cl = transform.GetComponentsInChildren <Collider>(); foreach (Collider c in cl) { c.enabled = false; } Target.OnTargetDisable(); break; } } }