//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, September 14, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
|
using System;
|
|
namespace vnxbqy.UI
|
{
|
|
public class HeadUpName : HUDBehaviour
|
{
|
|
|
[Header("HeadUpName")]
|
[SerializeField]
|
Transform m_TitleName;
|
[SerializeField] TextImage m_Realm;
|
[SerializeField] Image m_PlayerTitle;
|
[SerializeField] TextImage m_PlayerName;
|
[SerializeField] TextImage m_HangHint;
|
[SerializeField] Transform m_Alliance;
|
[SerializeField] TextImage m_AllianceName;
|
[SerializeField] TextImage m_FairyTitle;
|
[SerializeField] TextImage m_FairyFlag;
|
[SerializeField] TextImage m_AncientKing;
|
[SerializeField] TextImage m_AncientEnemy;
|
[SerializeField] ElderGodAngerBehaviour m_ElderAnger;
|
[SerializeField] IceCrystalScoreBehaviour m_IceCrystalScore;
|
[SerializeField] Transform m_BossDropout;
|
[SerializeField] TimerBehaviour m_TimeBehaviour;
|
[SerializeField] Text m_RebornTime;
|
[SerializeField] Text m_NpcAppearTxt;
|
[SerializeField] RebornRightNowBossInfoQuery m_BossInfoQuery;
|
[SerializeField] Text m_FuncTxt;
|
[SerializeField] InputField m_ChatInput;
|
[SerializeField] TextImage m_CrossKing;
|
|
bool secondTextInited = false;
|
|
uint titleId = 0;
|
int npcId = 0;
|
int faction = 0;
|
|
int monsterLevel = 0;
|
E_MonsterType monsterType = E_MonsterType.Normal;
|
|
public Pattern pattern { get; set; }
|
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
SkyTowerModel skyTowerModel { get { return ModelCenter.Instance.GetModel<SkyTowerModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public static HeadUpName RequireHeadUpName(Pattern _pattern, Transform _target, float _offsetY, Camera _camera)
|
{
|
var headUpName = HeadUpNamePool.Require(_pattern);
|
headUpName.pattern = _pattern;
|
headUpName.camera = _camera;
|
headUpName.target = _target;
|
headUpName.offset = new Vector3(0, _offsetY, 0);
|
headUpName.transform.SetParentEx(WindowCenter.Instance.uiRoot.nameCanvas.transform, Vector3.zero, Quaternion.identity, Vector3.one);
|
headUpName.SyncPosition(true);
|
return headUpName;
|
}
|
|
public static void Recycle(HeadUpName _headUpName)
|
{
|
if (_headUpName != null)
|
{
|
_headUpName.Dispose();
|
HeadUpNamePool.Recycle(_headUpName);
|
}
|
}
|
|
/// <summary>
|
/// 玩家本身和别的玩家都用这个
|
/// </summary>
|
/// <param name="_titleId"></param>
|
/// <param name="_name"></param>
|
/// <param name="_alliance"></param>
|
public void SetPlayerInfo(PlayerInfo info)
|
{
|
faction = info.faction;
|
m_PlayerName.text = info.name;
|
m_HangHint.SetActive(info.isHang);
|
SetPlayerRealm((int)info.realm);
|
SetTitle(info.title);
|
SetAlliance(info.alliance);
|
SyncPosition(true);
|
}
|
|
public void SetPlayerRealm(int realm)
|
{
|
if (m_Realm)
|
{
|
if (realm > 0 && RealmConfig.Has(realm))
|
{
|
m_Realm.SetActive(true);
|
m_PlayerName.alignment = TextAnchor.MiddleLeft;
|
var realmConfig = RealmConfig.Get(realm);
|
m_Realm.SetSprite(realmConfig.Img);
|
SetImageMaterialTexture(realmConfig.Img);
|
}
|
else
|
{
|
m_Realm.SetActive(false);
|
m_PlayerName.alignment = TextAnchor.MiddleCenter;
|
}
|
}
|
}
|
|
public void SetNpcRealm(int _realm)
|
{
|
if (m_Realm != null)
|
{
|
if (_realm > 0 && RealmConfig.Has(_realm))
|
{
|
m_Realm.SetActive(true);
|
m_PlayerName.alignment = TextAnchor.MiddleLeft;
|
var realmConfig = RealmConfig.Get(_realm);
|
m_Realm.SetSprite(realmConfig.Img);
|
SetImageMaterialTexture(realmConfig.Img);
|
}
|
else
|
{
|
m_PlayerName.alignment = TextAnchor.MiddleCenter;
|
m_Realm.SetActive(false);
|
}
|
}
|
}
|
|
|
public void SetTitle(uint _titleId)
|
{
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) == GeneralDefine.CrossBattleFieldMapID)
|
{
|
titleId = 0;
|
}
|
titleId = _titleId;
|
if (_titleId == 0)
|
{
|
if (m_PlayerTitle != null)
|
m_PlayerTitle.SetActive(false);
|
}
|
else
|
{
|
var config = DienstgradConfig.Get((int)titleId);
|
if (config == null)
|
{
|
m_PlayerTitle.SetActive(false);
|
return;
|
}
|
|
m_PlayerTitle.SetActive(true);
|
UIFrame frame = m_PlayerTitle.GetComponent<UIFrame>();
|
if (UIFrameMgr.Inst.ContainsDynamicImage(config.Image))
|
{
|
if (frame == null) frame = m_PlayerTitle.gameObject.AddComponent<UIFrame>();
|
m_PlayerTitle.raycastTarget = false;
|
frame.ResetFrame(config.Image);
|
frame.enabled = true;
|
}
|
else
|
{
|
if (frame != null) frame.enabled = false;
|
m_PlayerTitle.SetSprite(config.Image);
|
}
|
//SetImageMaterialTexture(config.Image);
|
}
|
}
|
|
public void SetAncientKing(bool isAncientKing)
|
{
|
if (m_AncientKing == null)
|
{
|
return;
|
}
|
m_AncientKing.SetActive(isAncientKing);
|
|
if (!isAncientKing) return;
|
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) == GeneralDefine.CrossFamilyBattleMapID)
|
{
|
m_AncientKing.SetSprite("ZLWJ3");
|
}
|
else
|
{
|
m_AncientKing.SetSprite("IntegralKing");
|
}
|
}
|
|
|
public void SetAncientEnemy(bool isAncientEnemy)
|
{
|
if (m_AncientEnemy == null)
|
{
|
return;
|
}
|
m_AncientEnemy.SetActive(isAncientEnemy);
|
|
if (!isAncientEnemy) return;
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) == GeneralDefine.CrossFamilyBattleMapID)
|
{
|
m_AncientEnemy.SetSprite("ZLWJ2");
|
}
|
else
|
{
|
m_AncientEnemy.SetSprite("Enemy");
|
}
|
}
|
|
public void SetCrossKing(bool isKing)
|
{
|
if (m_CrossKing == null)
|
{
|
return;
|
}
|
m_CrossKing.SetActive(isKing);
|
|
if (!isKing) return;
|
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) == GeneralDefine.CrossFamilyBattleMapID)
|
{
|
m_CrossKing.SetSprite("ZLWJ1");
|
}
|
else
|
{
|
m_CrossKing.SetSprite("IntegralKing");
|
}
|
}
|
|
public void SetAlliance(string _alliance)
|
{
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) != GeneralDefine.CrossBattleFieldMapID)
|
{
|
if (string.IsNullOrEmpty(_alliance) || _alliance.Length == 0 || _alliance == "")
|
{
|
m_Alliance.SetActive(false);
|
}
|
else
|
{
|
m_Alliance.SetActive(true);
|
m_AllianceName.text = _alliance;
|
}
|
}
|
else
|
{
|
if (pattern == Pattern.Hero)
|
{
|
faction = (int)PlayerDatas.Instance.baseData.faction;
|
}
|
m_Alliance.SetActive(true);
|
m_AllianceName.text = string.Empty;
|
m_FairyTitle.text = Language.Get("CrossBattleField63_" + faction);
|
m_FairyFlag.SetActive(false);
|
m_PlayerName.color = UIHelper.GetUIColor(faction == 1 ? TextColType.Blue : TextColType.Orange);
|
}
|
}
|
|
public void SetRedName(bool _isRed)
|
{
|
m_PlayerName.color = _isRed ? UIHelper.GetUIColor(TextColType.Red) : UIHelper.GetUIColor(pattern == Pattern.Hero ? TextColType.Green : TextColType.White);
|
}
|
|
public void SetYellowName(bool _isYellow)
|
{
|
m_PlayerName.color = _isYellow ? UIHelper.GetUIColor(TextColType.NavyYellow) : UIHelper.GetUIColor(pattern == Pattern.Hero ? TextColType.Green : TextColType.White);
|
}
|
|
public void SetGrayName(bool _isGray)
|
{
|
m_PlayerName.color = _isGray ? Color.gray : UIHelper.GetUIColor(pattern == Pattern.Hero ? TextColType.Green : TextColType.White);
|
}
|
|
public void SetFairyLeague(bool on, int _faction)
|
{
|
if (dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) != GeneralDefine.CrossBattleFieldMapID)
|
{
|
_faction = pattern == Pattern.Hero ? (int)PlayerDatas.Instance.baseData.faction : _faction;
|
m_FairyFlag.SetActive(on);
|
m_FairyTitle.text = on ? (_faction == PlayerDatas.Instance.baseData.faction ?
|
Language.Get("UnionMatch_Ourself") : Language.Get("UnionMatch_Enemy")) : Language.Get("UnionMatch_Ourself");
|
m_FairyTitle.color = on ? UIHelper.GetUIColor((FairyCampType)_faction == FairyCampType.Blue ?
|
TextColType.Blue : TextColType.Red) : UIHelper.GetUIColor(TextColType.Blue);
|
m_AllianceName.color = on ? UIHelper.GetUIColor((FairyCampType)_faction == FairyCampType.Blue ?
|
TextColType.Blue : TextColType.Red) : UIHelper.GetUIColor(TextColType.Blue);
|
if (on)
|
{
|
m_FairyFlag.SetSprite((FairyCampType)_faction == FairyCampType.Blue ? "FlagBlue" : "FlagRed");
|
m_PlayerName.color = UIHelper.GetUIColor(pattern == Pattern.Hero ?
|
TextColType.Green : (FairyCampType)_faction == FairyCampType.Blue ? TextColType.Blue : TextColType.Red);
|
}
|
}
|
else
|
{
|
if (pattern == Pattern.Hero)
|
{
|
faction = (int)PlayerDatas.Instance.baseData.faction;
|
}
|
m_FairyTitle.text = Language.Get("CrossBattleField63_" + faction);
|
m_AllianceName.text = string.Empty;
|
m_FairyFlag.SetActive(false);
|
m_PlayerName.color = UIHelper.GetUIColor(faction == 1 ? TextColType.Blue : TextColType.Orange);
|
}
|
}
|
|
public void SetNameColor(TextColType _type)
|
{
|
m_PlayerName.color = UIHelper.GetUIColor(_type);
|
}
|
|
public void SetBossDropout(bool _isOwner)
|
{
|
if (m_BossDropout != null)
|
{
|
m_BossDropout.SetActive(_isOwner);
|
}
|
}
|
|
public void SetNPCName(string _name)
|
{
|
SetNpcRealm(999);
|
m_PlayerName.text = _name;
|
SyncPosition(true);
|
}
|
|
public void SetNPCName(int _id)
|
{
|
var config = NPCConfig.Get(_id);
|
if (config != null)
|
{
|
SetNpcRealm(config.Realm);
|
m_PlayerName.text = config.charName;
|
}
|
|
SyncPosition(true);
|
}
|
|
public void SetNpcReborn(int _npcId)
|
{
|
NPCInteractProcessor.s_NpcInteractEvent -= OnClickNpcReborn;
|
NPCInteractProcessor.s_NpcInteractEvent += OnClickNpcReborn;
|
findPreciousModel.bossInfoUpdateEvent -= UpdateNpcRebornTime;
|
findPreciousModel.bossInfoUpdateEvent += UpdateNpcRebornTime;
|
npcId = _npcId;
|
|
var config = NPCConfig.Get(_npcId);
|
if (config != null)
|
{
|
SetNpcRealm(config.Realm);
|
m_PlayerName.text = config.charName;
|
}
|
|
UpdateNpcRebornTime(_npcId);
|
m_FuncTxt.SetActive(!CrossServerUtility.IsCrossServer() && PlayerDatas.Instance.baseData.FBID != 0);
|
m_FuncTxt.text = Language.Get("BossReborn_Transfer");
|
}
|
|
private void OnClickNpcReborn(E_NpcType _npcType, int _npcId, uint arg3)
|
{
|
if (CrossServerUtility.IsCrossServer())
|
{
|
return;
|
}
|
|
if (_npcType != E_NpcType.Func)
|
{
|
return;
|
}
|
|
var _cfg = BossInfoConfig.GetBossInfoByStoneId(_npcId);
|
if (_cfg != null)
|
{
|
if (PlayerDatas.Instance.baseData.FBID != 0 && !BossJiaLineUtility.Instance.showJiaLine)
|
{
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Supplement1001"), (bool _isOk) =>
|
{
|
if (_isOk)
|
{
|
MapTransferUtility.Instance.MoveToNPC(_cfg.NPCID);
|
}
|
});
|
}
|
}
|
}
|
|
private void UpdateNpcRebornTime(int _id)
|
{
|
if (_id != npcId)
|
{
|
return;
|
}
|
|
m_BossInfoQuery.bossId = npcId;
|
FindPreciousModel.BossInfo _bossInfo;
|
if (findPreciousModel.TryGetBossInfo(npcId, out _bossInfo))
|
{
|
m_RebornTime.SetActive(true);
|
(m_TimeBehaviour as TimerToChsBehaviour).addtionInfo = Language.Get("BossReborn_RefreshTime");
|
m_TimeBehaviour.Begin((int)(_bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds, () =>
|
{
|
m_NpcAppearTxt.SetActive(true);
|
});
|
}
|
else
|
{
|
m_RebornTime.SetActive(false);
|
}
|
|
m_NpcAppearTxt.SetActive(!m_RebornTime.gameObject.activeSelf);
|
}
|
|
public void SetMonsterInfo(int _npcId, int _level)
|
{
|
var config = NPCConfig.Get(_npcId);
|
if (config != null)
|
{
|
SetNpcRealm(config.Realm);
|
m_PlayerName.text = StringUtility.Contact(config.charName, Language.Get("HeadUpName_Monster", _level));
|
monsterLevel = _level;
|
monsterType = (E_MonsterType)config.IsBoss;
|
|
//if (m_ElderAnger != null)
|
//{
|
// m_ElderAnger.Display(_npcId);
|
//}
|
|
if (m_IceCrystalScore != null)
|
{
|
m_IceCrystalScore.Display(_npcId);
|
}
|
}
|
|
UpdateMonsterNameColor(PlayerDatas.Instance.baseData.LV);
|
SyncPosition(true);
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerInfoRefresh;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerInfoRefresh;
|
}
|
|
public void Dispose()
|
{
|
SetAncientKing(false);
|
SetAncientEnemy(false);
|
SetCrossKing(false);
|
|
NPCInteractProcessor.s_NpcInteractEvent -= OnClickNpcReborn;
|
findPreciousModel.bossInfoUpdateEvent -= UpdateNpcRebornTime;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerInfoRefresh;
|
}
|
|
private void OnPlayerInfoRefresh(PlayerDataType _refreshType)
|
{
|
switch (_refreshType)
|
{
|
case PlayerDataType.LV:
|
UpdateMonsterNameColor((int)PlayerDatas.Instance.baseData.LV);
|
break;
|
}
|
}
|
|
private void UpdateMonsterNameColor(int _playerLevel)
|
{
|
switch (pattern)
|
{
|
case Pattern.Monster:
|
m_PlayerName.color = MonsterNameColor.GetColor(monsterType, _playerLevel, monsterLevel);
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void SetImageMaterialTexture(string _iconKey)
|
{
|
if (!secondTextInited)
|
{
|
var sprite = UILoader.LoadSprite(_iconKey);
|
if (sprite != null)
|
{
|
if (m_Realm != null)
|
{
|
m_Realm.material.SetTexture("_Tex2", sprite.texture);
|
}
|
|
if (m_PlayerTitle != null)
|
{
|
m_PlayerTitle.material.SetTexture("_Tex2", sprite.texture);
|
}
|
|
secondTextInited = true;
|
}
|
}
|
}
|
|
public enum Pattern
|
{
|
Hero,
|
Player,
|
Monster,
|
FunctionNPC,
|
NpcReborn,
|
}
|
|
public struct PlayerInfo
|
{
|
public uint realm;
|
public uint title;
|
public string name;
|
public string alliance;
|
public bool isHang;
|
public int faction;
|
}
|
|
}
|
|
}
|
|
|
|