public override void RunBehavior() { switch (simpleState) { case SimpleStates.Idle: break; case SimpleStates.BecomingAware: if (Time.time - awareDelayTimer > fuzzyDelay) { simpleState = SimpleStates.AwareOfPlayer; } break; case SimpleStates.AwareOfPlayer: Vector3 fVelocity = navMeshAgent.velocity; float d_p = AIBlackboard.DistanceToPlayer2D(transform.position); if (AIBlackboard.DistanceToPlayer2D(transform.position) > distanceFromPlayer) { fVelocity = Vector3.MoveTowards(fVelocity, AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 100 * aggressiveness); } if (d_p < tooCloseToPlayer) { fVelocity += -AIBlackboard.DirectionToPlayer2D(transform.position).normalized *playerSeparation; } if (monsterAttack != null) { if (monsterAttack.AttackCondition() && monsterAttack.HasAttackCooled()) { simpleState = SimpleStates.Attack; monsterAware.PlayOneShot(monsterAware.clip, 0.3f); } else if (monsterAttack.CooldownLeft() < fear) { fVelocity = Vector3.MoveTowards(fVelocity, -AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 40 * fear); } } fVelocity.x = Mathf.Clamp(fVelocity.x, -maxSpeed, maxSpeed); fVelocity.y = Mathf.Clamp(fVelocity.y, -maxSpeed, maxSpeed); fVelocity.z = Mathf.Clamp(fVelocity.z, -maxSpeed, maxSpeed); navMeshAgent.velocity = fVelocity; break; case SimpleStates.Attack: if (monsterAttack != null) { if (monsterAttack.RunAttack()) { simpleState = SimpleStates.AwareOfPlayer; } } break; } }