using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class HazyDemonKingPlayerBehaviour : ScrollItem { [SerializeField] Transform m_ContainerOwn; [SerializeField] AvatarCell m_HeadIcon; [SerializeField] Text m_PlayerName; [SerializeField] SmoothSlider m_HpSlider; [SerializeField] Transform m_ContainerFightState; [SerializeField] Image m_FightSign; [SerializeField] Text m_AtkState; [SerializeField] UIEffect m_FightingEffect; [SerializeField] Button m_SelectAtk; bool dirty = false; bool bossBelongTo = false; int hpPer = 0; int atkState = 0; uint playerId = 0; HazyDemonKingModel model { get { return ModelCenter.Instance.GetModel(); } } public override void Display(object _data) { base.Display(_data); playerId = (uint)_data; dirty = false; Initialized(); DisplayBase(); m_HpSlider.delay = 0f; DisplayPlayerInfo(); GlobalTimeEvent.Instance.secondEvent -= PerSecond; GlobalTimeEvent.Instance.secondEvent += PerSecond; m_SelectAtk.SetListener(SelectAtk); } private void PerSecond() { if (dirty) { m_HpSlider.delay = 0.2f; DisplayPlayerInfo(); dirty = false; } } private void Initialized() { RefreshBossBelongTo(); hpPer = 0; GActor actor = GAMgr.Instance.GetBySID(playerId); if (actor != null) { var player = actor as GActorPlayerBase; 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 * 100f); } } RefreshAtkState(); } void DisplayBase() { HazyDemonKingPlayerInfo playerInfo; if (model.TryGetPlayerInfo(playerId, out playerInfo)) { m_HeadIcon.InitUI(AvatarHelper.GetOtherAvatarModel(playerInfo.face, playerInfo.facePic, playerInfo.job)); m_PlayerName.text = playerInfo.playerName; m_PlayerName.color = PlayerDatas.Instance.PlayerId == playerId ? UIHelper.s_DarkGreenColor : UIHelper.s_LightYellow; } } void DisplayPlayerInfo() { m_ContainerOwn.SetActive(bossBelongTo); m_HeadIcon.avatarImage.gray = hpPer == 0; m_HpSlider.value = hpPer / 100f; m_ContainerFightState.SetActive(playerId != PlayerDatas.Instance.PlayerId); if (playerId != PlayerDatas.Instance.PlayerId) { switch (atkState) { case 0: m_FightingEffect.Play(); m_FightSign.SetActive(false); m_AtkState.text = Language.Get("DemonKingFightState_0"); m_AtkState.color = UIHelper.GetUIColor(TextColType.Red, true); break; case 1: m_FightingEffect.StopImediatly(); m_FightSign.SetActive(true); m_AtkState.text = Language.Get("DemonKingFightState_1"); m_AtkState.color = UIHelper.GetUIColor(TextColType.Red, true); break; case 2: m_FightingEffect.StopImediatly(); m_FightSign.SetActive(true); m_AtkState.text = Language.Get("DemonKingFightState_2"); m_AtkState.color = UIHelper.GetUIColor(TextColType.NavyBrown, true); break; } } } private void SelectAtk() { model.SendSelectAtkTarget(playerId); } void LateUpdate() { if (RefreshBossBelongTo()) { dirty = true; } if (RefreshHpPer()) { dirty = true; } if (RefreshAtkState()) { dirty = true; } } bool RefreshBossBelongTo() { if (bossBelongTo != model.IsExistBelongTo(playerId)) { bossBelongTo = model.IsExistBelongTo(playerId); return true; } return false; } bool RefreshHpPer() { GActor actor = GAMgr.Instance.GetBySID(playerId); if (actor != null) { var player = actor as GActorPlayerBase; var per = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp * 100f); if (hpPer != per) { hpPer = per; return true; } } return false; } bool RefreshAtkState() { var _state = 0; var myPlayerId = PlayerDatas.Instance.baseData.PlayerID; var atkTargetId = model.GetPlayerAtkTarget(playerId); var myAtkTargetId = model.GetPlayerAtkTarget(myPlayerId); if (myAtkTargetId == playerId) { _state = 0; } else if (atkTargetId == myPlayerId) { _state = 1; } else { _state = 2; } if (_state != atkState) { atkState = _state; return true; } return false; } public override void Dispose() { base.Dispose(); GlobalTimeEvent.Instance.secondEvent -= PerSecond; } } }