//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, October 14, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
|
public class TargetBriefInfo
|
{
|
public static PlayerInfo playerInfo { get; private set; }
|
public static MonsterInfo bossInfo { get; private set; }
|
|
static HazyDemonKingModel hazyDemonKingModel { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
|
|
public static void Init()
|
{
|
GA_NpcFightBoss.s_OnSelect += OnShowBossLifeBar;
|
GA_NpcFightBoss.s_HpRefresh += OnRefreshBossLifeBar;
|
|
GA_NpcClientFightBoss.s_OnSelect += OnShowBossLifeBar;
|
GA_NpcClientFightBoss.s_HpRefresh += OnRefreshBossLifeBar;
|
|
GA_Player.s_OnRefreshLife += OnRefreshPlayerLifeBar;
|
GA_Player.s_OnSelected += OnShowPlayerLifeBar;
|
}
|
|
static void OnShowBossLifeBar(uint _instanceId, int _npcId, bool _show)
|
{
|
if ((CrossServerUtility.IsCrossServerOneVsOne() || ArenaManager.isArenaClient) && _show)
|
{
|
return;
|
}
|
|
if (hazyDemonKingModel.IsInDungeon && !_show)
|
{
|
return;
|
}
|
|
if (_show)
|
{
|
var boss = GAMgr.Instance.GetBySID(_instanceId) as GActorNpcFight;
|
if (boss != null)
|
{
|
bossInfo = new MonsterInfo()
|
{
|
instanceId = _instanceId,
|
npcId = _npcId,
|
hp = boss.ActorInfo.RealHp,
|
maxHp = boss.ActorInfo.RealMaxHp,
|
level = boss.ActorInfo.LV
|
};
|
}
|
else
|
{
|
bossInfo = default(MonsterInfo);
|
}
|
|
playerInfo = default(PlayerInfo);
|
}
|
else
|
{
|
if (bossInfo.instanceId == _instanceId)
|
{
|
bossInfo = default(MonsterInfo);
|
}
|
}
|
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
if (mapId == DemonJarModel.SINGLEMAPID)
|
{
|
if (_show)
|
{
|
WindowCenter.Instance.Open<DemonJarBossLifeBarWin>();
|
}
|
}
|
else
|
{
|
WindowCenter.Instance.Open<TargetBriefInfoWin>();
|
}
|
|
}
|
|
public static void OnRefreshBossLifeBar(uint _instanceId, int _npcId, ulong _hp, ulong _maxHp)
|
{
|
if (CrossServerUtility.IsCrossServerOneVsOne() || ArenaManager.isArenaClient)
|
{
|
return;
|
}
|
|
playerInfo = default(PlayerInfo);
|
var boss = GAMgr.Instance.GetBySID(_instanceId) as GActorNpcFight;
|
if (boss != null)
|
{
|
bossInfo = new MonsterInfo()
|
{
|
instanceId = _instanceId,
|
npcId = _npcId,
|
hp = _hp,
|
maxHp = _maxHp,
|
level = boss.ActorInfo.LV
|
};
|
}
|
else
|
{
|
bossInfo = default(MonsterInfo);
|
}
|
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
if (mapId == DemonJarModel.SINGLEMAPID)
|
{
|
if (!WindowCenter.Instance.IsOpen("DemonJarBossLifeBarWin"))
|
{
|
WindowCenter.Instance.Open<DemonJarBossLifeBarWin>();
|
}
|
}
|
else
|
{
|
if (!WindowCenter.Instance.IsOpen("TargetBriefInfoWin"))
|
{
|
WindowCenter.Instance.Open<TargetBriefInfoWin>(true);
|
}
|
}
|
|
}
|
|
static void OnShowPlayerLifeBar(uint _instanceId, bool _show)
|
{
|
if ((CrossServerUtility.IsCrossServerOneVsOne() || ArenaManager.isArenaClient) && _show)
|
{
|
return;
|
}
|
|
if (hazyDemonKingModel.IsInDungeon)
|
{
|
return;
|
}
|
|
if (_show)
|
{
|
var player = GAMgr.Instance.GetBySID(_instanceId) as GActorPlayerBase;
|
if (player != null)
|
{
|
playerInfo = new PlayerInfo()
|
{
|
instanceId = _instanceId,
|
job = player.ActorInfo.Job,
|
face = player.ActorInfo.face,
|
facePic = player.ActorInfo.facePic,
|
name = player.ActorInfo.PlayerName,
|
level = player.ActorInfo.LV,
|
hp = player.ActorInfo.RealHp,
|
maxHp = player.ActorInfo.RealMaxHp
|
};
|
}
|
else
|
{
|
playerInfo = default(PlayerInfo);
|
}
|
|
bossInfo = default(MonsterInfo);
|
}
|
else
|
{
|
if (playerInfo.instanceId == _instanceId)
|
{
|
playerInfo = default(PlayerInfo);
|
}
|
}
|
|
if (WindowCenter.Instance.IsOpen("DemonJarBossLifeBarWin"))
|
{
|
WindowCenter.Instance.Close<DemonJarBossLifeBarWin>();
|
}
|
|
WindowCenter.Instance.Open<TargetBriefInfoWin>(true);
|
}
|
|
static void OnRefreshPlayerLifeBar(uint _instanceId, ulong _hp, ulong _maxHp)
|
{
|
if (CrossServerUtility.IsCrossServerOneVsOne()||ArenaManager.isArenaClient)
|
{
|
return;
|
}
|
|
if (hazyDemonKingModel.IsInDungeon)
|
{
|
return;
|
}
|
|
bossInfo = default(MonsterInfo);
|
var player = GAMgr.Instance.GetBySID(_instanceId) as GActorPlayerBase;
|
if (player != null)
|
{
|
playerInfo = new PlayerInfo()
|
{
|
instanceId = _instanceId,
|
job = player.ActorInfo.Job,
|
face = player.ActorInfo.face,
|
facePic = player.ActorInfo.facePic,
|
name = player.ActorInfo.PlayerName,
|
level = player.ActorInfo.LV,
|
hp = player.ActorInfo.RealHp,
|
maxHp = player.ActorInfo.RealMaxHp
|
};
|
}
|
else
|
{
|
playerInfo = default(PlayerInfo);
|
}
|
|
if (!WindowCenter.Instance.IsOpen<TargetBriefInfoWin>())
|
{
|
WindowCenter.Instance.Open<TargetBriefInfoWin>(true);
|
}
|
}
|
|
public struct MonsterInfo
|
{
|
public uint instanceId;
|
public int npcId;
|
public ulong hp;
|
public ulong maxHp;
|
public int level;
|
|
public static bool operator ==(MonsterInfo lhs, MonsterInfo rhs)
|
{
|
return lhs.instanceId == rhs.instanceId
|
&& lhs.npcId == rhs.npcId
|
&& lhs.hp == rhs.hp
|
&& lhs.maxHp == rhs.maxHp
|
&& lhs.level == rhs.level;
|
}
|
|
public static bool operator !=(MonsterInfo lhs, MonsterInfo rhs)
|
{
|
return lhs.instanceId != rhs.instanceId
|
|| lhs.npcId != rhs.npcId
|
|| lhs.hp != rhs.hp
|
|| lhs.maxHp != rhs.maxHp
|
|| lhs.level != rhs.level;
|
}
|
}
|
|
public struct PlayerInfo
|
{
|
public uint instanceId;
|
public ulong hp;
|
public ulong maxHp;
|
|
public int job;
|
public int face;
|
public int facePic;
|
public int level;
|
public string name;
|
|
public static bool operator ==(PlayerInfo lhs, PlayerInfo rhs)
|
{
|
return lhs.instanceId == rhs.instanceId
|
&& lhs.hp == rhs.hp
|
&& lhs.maxHp == rhs.maxHp
|
&& lhs.job == rhs.job
|
&& lhs.face == rhs.face
|
&& lhs.facePic == rhs.facePic
|
&& lhs.level == rhs.level
|
&& lhs.name == rhs.name;
|
}
|
|
public static bool operator !=(PlayerInfo lhs, PlayerInfo rhs)
|
{
|
return lhs.instanceId != rhs.instanceId
|
|| lhs.hp != rhs.hp
|
|| lhs.maxHp != rhs.maxHp
|
|| lhs.job != rhs.job
|
|| lhs.face == rhs.face
|
|| lhs.facePic == rhs.facePic
|
|| lhs.level != rhs.level
|
|| lhs.name != rhs.name;
|
}
|
}
|
|
}
|
|
namespace vnxbqy.UI
|
{
|
|
public class TargetBriefInfoWin : Window
|
{
|
[SerializeField] Transform m_ContainerBoss;
|
[SerializeField] BossLifeBar m_BossLifeBar;
|
[SerializeField] ElderGodAngerBehaviour m_ElderGodAnger;
|
[SerializeField] Transform m_ContainerPlayer;
|
[SerializeField] PlayerLifeBar m_PlayerLifeBar;
|
|
TargetBriefInfo.PlayerInfo playerInfo;
|
TargetBriefInfo.MonsterInfo bossInfo;
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
}
|
|
protected override void OnPreOpen()
|
{
|
m_ContainerBoss.SetActive(false);
|
m_ContainerPlayer.SetActive(false);
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
|
this.transform.SetAsFirstSibling();
|
|
playerInfo = TargetBriefInfo.playerInfo;
|
bossInfo = TargetBriefInfo.bossInfo;
|
|
if (playerInfo.instanceId != 0)
|
{
|
ShowPlayerLifeBar(playerInfo, true);
|
}
|
else
|
{
|
ShowPlayerLifeBar(playerInfo, false);
|
|
if (bossInfo.instanceId != 0)
|
{
|
if (PlayerDatas.Instance.baseData.MapID != DemonJarModel.SINGLEMAPID)
|
{
|
ShowBossLifeBar(bossInfo, true);
|
}
|
}
|
else
|
{
|
ShowBossLifeBar(bossInfo, false);
|
}
|
}
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
|
if (TargetBriefInfo.bossInfo != bossInfo)
|
{
|
if (TargetBriefInfo.bossInfo.instanceId == 0)
|
{
|
ShowBossLifeBar(TargetBriefInfo.bossInfo, false);
|
}
|
else
|
{
|
if (PlayerDatas.Instance.baseData.MapID != DemonJarModel.SINGLEMAPID)
|
{
|
if (bossInfo.npcId != TargetBriefInfo.bossInfo.npcId)
|
{
|
ShowBossLifeBar(TargetBriefInfo.bossInfo, true);
|
}
|
else
|
{
|
RefreshBossLifeBar(TargetBriefInfo.bossInfo);
|
}
|
}
|
}
|
|
bossInfo = TargetBriefInfo.bossInfo;
|
}
|
|
if (TargetBriefInfo.playerInfo != playerInfo)
|
{
|
if (TargetBriefInfo.playerInfo.instanceId == 0)
|
{
|
ShowPlayerLifeBar(TargetBriefInfo.playerInfo, false);
|
}
|
else
|
{
|
if (playerInfo.instanceId != TargetBriefInfo.playerInfo.instanceId)
|
{
|
ShowPlayerLifeBar(TargetBriefInfo.playerInfo, true);
|
}
|
else
|
{
|
RefreshPlayerLifeBar(TargetBriefInfo.playerInfo);
|
}
|
}
|
|
playerInfo = TargetBriefInfo.playerInfo;
|
}
|
|
}
|
|
#endregion
|
|
void ShowBossLifeBar(TargetBriefInfo.MonsterInfo bossInfo, bool show)
|
{
|
if (bossInfo.hp == 0) show = false;
|
if (show)
|
{
|
m_ContainerPlayer.SetActive(false);
|
m_ContainerBoss.SetActive(true);
|
|
m_BossLifeBar.SetBaseInfo(bossInfo.npcId, bossInfo.hp, bossInfo.maxHp, bossInfo.level);
|
m_ElderGodAnger.Display(bossInfo.npcId);
|
}
|
else
|
{
|
m_ContainerBoss.SetActive(false);
|
}
|
}
|
|
void RefreshBossLifeBar(TargetBriefInfo.MonsterInfo bossInfo)
|
{
|
m_ContainerBoss.SetActive(true);
|
m_BossLifeBar.Show(bossInfo.hp, bossInfo.maxHp);
|
}
|
|
void ShowPlayerLifeBar(TargetBriefInfo.PlayerInfo playerInfo, bool show)
|
{
|
if (show)
|
{
|
m_ContainerPlayer.SetActive(true);
|
m_ContainerBoss.SetActive(false);
|
|
var instanceId = playerInfo.instanceId;
|
var job = playerInfo.job;
|
var playerName = playerInfo.name;
|
var playerLevel = playerInfo.level;
|
var playerHp = playerInfo.hp;
|
var playerMaxHp = playerInfo.maxHp;
|
int face = playerInfo.face;
|
int facePic = playerInfo.facePic;
|
m_PlayerLifeBar.SetBaseInfo((int)instanceId, face, facePic,job, 0, playerName, playerLevel, playerHp, playerMaxHp);
|
}
|
else
|
{
|
m_ContainerPlayer.SetActive(false);
|
}
|
|
}
|
|
void RefreshPlayerLifeBar(TargetBriefInfo.PlayerInfo playerInfo)
|
{
|
m_ContainerPlayer.SetActive(true);
|
m_PlayerLifeBar.Show(playerInfo.hp, playerInfo.maxHp);
|
}
|
|
}
|
|
}
|
|
|
|
|