using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HudTextEx : UnitySingleton<HudTextEx> {
protected class HudPanel
{
public UIFollowTarget ut;
public HUDText hudText;
private GameObject panelGameObject;
public HudPanel(Transform showPosT)
{
panelGameObject =ToolsYhy.ResouceIniteNGUI(Consts.HudTextEx_ResoucesPath);
ut = panelGameObject.AddComponent<UIFollowTarget>();
ut.gameCamera = NGUIRoot._3dCamera;
ut.uiCamera = NGUIRoot._2dCamera;
ut.target = showPosT;
hudText = panelGameObject.GetComponent<HUDText>();
}
public void DestroyPanel()
{
ut.enabled = false;
panelGameObject.SetActive(false);
Destroy(panelGameObject);
}
}
Dictionary<int, HudPanel> dict =new Dictionary<int, HudPanel>();
/// <summary>
/// 显示加血
/// </summary>
/// <param name="tra"></param>
/// <param name="hp"></param>
public void CreatShowAddHp(Transform showPosT, int hp)
{
HudPanel hup = null;
if (dict.ContainsKey(showPosT.GetInstanceID()) == false)
{
hup =new HudPanel(showPosT);
hup.hudText.name = "HudText_name:[" + showPosT.ParentRoot().name + "]_id[" + showPosT.GetInstanceID() + "]";
dict.Add(showPosT.GetInstanceID(), hup);
}
else
{
hup = dict[showPosT.GetInstanceID()];
}
hup.hudText.Add(hp, Color.green, 0f);
}
/// <summary>
/// 显示伤害
/// </summary>
/// <param name="tra"></param>
/// <param name="num"></param>
public void CreatShowDamage(Transform showPosT, int num)
{
HudPanel hup = null;
if (dict.ContainsKey(showPosT.GetInstanceID()) == false)
{
hup = new HudPanel(showPosT);
hup.hudText.name = "HudText_name:[" + showPosT.ParentRoot().name + "]_id[" + showPosT.GetInstanceID() + "]";
dict.Add(showPosT.GetInstanceID(), hup);
}
else
{
hup = dict[showPosT.GetInstanceID()];
}
num = num < 0 ? num : -num;
hup.hudText.Add(num, Color.red, 0f);
}
/// <summary>
/// 如果角色死亡,移除这个面板
/// </summary>
void UpdateCheak()
{
if(dict.Count <0) return;
///保存要删除的物体key
List<int> list =new List<int>();
foreach (var item in dict)
{
if (item.Value.ut.target == null)
{
list.Add(item.Key);
}
}
foreach (var item in list)
{
dict[item].DestroyPanel();
dict.Remove(item);
}
}
private float timer=0;
void FixedUpdate()
{
if (dict.Count < 0) return;
//如果角色死亡,移除这个面板,1秒检测一次
if (timer < 1f)
{
timer += Time.deltaTime;
}
else
{
timer = 0;
UpdateCheak();
}
}
}