63 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|