少年修仙传客户端代码仓库
client_linchunjie
2019-04-10 a8a1c157a85cef9198a20466ade524f6f90f9250
3335 缥缈仙域
4个文件已添加
1个文件已修改
351 ■■■■■ 已修改文件
System/HazyRegion/HazyDemonKingDungeonWin.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingDungeonWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingModel.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingDungeonWin.cs
New file
@@ -0,0 +1,91 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, April 10, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class HazyDemonKingDungeonWin : Window
    {
        [SerializeField] DynamicCyclicScroll m_CyclicScroll;
        List<uint> playerIds = new List<uint>();
        HazyDemonKingModel model { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
            Display();
            model.onPlayerInfoRefresh += OnPlayerInfoRefresh;
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            m_CyclicScroll.Dispose();
            model.onPlayerInfoRefresh -= OnPlayerInfoRefresh;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void Display()
        {
            DisplayPlayers();
        }
        void DisplayPlayers()
        {
            playerIds.Clear();
            playerIds.AddRange(model.GetPlayerIds());
            playerIds.Sort(Compare);
            m_CyclicScroll.Init(playerIds);
        }
        private void OnPlayerInfoRefresh()
        {
            DisplayPlayers();
        }
        int Compare(uint lhs, uint rhs)
        {
            var lhs_bossBelong = StatusMgr.Instance.IsExistBossBelong(lhs);
            var rhs_bossBelong = StatusMgr.Instance.IsExistBossBelong(rhs);
            if (lhs_bossBelong != rhs_bossBelong)
            {
                return -lhs_bossBelong.CompareTo(rhs_bossBelong);
            }
            return 0;
        }
    }
}
System/HazyRegion/HazyDemonKingDungeonWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d8e0f4c916a141d4a85759d2fce71ed5
timeCreated: 1554881621
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/HazyRegion/HazyDemonKingModel.cs
@@ -6,14 +6,21 @@
{
    public class HazyDemonKingModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        Dictionary<uint, HazyDemonKingPlayerInfo> m_PlayerInfos = new Dictionary<uint, HazyDemonKingPlayerInfo>();
        public bool IsInDungeon { get; private set; }
        public event Action onPlayerInfoRefresh;
        public override void Init()
        {
            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
        }
        public void OnBeforePlayerDataInitialize()
        {
            m_PlayerInfos.Clear();
        }
        public void OnPlayerLoginOk()
@@ -23,8 +30,111 @@
        public override void UnInit()
        {
            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
        }
        private void OnStageLoadFinish()
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            IsInDungeon = false;
            if (IsInDemonKingDungeon(mapId))
            {
                IsInDungeon = true;
                RefreshAroundPlayer();
            }
        }
        private void PerSecond()
        {
            if (IsInDungeon)
            {
                var requireRefreshPlayer = false;
                var actors = GAMgr.Instance.GetGroupList(E_ActorGroup.Player);
                if ((actors != null && actors.Count != m_PlayerInfos.Count)
                    || (actors == null && m_PlayerInfos.Count != 0))
                {
                    requireRefreshPlayer = true;
                }
                else if (actors != null)
                {
                    foreach (var actor in actors)
                    {
                        var player = actor as GA_Player;
                        if (!m_PlayerInfos.ContainsKey(player.ServerInstID))
                        {
                            requireRefreshPlayer = true;
                        }
                    }
                }
                if (requireRefreshPlayer)
                {
                    RefreshAroundPlayer();
                }
            }
        }
        public void RefreshAroundPlayer()
        {
            m_PlayerInfos.Clear();
            var actors = GAMgr.Instance.GetGroupList(E_ActorGroup.Player);
            if (actors != null)
            {
                foreach (var actor in actors)
                {
                    var player = actor as GA_Player;
                    if (!m_PlayerInfos.ContainsKey(player.ServerInstID))
                    {
                        m_PlayerInfos.Add(player.ServerInstID, new HazyDemonKingPlayerInfo()
                        {
                            job = player.ActorInfo.Job,
                            hp = player.ActorInfo.RealHp,
                            maxHp = player.ActorInfo.RealMaxHp,
                            playerName = UIHelper.ServerStringTrim(player.ActorInfo.PlayerName),
                        });
                    }
                }
            }
            if (onPlayerInfoRefresh != null)
            {
                onPlayerInfoRefresh();
            }
        }
        public bool IsInDemonKingDungeon(int mapId)
        {
            var configs = HazyRegionConfig.GetValues();
            foreach (var config in configs)
            {
                if (config.incidentType == (int)HazyRegionIncidentType.Boss
                    && config.dungeonId == mapId)
                {
                    return true;
                }
            }
            return false;
        }
        public bool TryGetPlayerInfo(uint playerId, out HazyDemonKingPlayerInfo playerInfo)
        {
            return m_PlayerInfos.TryGetValue(playerId, out playerInfo);
        }
        public ICollection<uint> GetPlayerIds()
        {
            return m_PlayerInfos.Keys;
        }
    }
    public struct HazyDemonKingPlayerInfo
    {
        public string playerName;
        public int job;
        public ulong hp;
        public ulong maxHp;
    }
}
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs
New file
@@ -0,0 +1,120 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class HazyDemonKingPlayerBehaviour : ScrollItem
    {
        [SerializeField] Transform m_ContainerOwn;
        [SerializeField] ImageEx m_HeadIcon;
        [SerializeField] Text m_PlayerName;
        [SerializeField] SmoothSlider m_HpSlider;
        [SerializeField] Image m_FightSign;
        [SerializeField] Text m_FightState;
        [SerializeField] Text m_AtkState;
        bool dirty = false;
        bool bossBelongTo = false;
        int hpPer = 0;
        uint playerId = 0;
        HazyDemonKingModel model { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
        public override void Display(object _data)
        {
            base.Display(_data);
            playerId = (uint)_data;
            dirty = false;
            Initialized();
            DisplayBase();
            DisplayPlayerInfo();
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
        }
        private void PerSecond()
        {
            if (dirty)
            {
                DisplayPlayerInfo();
                dirty = false;
            }
        }
        private void Initialized()
        {
            bossBelongTo = StatusMgr.Instance.IsExistBossBelong(playerId);
            hpPer = 0;
            GActor actor = GAMgr.Instance.GetBySID(playerId);
            if (actor != null)
            {
                var player = actor as GA_Player;
                hpPer = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp * 100f);
            }
            else
            {
                HazyDemonKingPlayerInfo playerInfo;
                if (model.TryGetPlayerInfo(playerId, out playerInfo))
                {
                    hpPer = Mathf.CeilToInt((float)playerInfo.hp / playerInfo.maxHp);
                }
            }
        }
        void DisplayBase()
        {
            HazyDemonKingPlayerInfo playerInfo;
            if (model.TryGetPlayerInfo(playerId, out playerInfo))
            {
                m_HeadIcon.SetSprite(GeneralDefine.GetOtherJobHeadPortrait(playerInfo.job, 0));
                m_PlayerName.text = playerInfo.playerName;
            }
        }
        void DisplayPlayerInfo()
        {
            m_ContainerOwn.gameObject.SetActive(bossBelongTo);
            m_HeadIcon.gray = hpPer == 0;
        }
        void LateUpdate()
        {
            if (bossBelongTo != StatusMgr.Instance.IsExistBossBelong(playerId))
            {
                bossBelongTo = StatusMgr.Instance.IsExistBossBelong(playerId);
                dirty = true;
            }
            GActor actor = GAMgr.Instance.GetBySID(playerId);
            if (actor != null)
            {
                var player = actor as GA_Player;
                var per = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp);
                if (hpPer != per)
                {
                    hpPer = per;
                    dirty = true;
                }
            }
        }
        public override void Dispose()
        {
            base.Dispose();
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
        }
    }
}
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6abbedbcf5140d04a986b79c4e3eb7d6
timeCreated: 1554882000
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: