private void CallbackEnemyBehaviourStateChangeEvent(object o, EnemyBehavourChangeArgs args) { if (args.NewBehaviourState == EnemyBehaviour.BehaviourState.ATTACK) { PlaySound(attackPlayerSound); } }
private void FixedUpdate() { EnemyBehavourChangeArgs args = new EnemyBehavourChangeArgs(); args.NewBehaviourState = CurrentState; this.detectedObstacle = DetectObstacles(); switch (this.CurrentState) { case BehaviourState.IDLE: TryChangeToPatrol(); SetChaseIfCanSeeTarget(); break; case BehaviourState.PATROL: Move(this.PatrolSpeed); TryChangeToIdle(this.detectedObstacle); SetChaseIfCanSeeTarget(); break; case BehaviourState.CHASE: if (!IsPlayerInAttackReach()) { Move(this.ChaseSpeed); } SetIdleIfLostSightOfTarget(); SetAttackIfTargetIsInReach(); break; case BehaviourState.ATTACK: this.Attack(); break; default: Idle(); break; } EnemyBehaviourStateChangeEvent?.Invoke(this, args); }