You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.5 KiB
C#

3 weeks ago
using System;
using UnityEngine;
namespace Unity.BossRoom.Gameplay.GameplayObjects.Character.AI
{
public class IdleAIState : AIState
{
private AIBrain m_Brain;
public IdleAIState(AIBrain brain)
{
m_Brain = brain;
}
public override bool IsEligible()
{
return m_Brain.GetHatedEnemies().Count == 0;
}
public override void Initialize()
{
}
public override void Update()
{
// while idle, we are scanning for jerks to hate
DetectFoes();
}
protected void DetectFoes()
{
float detectionRange = m_Brain.DetectRange;
// we are doing this check every Update, so we'll use square-magnitude distance to avoid the expensive sqrt (that's implicit in Vector3.magnitude)
float detectionRangeSqr = detectionRange * detectionRange;
Vector3 position = m_Brain.GetMyServerCharacter().physicsWrapper.Transform.position;
// in this game, NPCs only attack players (and never other NPCs), so we can just iterate over the players to see if any are nearby
foreach (var character in PlayerServerCharacter.GetPlayerServerCharacters())
{
if (m_Brain.IsAppropriateFoe(character) && (character.physicsWrapper.Transform.position - position).sqrMagnitude <= detectionRangeSqr)
{
m_Brain.Hate(character);
}
}
}
}
}