| System/HazyRegion/HazyDemonKingDungeonWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/HazyRegion/HazyDemonKingDungeonWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/HazyRegion/HazyDemonKingModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/HazyRegion/HazyDemonKingPlayerBehaviour.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/HazyRegion/HazyDemonKingPlayerBehaviour.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | 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: