Exemplo n.º 1
0
    private void OnEnterState(int prevState, int newState)
    {
        mCurrentStateTime = 0.0f;

        eCharacterStates prevCharState = (eCharacterStates)prevState;
        eCharacterStates newCharState  = (eCharacterStates)newState;

        Debug.Log("Prev State: " + prevCharState + " New State: " + newCharState);

        // Trigger new state
        switch (newCharState)
        {
        case eCharacterStates.Idle:
            break;

        case eCharacterStates.Walk:
            mDestinationPosition = GetRandomDestination();
            break;

        case eCharacterStates.Work:
            mTargetBuilding = GetClosestWorkplace();
            break;

        case eCharacterStates.Dead:
            mSoulScore = 0;
            OnCharacterDead?.Invoke(this);
            break;
        }
    }
Exemplo n.º 2
0
    private void OnUpdateState(int currentState, float deltaTime)
    {
        eCharacterStates currentCharState = (eCharacterStates)currentState;

        // Update current state
        switch (currentCharState)
        {
        case eCharacterStates.Idle:
            break;

        case eCharacterStates.Walk:
            if (Vector3.Distance(_GameObject.transform.position, mDestinationPosition) > 0.1f)
            {
                _GameObject.transform.position = WalkTo(mDestinationPosition);
            }
            else
            {
                mStateMachine.ChangeState((int)eCharacterStates.Idle);
            }
            break;

        case eCharacterStates.Work:
            if (Vector3.Distance(_GameObject.transform.position, mTargetBuilding._GameObject.transform.position) > 0.1f)
            {
                _GameObject.transform.position = WalkTo(mTargetBuilding._GameObject.transform.position);
            }
            else
            {
                if (_GameObject.activeSelf)
                {
                    _GameObject.SetActive(false);
                    mTargetBuilding.StartTask(this);
                    mTargetBuilding.OnBuildingTaskComplete += OnTaskComplete;
                }
            }
            break;
        }

        //_Health -= (deltaTime / 20.0f);
        if (_Health <= 0.0f)
        {
            mStateMachine.ChangeState((int)eCharacterStates.Dead);
        }
        else
        {
            if (currentCharState == eCharacterStates.Idle)
            {
                mCurrentStateTime += deltaTime;
                if (mCurrentStateTime >= mMaxIdleTime)
                {
                    int newState = Random.Range(0, (int)eCharacterStates.Dead);
                    mStateMachine.ChangeState(newState);
                }
            }
        }
    }
Exemplo n.º 3
0
    private void OnExitState(int currentState, int newState)
    {
        eCharacterStates currentCharState = (eCharacterStates)currentState;
        eCharacterStates newCharState     = (eCharacterStates)newState;

        // Debug.Log("Current State: " + currentCharState + " New State: " + newCharState);

        // Close out old state
        switch (currentCharState)
        {
        case eCharacterStates.Idle:
            break;

        case eCharacterStates.Walk:
            mDestinationPosition = mSpawnPosition;
            break;

        case eCharacterStates.Work:
            _GameObject.SetActive(true);
            break;
        }
    }