57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
public class Enemy : Entity
|
|
{
|
|
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(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()
|
|
{
|
|
TurnHandler.instance.enemyEntities.Remove(this);
|
|
Destroy(gameObject);
|
|
}
|
|
public void Attack(PlayerEntity target)
|
|
{
|
|
target.TakeDamage(damage);
|
|
}
|
|
}
|