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] 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<HazyDemonKingModel>(); } }
|
|
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.SetSprite(GeneralDefine.GetOtherJobHeadPortrait(playerInfo.job, 0));
|
m_PlayerName.text = playerInfo.playerName;
|
m_PlayerName.color = PlayerDatas.Instance.PlayerId == playerId ? UIHelper.s_DarkGreenColor : UIHelper.s_LightYellow;
|
}
|
}
|
|
void DisplayPlayerInfo()
|
{
|
m_ContainerOwn.gameObject.SetActive(bossBelongTo);
|
m_HeadIcon.gray = hpPer == 0;
|
m_HpSlider.value = hpPer / 100f;
|
|
m_ContainerFightState.gameObject.SetActive(playerId != PlayerDatas.Instance.PlayerId);
|
|
if (playerId != PlayerDatas.Instance.PlayerId)
|
{
|
switch (atkState)
|
{
|
case 0:
|
m_FightingEffect.Play();
|
m_FightSign.gameObject.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.gameObject.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.gameObject.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;
|
}
|
}
|
}
|