CultivateImmortal/Assets/Scripts/GameObject/PlayerObject.cs

115 lines
2.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerObject : MonoBehaviour
{
//飞剑生成点
public RectTransform feijianPos;
//血量字体生成点
public RectTransform damagePos;
//血条长度
public RectTransform imgUserHp;
//血量文字
public Text txtUserHp;
private PlayerData player;
//当前血量
private int hp;
private float hpWide = 240f;
//玩家是否死亡
public bool isDead;
//记录上一次攻击的时间
private float frontTime;
void OnEnable()
{
//是否死亡重置
isDead = false;
//数据重置
player =GameDataMgr.Instance.player;
hp = player.hp;
//重新注册玩家是否受伤
EventCenter.Instance.AddEventListener<MonsterData>(E_EventType.E_Player_Wound, Wound);
}
// Update is called once per frame
void Update()
{
//检测什么时候停下来攻击
if (isDead)
{
return;
}
if (GameMgr.Instance.isStartAtk)
{
//检测和目标点达到移动条件时 就攻击
if (Time.time - frontTime >= player.atkTime)
{
//记录这次攻击时的时间
frontTime = Time.time;
//创建飞剑攻击敌人
GameObject obj = PoolMgr.Instance.GetObj("Object/FeiJian");
obj.transform.SetParent(feijianPos, false);
}
}
}
//受伤
public void Wound(MonsterData monster)
{
if (isDead)
{
return;
}
//防御抵消伤害
//减少血量
hp = hp+player.def-monster.atk;
//弹出减血量数字
GameObject go = PoolMgr.Instance.GetObj("Object/DamageNum");
go.transform.SetParent(damagePos, false);
go.GetComponent<DamageNum>().UpdateTxtInfo((monster.atk - player.def).ToString());
if (hp <= 0)
{
//死亡
isDead = true;
UpdateHp(0);
//弹出失败框
EventCenter.Instance.EventTrigger<string>(E_EventType.E_Pool_Register1, "战斗失败");
//清空事件
EventCenter.Instance.Claer(E_EventType.E_Player_Wound);
//组件失活
this.gameObject.SetActive(false);
return;
}
UpdateHp(hp);
}
private void UpdateHp(int hp)
{
imgUserHp.sizeDelta = new Vector2(hpWide*hp / player.hp , imgUserHp.sizeDelta.y);
txtUserHp.text = hp + "/" + player.hp;
}
//重置面板上玩家的数据
public void UpdatePanel()
{
imgUserHp.sizeDelta = new Vector2(hpWide, imgUserHp.sizeDelta.y);
txtUserHp.text = player.hp + "/" + player.hp;
hp=player.hp;
//重置玩家面板时 把攻击时间归0
frontTime = Time.time;
}
//对象删除时,清空事件中心的事件
void OnDestroy()
{
EventCenter.Instance.Claer(E_EventType.E_Player_Wound);
}
}