|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using Game.Battle;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Game
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 实体身上的UI显示,均在此管理
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class PageHeadBar : UIPageBase<ViewHeadBar>
|
|
|
|
|
|
{
|
|
|
|
|
|
private int _targetCache = 0;
|
|
|
|
|
|
|
|
|
|
|
|
private readonly Dictionary<int, UIPoolItem<Viewc_blood>> _hpBarDict =
|
|
|
|
|
|
new Dictionary<int, UIPoolItem<Viewc_blood>>();
|
|
|
|
|
|
|
|
|
|
|
|
private readonly Dictionary<int, List<UIPoolItem<ViewHitNum>>> _hitNumDict =
|
|
|
|
|
|
new Dictionary<int, List<UIPoolItem<ViewHitNum>>>();
|
|
|
|
|
|
|
|
|
|
|
|
private readonly Dictionary<int, List<UIPoolItem<ViewHitBuff>>> _hitBuffDict =
|
|
|
|
|
|
new Dictionary<int, List<UIPoolItem<ViewHitBuff>>>();
|
|
|
|
|
|
|
|
|
|
|
|
private readonly Dictionary<int, UIPoolItem<ViewInteract>> _interactDict =
|
|
|
|
|
|
new Dictionary<int, UIPoolItem<ViewInteract>>();
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnCreate()
|
|
|
|
|
|
{
|
|
|
|
|
|
CreateUI(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnOpen()
|
|
|
|
|
|
{
|
|
|
|
|
|
//打开时创建所有非主角实体的血条
|
|
|
|
|
|
var entities = Util.GetGroup(GameMatcher.Interact); //怪物、npc、宝箱、传送门...
|
|
|
|
|
|
foreach (var entity in entities)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (entity.iD.Data.IsDestroy)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SetHpBar(entity.ID(), true);
|
|
|
|
|
|
SetHitNum(entity.ID(), true);
|
|
|
|
|
|
SetInteract(entity.ID(), true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EventManager.Instance.AddEvent<PEntityAlive>(EEvent.EntityAlive, OnEntityAlive);
|
|
|
|
|
|
EventManager.Instance.AddEvent<PEntityHit>(EEvent.EntityHit, OnEntityHit);
|
|
|
|
|
|
EventManager.Instance.AddEvent<PEntityHitText>(EEvent.EntityHitText, OnEntityHitText);
|
|
|
|
|
|
|
|
|
|
|
|
UpdateHeadBarPos(); //打开时更新位置 避免闪烁
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnClose()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var kvp in _hpBarDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
kvp.Value.Destroy();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_hpBarDict.Clear();
|
|
|
|
|
|
EventManager.Instance.RemoveEvent<PEntityAlive>(EEvent.EntityAlive, OnEntityAlive);
|
|
|
|
|
|
EventManager.Instance.RemoveEvent<PEntityHit>(EEvent.EntityHit, OnEntityHit);
|
|
|
|
|
|
EventManager.Instance.RemoveEvent<PEntityHitText>(EEvent.EntityHitText, OnEntityHitText);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void FixedUpdate()
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateLock(); //锁定
|
|
|
|
|
|
UpdateHeadBarPos(); //headBar位置更新
|
|
|
|
|
|
UpdateHitNum(); //跳字更新
|
|
|
|
|
|
UpdateHitBuff(); //buff跳字更新
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateLock()
|
|
|
|
|
|
{
|
|
|
|
|
|
var master = Util.GetMaster();
|
|
|
|
|
|
var targetId = master.combo.TargetLock;
|
|
|
|
|
|
var target = Util.GetEntity(targetId);
|
|
|
|
|
|
View.m_showLock.SetSelectedIndex(target == null ? 0 : 1);
|
|
|
|
|
|
if (target == null)
|
|
|
|
|
|
return;
|
|
|
|
|
|
if (targetId != _targetCache)
|
|
|
|
|
|
{
|
|
|
|
|
|
View.m_lock.m_actLock.Play();
|
|
|
|
|
|
_targetCache = targetId;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
View.m_lock.position = GetScreenPos(Util.EntityViewPos(target));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateHeadBarPos()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var kvp in _hpBarDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var headBarItem = kvp.Value;
|
|
|
|
|
|
var posScreen = GetScreenPos(Util.EntityViewPos(entity));
|
|
|
|
|
|
headBarItem.Component.SetPosition(posScreen.x, posScreen.y - 80, posScreen.z);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var kvp in _hitNumDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hitNumList = kvp.Value;
|
|
|
|
|
|
var posScreen = GetScreenPos(Util.EntityViewPos(entity));
|
|
|
|
|
|
foreach (var item in hitNumList)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Component.SetPosition(posScreen.x, posScreen.y, posScreen.z);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var kvp in _hitBuffDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hitNumList = kvp.Value;
|
|
|
|
|
|
var posScreen = GetScreenPos(Util.EntityViewPos(entity));
|
|
|
|
|
|
foreach (var item in hitNumList)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Component.SetPosition(posScreen.x, posScreen.y - 40, posScreen.z);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach (var kvp in _interactDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var interactItem = kvp.Value;
|
|
|
|
|
|
var posScreen = GetScreenPos(Util.EntityViewPos(entity));
|
|
|
|
|
|
interactItem.Component.SetPosition(posScreen.x, posScreen.y - 80, posScreen.z);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新伤害跳字:更新动效等待时间,等待时间结束播放2阶段动效 2阶段动效结束删除
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void UpdateHitNum()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var kvp in _hitNumDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hitNumList = kvp.Value;
|
|
|
|
|
|
if (hitNumList.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (entity.pause.IsPause)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var hp = entity.hp;
|
|
|
|
|
|
if (hp.DmgShowTime > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
hp.DmgShowTime -= Time.deltaTime;
|
|
|
|
|
|
if (hp.DmgShowTime <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
hp.DmgShowTime = 0;
|
|
|
|
|
|
var lastItem = hitNumList[hitNumList.Count - 1].Component as ViewHitNum;
|
|
|
|
|
|
lastItem.m_step2.Play();
|
|
|
|
|
|
if (GameRandom.Roll(0.5f))
|
|
|
|
|
|
{
|
|
|
|
|
|
lastItem.m_step3.Play();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
lastItem.m_step4.Play();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = hitNumList.Count - 1; i >= 0; i--)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i == hitNumList.Count - 1 && hp.DmgShowTime > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var item = hitNumList[i];
|
|
|
|
|
|
var hitInfo = hitNumList[i].Component as ViewHitNum;
|
|
|
|
|
|
if (!hitInfo.m_step2.playing)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Destroy();
|
|
|
|
|
|
hitNumList.RemoveAt(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateHitBuff()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var kvp in _hitBuffDict)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hitNumList = kvp.Value;
|
|
|
|
|
|
if (hitNumList.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var entity = Util.GetEntity(kvp.Key);
|
|
|
|
|
|
if (entity == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (entity.pause.IsPause)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = hitNumList.Count - 1; i >= 0; i--)
|
|
|
|
|
|
{
|
|
|
|
|
|
var item = hitNumList[i];
|
|
|
|
|
|
var hitInfo = hitNumList[i].Component as ViewHitBuff;
|
|
|
|
|
|
if (entity.pause.IsPause)
|
|
|
|
|
|
{
|
|
|
|
|
|
hitInfo.m_step1.SetPaused(true);
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
hitInfo.m_step1.SetPaused(false);
|
|
|
|
|
|
if (!hitInfo.m_step1.playing)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Destroy();
|
|
|
|
|
|
hitNumList.RemoveAt(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnEntityAlive(PEntityAlive param)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = param.Entity;
|
|
|
|
|
|
if (entity == Util.GetMasterID())
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SetHpBar(param.Entity, param.IsAlive);
|
|
|
|
|
|
SetHitNum(param.Entity, param.IsAlive);
|
|
|
|
|
|
SetInteract(param.Entity, param.IsAlive);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SetInteract(int entityID, bool isAlive = true)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(entityID);
|
|
|
|
|
|
if (!entity.hasInteract)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (isAlive)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_interactDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
var interactBar = UIManager.Instance.Creator.CreateUIItem<ViewInteract>(ViewInteract.URL);
|
|
|
|
|
|
_interactDict[entityID] = interactBar;
|
|
|
|
|
|
var interactComp = interactBar.Component;
|
|
|
|
|
|
|
|
|
|
|
|
var interact = entity.interact;
|
|
|
|
|
|
BindData(interact.IsActive,
|
|
|
|
|
|
(_, now) => { interactComp.m_showInteract.selectedIndex = now ? 1 : 0; });
|
|
|
|
|
|
BindData(interact.IsTarget,
|
|
|
|
|
|
(_, now) => { interactComp.m_isTarget.selectedIndex = now ? 1 : 0; });
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_interactDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
_interactDict[entityID].Destroy();
|
|
|
|
|
|
_interactDict.Remove(entityID);
|
|
|
|
|
|
var interact = entity.interact;
|
|
|
|
|
|
UnbindData(interact.IsActive);
|
|
|
|
|
|
UnbindData(interact.IsTarget);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SetHitNum(int entityID, bool isAlive = true)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (isAlive)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_hitNumDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
_hitNumDict[entityID] = new List<UIPoolItem<ViewHitNum>>();
|
|
|
|
|
|
_hitBuffDict[entityID] = new List<UIPoolItem<ViewHitBuff>>();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_hitNumDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var item in _hitNumDict[entityID])
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Destroy();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_hitNumDict.Remove(entityID);
|
|
|
|
|
|
foreach (var item in _hitBuffDict[entityID])
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Destroy();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_hitBuffDict.Remove(entityID);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SetHpBar(int entityID, bool isAlive = true)
|
|
|
|
|
|
{
|
|
|
|
|
|
var entity = Util.GetEntity(entityID);
|
|
|
|
|
|
if (!entity.hasHp)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (isAlive)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_hpBarDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
//创建血条UI
|
|
|
|
|
|
var hpBar = UIManager.Instance.Creator.CreateUIItem<Viewc_blood>(Viewc_blood.URL);
|
|
|
|
|
|
_hpBarDict[entityID] = hpBar;
|
|
|
|
|
|
var hpComp = hpBar.Component;
|
|
|
|
|
|
if (entity.hasHp)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hp = entity.hp;
|
|
|
|
|
|
var buff = entity.buff;
|
|
|
|
|
|
var ai = entity.aI;
|
|
|
|
|
|
//数据绑定
|
|
|
|
|
|
BindData(hp.IsDamaged, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_showhp.selectedIndex = now ? 1 : 0;
|
|
|
|
|
|
hpComp.m_showshield.selectedIndex = now && (hp.ShieldMax.Value > 0) ? 1 : 0;
|
|
|
|
|
|
//是否显示额外数据
|
|
|
|
|
|
var isShowExtra = now && GameSetting.IsShowExtraHeadBar;
|
|
|
|
|
|
hpComp.m_showExtra.selectedIndex = isShowExtra ? 1 : 0;
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(hp.HpMax, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_bloodBarEnemy.m_sub.max = now;
|
|
|
|
|
|
hpComp.m_bloodBarEnemy.m_tween.max = now;
|
|
|
|
|
|
//根据hpMax动态调整血条长度
|
|
|
|
|
|
var width = Mathf.Clamp(now, 40, 150);
|
|
|
|
|
|
hpComp.m_bloodBarEnemy.width = width;
|
|
|
|
|
|
hpComp.m_shieldBarEnemy.width = width;
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(hp.Hp, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_bloodBarEnemy.m_sub.value = now;
|
|
|
|
|
|
hpComp.m_bloodBarEnemy.m_tween.TweenValue(now - 1, 0.5f);
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(hp.ShieldMax, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_shieldBarEnemy.m_sub.max = now;
|
|
|
|
|
|
hpComp.m_shieldBarEnemy.m_tween.max = now;
|
|
|
|
|
|
hpComp.m_showshield.selectedIndex = hp.IsDamaged.Value && (now > 0) ? 1 : 0;
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(hp.Shield, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_shieldBarEnemy.m_sub.value = now;
|
|
|
|
|
|
hpComp.m_shieldBarEnemy.m_tween.TweenValue(now - 1, 0.5f);
|
|
|
|
|
|
hpComp.m_showshield.selectedIndex = hp.IsDamaged.Value && (now > 0) ? 1 : 0;
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(hp.Stun, (_, now) => { hpComp.m_stunBarEnemy.value = now; });
|
|
|
|
|
|
BindData(hp.StunMax, (_, now) => { hpComp.m_stunBarEnemy.max = now; });
|
|
|
|
|
|
BindData(ai.Hungry, (_, now) => { hpComp.m_hungryBarEnemy.value = now; });
|
|
|
|
|
|
BindData(ai.HungryMax, (_, now) => { hpComp.m_hungryBarEnemy.max = now; });
|
|
|
|
|
|
BindData(ai.ModuleType, (_, now) => { hpComp.m_moduleType.selectedIndex = (int)now; });
|
|
|
|
|
|
BindData(ai.IsHungryFull, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (now)
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_attackStatus.selectedIndex = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
BindData(ai.AttackPermit, (_, now) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
if (now)
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_attackStatus.selectedIndex = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
hpComp.m_attackStatus.selectedIndex = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_hpBarDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
//销毁血条ui
|
|
|
|
|
|
_hpBarDict[entityID].Destroy();
|
|
|
|
|
|
_hpBarDict.Remove(entityID);
|
|
|
|
|
|
//取消数据绑定
|
|
|
|
|
|
if (entity.hasHp)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hp = entity.hp;
|
|
|
|
|
|
var ai = entity.aI;
|
|
|
|
|
|
var buff = entity.buff;
|
|
|
|
|
|
UnbindData(hp.HpMax);
|
|
|
|
|
|
UnbindData(hp.Hp);
|
|
|
|
|
|
UnbindData(hp.ShieldMax);
|
|
|
|
|
|
UnbindData(hp.Shield);
|
|
|
|
|
|
UnbindData(hp.StunMax);
|
|
|
|
|
|
UnbindData(hp.Stun);
|
|
|
|
|
|
UnbindData(ai.HungryMax);
|
|
|
|
|
|
UnbindData(ai.Hungry);
|
|
|
|
|
|
UnbindData(ai.ModuleType);
|
|
|
|
|
|
UnbindData(ai.IsHungryFull);
|
|
|
|
|
|
UnbindData(ai.AttackPermit);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnEntityHit(PEntityHit param)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddHitNum(param.Target, param.Dmg);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnEntityHitText(PEntityHitText param)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddHitText(param.Target, param.Text);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void AddHitNum(int entityID, int dmg)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_hitNumDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var hitList = _hitNumDict[entityID];
|
|
|
|
|
|
var hp = Util.GetEntity(entityID).hp;
|
|
|
|
|
|
ViewHitNum targetItem = null;
|
|
|
|
|
|
if (hp.DmgShowTime == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
hp.LastDmg = dmg;
|
|
|
|
|
|
var hitNum = UIManager.Instance.Creator.CreateUIItem<ViewHitNum>(ViewHitNum.URL);
|
|
|
|
|
|
var item = hitNum.Component as ViewHitNum;
|
|
|
|
|
|
hitList.Add(hitNum);
|
|
|
|
|
|
targetItem = item;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
hp.LastDmg += dmg;
|
|
|
|
|
|
targetItem = hitList[hitList.Count - 1].Component as ViewHitNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
targetItem.m_num.text = $"{hp.LastDmg}";
|
|
|
|
|
|
targetItem.m_step1.Play();
|
|
|
|
|
|
hp.DmgShowTime = GameConst.HitNumTerm;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void AddHitText(int entityID, string text)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!_hitBuffDict.ContainsKey(entityID))
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var hitList = _hitBuffDict[entityID];
|
|
|
|
|
|
var hitNum = UIManager.Instance.Creator.CreateUIItem<ViewHitBuff>(ViewHitBuff.URL);
|
|
|
|
|
|
hitList.Add(hitNum);
|
|
|
|
|
|
var item = hitNum.Component as ViewHitBuff;
|
|
|
|
|
|
item.m_name.text = text;
|
|
|
|
|
|
item.m_step1.Play();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|