public bool ChangeState(UnitState newState) { if (newState.Equals(State)) { return(true); } UnitState oldState = State; if (oldState.Equals(UnitState.Attack) || oldState.Equals(UnitState.Idle)) { GetComponent <NavMeshObstacle>().enabled = false; GetComponent <NavMeshAgent>().enabled = true; } State = newState; Debug.Log(UnitID.ToString() + " Change State " + oldState.ToString() + " - " + State.ToString()); _currentState.Disable(); switch (State) { case UnitState.Idle: _currentState = _idleState; GetComponent <NavMeshAgent>().enabled = false; GetComponent <NavMeshObstacle>().enabled = true; AnimateIdle(); break; case UnitState.Attack: _currentState = _attackState; GetComponent <NavMeshAgent>().enabled = false; GetComponent <NavMeshObstacle>().enabled = true; _characterAnimationEventCalls.InvokeOnAction(CharacterAnimationEventCalls.K_STATE_ATTACK_IN); AnimateAttack(); break; case UnitState.Move: _currentState = _moveState; AnimateMove(); break; case UnitState.Death: GetComponent <NavMeshObstacle>().enabled = false; GetComponent <NavMeshAgent>().enabled = false; break; default: _currentState = _moveState; AnimateIdle(); break; } _currentState.Enable(); return(true); }
// Set current/next state. public bool SetState(bool cur, bool alive) { UnitState temp = new UnitState(alive, curState.Id); if (cur) { if (!curState.Equals(temp)) { curState = new UnitState(temp); return(true); } return(false); } nextState = new UnitState(temp); return(true); }
public void StartMoving() { if (unitState.Equals(UnitState.IDLE)) { StartCoroutine(MovingCoroutine()); } }