//--------------------------------------------------------  
 | 
//    [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);  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
  
 | 
  
 |