Пример #1
0
    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);
    }
Пример #2
0
    // 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);
    }
Пример #3
0
 public void StartMoving()
 {
     if (unitState.Equals(UnitState.IDLE))
     {
         StartCoroutine(MovingCoroutine());
     }
 }