Gegnerpathing Logik
This commit is contained in:
+45
-6
@@ -15,9 +15,10 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
// Wird von CharacterRotation verwendet.
|
||||
public Vector2 MovementDirection { get; private set; }
|
||||
|
||||
private void Start()
|
||||
private void Awake()
|
||||
{
|
||||
targetManager = FindFirstObjectByType<EnemyTargetManager>();
|
||||
targetManager =
|
||||
FindFirstObjectByType<EnemyTargetManager>();
|
||||
|
||||
if (targetManager == null)
|
||||
{
|
||||
@@ -25,9 +26,31 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
"Enemy: Kein EnemyTargetManager gefunden!",
|
||||
this
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (targetManager != null)
|
||||
{
|
||||
targetManager.OnTargetsChanged +=
|
||||
SelectClosestTarget;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (targetManager != null)
|
||||
{
|
||||
targetManager.OnTargetsChanged -=
|
||||
SelectClosestTarget;
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (targetManager == null)
|
||||
return;
|
||||
|
||||
SelectClosestTarget();
|
||||
}
|
||||
@@ -37,22 +60,27 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
if (targetManager == null)
|
||||
return;
|
||||
|
||||
// Kein aktuelles Ziel vorhanden.
|
||||
if (currentTarget == null)
|
||||
{
|
||||
MovementDirection = Vector2.zero;
|
||||
|
||||
SelectClosestTarget();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Falls das Ziel deaktiviert wurde:
|
||||
// Das aktuelle Ziel wurde deaktiviert.
|
||||
if (!currentTarget.gameObject.activeInHierarchy)
|
||||
{
|
||||
SelectClosestTarget();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
MoveTowardsTarget();
|
||||
|
||||
// Ziel erreicht.
|
||||
if (HasReachedTarget())
|
||||
{
|
||||
SelectClosestTarget();
|
||||
@@ -61,8 +89,13 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
|
||||
private void SelectClosestTarget()
|
||||
{
|
||||
if (targetManager == null)
|
||||
return;
|
||||
|
||||
currentTarget =
|
||||
targetManager.GetClosestActiveTarget(transform.position);
|
||||
targetManager.GetClosestActiveTarget(
|
||||
transform.position
|
||||
);
|
||||
|
||||
if (currentTarget == null)
|
||||
{
|
||||
@@ -72,6 +105,9 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
|
||||
private void MoveTowardsTarget()
|
||||
{
|
||||
if (currentTarget == null)
|
||||
return;
|
||||
|
||||
Vector3 direction =
|
||||
currentTarget.position - transform.position;
|
||||
|
||||
@@ -89,6 +125,9 @@ public class Enemy : MonoBehaviour, IMovementDirection
|
||||
|
||||
private bool HasReachedTarget()
|
||||
{
|
||||
if (currentTarget == null)
|
||||
return false;
|
||||
|
||||
return Vector3.Distance(
|
||||
transform.position,
|
||||
currentTarget.position
|
||||
|
||||
Reference in New Issue
Block a user