LunarInfantry/Assets/Scripts/Enemy.cs
2026-01-20 01:52:57 -08:00

63 lines
1.9 KiB
C#

using System;
using Unity.VisualScripting;
using UnityEngine;
using Random = UnityEngine.Random;
public class Enemy : Entity
{
public static event Action<Entity> OnKill;
[Header("Enemy Stats")]
public int turnSpeed;
public float minimumAttackRange;
private PlayerEntity closestPlayer;
//no weapons yet for enemies so...
public float damage;
void Start()
{
turnSpeed = Random.Range(0, 100);
}
[ContextMenu("ForceTurn")]
public void StartTurn()
{
closestPlayer = FindClosestPlayer();
if (Vector3.Distance(transform.position, closestPlayer.transform.position) > minimumAttackRange)
{
EnemyMovement.instance.PathfindToTarget(GridManager.instance.FindClosestEmptyTile(closestPlayer.currentTile.neighbors[Random.Range(0, closestPlayer.currentTile.neighbors.Count)]), this);
}
else
{
Attack(closestPlayer);
TurnHandler.instance.UpdateTurns();
}
}
protected override void FinishedMovement()
{
base.FinishedMovement();
TurnHandler.instance.UpdateTurns();
}
private PlayerEntity FindClosestPlayer()
{
PlayerEntity currentClosestPlayer = null;
foreach (PlayerEntity player in TurnHandler.instance.playerEntities)
{
if (!currentClosestPlayer || Vector3.Distance(player.transform.position, transform.position) < Vector3.Distance(currentClosestPlayer.transform.position, transform.position))
{
currentClosestPlayer = player;
}
}
return currentClosestPlayer;
}
protected override void OnKillEffects(Entity attacker)
{
TurnHandler.instance.enemyEntities.Remove(this);
OnKill?.Invoke(attacker);
Destroy(gameObject);
}
public void Attack(PlayerEntity target)
{
target.TakeDamage(damage, this);
}
}