using System; using Unity.VisualScripting; using UnityEngine; using Random = UnityEngine.Random; public class Enemy : Entity { public static event Action 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); } }