/// <summary> /// Awake. /// </summary> private void Awake() { _stateMachineController = new StateMachineController(); _navMeshAgent = GetComponent <NavMeshAgent>(); _entity = GetComponent <Entity>(); EntityIdle entityIdle = new EntityIdle(); EntityChasePlayer entityChasePlayer = new EntityChasePlayer(_navMeshAgent); EntityAttack entityAttack = new EntityAttack(); EntityDead entityDead = new EntityDead(); _stateMachineController.Add(entityIdle); _stateMachineController.Add(entityChasePlayer); _stateMachineController.Add(entityAttack); _stateMachineController.AddAnyStateTransition(entityDead, () => _entity.IsDead); Player player = FindObjectOfType <Player>(); _stateMachineController.AddStateTransition(entityIdle, entityChasePlayer, () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 5); _stateMachineController.AddStateTransition(entityChasePlayer, entityAttack, () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 2); _stateMachineController.ChangeState(entityIdle); }
private void OnEntityDead(HealthController controller) { if (EntityDead != null) { EntityDead.Invoke(controller); } }