122 lines
3.1 KiB
C#
122 lines
3.1 KiB
C#
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class UnitCtrl : MonoBehaviour
|
||
{
|
||
public UnitInfo unit;
|
||
public Animator anim;
|
||
public GameObject defensObj;
|
||
bool isHomeAttack;
|
||
|
||
List<UnitCtrl> enemyUnits;
|
||
|
||
public bool isEnemy;
|
||
|
||
float delay;
|
||
|
||
private void Awake()
|
||
{
|
||
enemyUnits = new List<UnitCtrl>();
|
||
isHomeAttack = false;
|
||
delay = 0;
|
||
}
|
||
private void Start()
|
||
{
|
||
if(isEnemy)
|
||
defensObj.tag = "enemy";
|
||
else
|
||
defensObj.tag = "player";
|
||
}
|
||
private void Update()
|
||
{
|
||
if (PlayCtrl.Instance.isEndGame)
|
||
return;
|
||
delay -= Time.deltaTime;
|
||
if (delay > 0)
|
||
return;
|
||
if (enemyUnits.Count != 0 || isHomeAttack)
|
||
{
|
||
if (enemyUnits.Count == 0)
|
||
{
|
||
anim.SetTrigger("att");
|
||
if (isEnemy)
|
||
{
|
||
PlayCtrl.Instance.player.campHp -= unit.attack;
|
||
if(PlayCtrl.Instance.player.campHp <= 0)
|
||
{
|
||
PlayCtrl.Instance.isEndGame = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
PlayCtrl.Instance.enemy.campHp -= unit.attack;
|
||
if (PlayCtrl.Instance.enemy.campHp <= 0)
|
||
{
|
||
PlayCtrl.Instance.isEndGame = true;
|
||
}
|
||
}
|
||
delay = unit.attackSpeed;
|
||
}
|
||
else
|
||
{
|
||
if (enemyUnits[0] != null)
|
||
{
|
||
anim.SetTrigger("att");
|
||
enemyUnits[0].Attack(unit.attack);
|
||
delay = unit.attackSpeed;
|
||
}
|
||
else
|
||
{
|
||
enemyUnits.RemoveAt(0);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
transform.position += Vector3.left * unit.moveSpeed * Time.deltaTime * (isEnemy ? 1 : -1);
|
||
}
|
||
|
||
}
|
||
private void OnTriggerEnter2D(Collider2D collision)
|
||
{
|
||
if (isEnemy)
|
||
{
|
||
if (collision.gameObject.CompareTag("player"))
|
||
{
|
||
enemyUnits.Add(collision.gameObject.GetComponentInParent<UnitCtrl>());
|
||
}
|
||
if (collision.gameObject.CompareTag("player_home"))
|
||
{
|
||
isHomeAttack = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (collision.gameObject.CompareTag("enemy"))
|
||
{
|
||
enemyUnits.Add(collision.gameObject.GetComponentInParent<UnitCtrl>());
|
||
}
|
||
if (collision.gameObject.CompareTag("enemy_home"))
|
||
{
|
||
isHomeAttack = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
/// </summary>
|
||
/// <param name="dmg"><3E><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||
public void Attack(int dmg)
|
||
{
|
||
unit.hp -= (dmg - unit.defense);
|
||
Debug.Log($"{dmg - unit.defense}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! {unit.hp}<7D><><EFBFBD><EFBFBD>.");
|
||
if(unit.hp <= 0)
|
||
{
|
||
//<2F>ӽ÷<D3BD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><>Ȱ<EFBFBD><C8B0> <20>Ҽ<EFBFBD> <20>ְ<EFBFBD> ó<><C3B3><EFBFBD>Ұ<EFBFBD>
|
||
Destroy(gameObject);
|
||
}
|
||
}
|
||
|
||
}
|