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