//-------------------------------------------------------- // [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(); } } SkyTowerModel skyTowerModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } 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); } } /// /// 玩家本身和别的玩家都用这个 /// /// /// /// 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(); if (UIFrameMgr.Inst.ContainsDynamicImage(config.Image)) { if (frame == null) frame = m_PlayerTitle.gameObject.AddComponent(); 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; } } }