| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using TMPro;
- public class EnemyTower : Character
- {
- public int id;
- public float height = 8;
- public bool haveDisappearTime; //有消失时间
- public float disappearTime; //消失时间
- private void Awake()
- {
- TowerMap.enemyTowers.Add(gameObject);
- Init();
- }
- private void Update()
- {
- if (haveDisappearTime)
- {
- disappearTime -= Time.deltaTime;
- if(state!=CharacterState.Die && disappearTime < 0)
- {
- ChangeState(CharacterState.Die);
- }
- }
- }
- public bool GetAttack()
- {
- if (targetCharacter != null)
- {
- return true;
- }
- return false;
- }
- public void SearchTarget()
- {
- targetCharacter = searchTrigger.GetMinDisTarget(targetTypes, true);
- }
- public override void OnState()
- {
- base.OnState();
- SearchTarget();
- attackTime -= Time.deltaTime;
- dieKeepTime -= Time.deltaTime;
- bool isAttack = GetAttack();
- switch (state)
- {
- case CharacterState.Idle:
- if (isAttack)
- {
- Attack_summon();
- break;
- }
- break;
- case CharacterState.Attack:
- if (attackTime <= 0)
- {
- ChangeState(CharacterState.Idle);
- break;
- }
- break;
- case CharacterState.Die:
- if (dieKeepTime <= 0)
- {
- TowerMap.enemyTowers.Remove(gameObject);
- gameObject.SetActive(false);
- break;
- }
- break;
- default:
- break;
- }
- }
- public override void ChangeState(CharacterState newState)
- {
- switch (state)
- {
- case CharacterState.Idle:
- break;
- case CharacterState.Attack:
- aniCollider.Play("NotAttack", 1, 0);
- attackTarget = null;
- break;
- case CharacterState.Die:
- isDie = false;
- break;
- default:
- break;
- }
- CharacterState oldState = state;
- state = newState;
- switch (newState)
- {
- case CharacterState.Idle:
- //ani.Play("idle", 0, 0);
- aniCollider.Play("Idle", 0, 0);
- rb.velocity = Vector3.zero;
- //animalAni.SetInteger("state", (int)PlayerState.Idle);
- break;
- case CharacterState.Attack:
- attackTarget = targetCharacter;
- if ((attackTarget.transform.position - transform.position).x > 0
- && bodyTrans.localScale.x > 0)
- {
- Turn();
- }
- else if ((attackTarget.transform.position - transform.position).x < 0
- && bodyTrans.localScale.x < 0)
- {
- Turn();
- }
- break;
- case CharacterState.Die:
- ani.Play("die", 0, 0);
- aniCollider.Play("Die", 0, 0);
- isDie = true;
- dieKeepTime = totalDieKeepTime;
- TowerMap.myTowers.Remove(gameObject);
- break;
- default:
- break;
- }
- }
- public override void BeHit(int damage, Vector3 force, bool changeHurt, float repelValue)
- {
- hp -= damage;
- //伤害跳字
- if (showInjuryNum)
- {
- GameObject injuryNum = Instantiate(injuryNumText);
- injuryNum.transform.position = new Vector3(transform.position.x + Random.Range(-1f, 1f), transform.position.y + 1, transform.position.z);
- TextMeshProUGUI text = injuryNum.GetComponentInChildren<TextMeshProUGUI>();
- text.text = damage.ToString();
- if (gameObject.CompareTag("Player"))
- {
- text.color = Color.red;
- }
- }
- uiHp.Show(hp, totalHp);
- if (hp <= 0)
- {
- ChangeState(CharacterState.Die);
- }
- }
- }
|