CultivateImmortal/Assets/Scripts/GameObject/MonsterObject.cs

115 lines
2.9 KiB
C#
Raw Normal View History

2024-11-14 18:15:51 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MonsterObject : MonoBehaviour
{
//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>
public RectTransform damagePos;
//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public RectTransform imgDragHp;
//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Text txtDragHp;
//<2F><>ǰѪ<C7B0><D1AA>
private int hp;
private float hpWide = 240f;
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
2024-11-15 18:10:36 +08:00
public bool isDead;
2024-11-14 18:15:51 +08:00
//<2F><>¼<EFBFBD><C2BC>һ<EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
private float frontTime;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private MonsterData monster;
2024-11-15 18:10:36 +08:00
2024-11-14 18:15:51 +08:00
// Start is called before the first frame update
void OnEnable()
{
2024-11-15 18:10:36 +08:00
isDead=false;
Time.timeScale = 1f;
monster = GameDataMgr.Instance.nowMonster;
hp = monster.hp;
2024-11-14 18:15:51 +08:00
EventCenter.Instance.AddEventListener<PlayerData>(E_EventType.E_Monster_Wound,Wound);
}
// Update is called once per frame
void Update()
{
//<2F><><EFBFBD><EFBFBD>ʲôʱ<C3B4><CAB1>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (isDead)
{
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ʱ <20>͹<EFBFBD><CDB9><EFBFBD>
if (Time.time - frontTime >= monster.atkTime)
{
//<2F><>¼<EFBFBD><C2BC><EFBFBD>ι<EFBFBD><CEB9><EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
frontTime = Time.time;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>˺<EFBFBD>
EventCenter.Instance.EventTrigger<MonsterData>(E_EventType.E_Player_Wound, monster);
}
}
//<2F><><EFBFBD><EFBFBD>
public void Wound(PlayerData player)
{
if (isDead)
{
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>
//<2F><><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA>
hp = hp + monster.def - player.atk;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameObject go = PoolMgr.Instance.GetObj("Object/DamageNum");
go.transform.SetParent(damagePos, false);
go.GetComponent<DamageNum>().UpdateTxtInfo((player.atk-monster.def).ToString());
if (hp <= 0)
{
Dead();
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
this.gameObject.SetActive(false);
return;
}
UpdateHp(hp);
}
//<2F><><EFBFBD><EFBFBD>
public void Dead()
{
isDead = true;
2024-11-15 18:10:36 +08:00
GameMgr.Instance.isStartAtk = false;
2024-11-14 18:15:51 +08:00
//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>Ϊ0
UpdateHp(0);
//<2F><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ʤ<EFBFBD><CAA4>
EventCenter.Instance.EventTrigger<string>(E_EventType.E_Pool_Register1,"ս<><D5BD>ʤ<EFBFBD><CAA4>");
2024-11-15 18:10:36 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
EventCenter.Instance.Claer(E_EventType.E_Monster_Wound);
2024-11-14 18:15:51 +08:00
//<2F><><EFBFBD>һ<EFBFBD><D2BB>ý<EFBFBD><C3BD><EFBFBD>
GameDataMgr.Instance.player.stone += 9999;
}
private void UpdateHp(int hp)
{
imgDragHp.sizeDelta = new Vector2(hpWide * hp / monster.hp, imgDragHp.sizeDelta.y);
txtDragHp.text = hp + "/" + monster.hp;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
public void UpdatePanel()
{
imgDragHp.sizeDelta = new Vector2(hpWide, imgDragHp.sizeDelta.y);
txtDragHp.text = monster.hp + "/" + monster.hp;
hp = monster.hp;
2024-11-15 18:10:36 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ <20>ѹ<EFBFBD><D1B9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>0
frontTime = Time.time;
2024-11-14 18:15:51 +08:00
}
void OnDestroy()
{
EventCenter.Instance.Claer(E_EventType.E_Monster_Wound);
}
}