//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, September 14, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; using System; namespace Snxxz.UI { public class HeadUpName : HUDBehaviour { const int TITLE_TOTAL_FRAME = 5; [Header("HeadUpName")] [SerializeField] Transform m_TitleName; [SerializeField] TextImage m_Realm; [SerializeField] TextImage 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] ElderGodAngerBehaviour m_ElderAnger; [SerializeField] IceCrystalScoreBehaviour m_IceCrystalScore; [SerializeField] Transform m_BossDropout; [SerializeField] TimerBehaviour m_TimeBehaviour; [SerializeField] Text m_RebornTime; [SerializeField] Text m_NpcAppearTxt; [SerializeField] Text m_FuncTxt; bool secondTextInited = false; uint titleId = 0; int npcId = 0; int currentFrame = 0; float titleFrameInterval = 1f / TITLE_TOTAL_FRAME; float timer = 0f; int monsterLevel = 0; E_MonsterType monsterType = E_MonsterType.Normal; public Pattern pattern { get; set; } FindPreciousModel findPreciousModel { 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(int _realm, uint _titleId, string _name, string _alliance, bool _hang) { m_PlayerName.text = _name; m_HangHint.gameObject.SetActive(_hang); SetPlayerRealm(_realm); SetTitle(_titleId); SetAlliance(_alliance); SyncPosition(true); } public void SetPlayerRealm(int _realm) { if (m_Realm) { if (_realm > 0) { m_Realm.gameObject.SetActive(true); m_PlayerName.alignment = TextAnchor.MiddleLeft; var realmConfig = Config.Instance.Get(_realm); m_Realm.SetSprite(realmConfig.Img); SetImageMaterialTexture(realmConfig.Img); } else { m_Realm.gameObject.SetActive(false); m_PlayerName.alignment = TextAnchor.MiddleCenter; } } } public void SetNpcRealm(int _realm) { if (m_Realm != null) { if (Config.Instance.ContainKey(_realm)) { m_Realm.gameObject.SetActive(true); m_PlayerName.alignment = TextAnchor.MiddleLeft; var realmConfig = Config.Instance.Get(_realm); m_Realm.SetSprite(realmConfig.Img); SetImageMaterialTexture(realmConfig.Img); } else { m_PlayerName.alignment = TextAnchor.MiddleCenter; m_Realm.gameObject.SetActive(false); } } } public void SetTitle(uint _titleId) { titleId = _titleId; if (_titleId == 0) { m_PlayerTitle.gameObject.SetActive(false); } else { m_PlayerTitle.gameObject.SetActive(true); var config = Config.Instance.Get((int)titleId); m_PlayerTitle.SetSprite(config.Image); SetImageMaterialTexture(config.Image); } } public void SetAlliance(string _alliance) { if (string.IsNullOrEmpty(_alliance) || _alliance.Length == 0 || _alliance == "") { m_Alliance.gameObject.SetActive(false); } else { m_Alliance.gameObject.SetActive(true); m_AllianceName.text = _alliance; } } 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) { _faction = pattern == Pattern.Hero ? (int)PlayerDatas.Instance.baseData.faction : _faction; m_FairyFlag.gameObject.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); } } public void SetNameColor(TextColType _type) { m_PlayerName.color = UIHelper.GetUIColor(_type); } public void SetBossDropout(bool _isOwner) { if (m_BossDropout != null) { m_BossDropout.gameObject.SetActive(_isOwner); } } public void SetNPCName(string _name) { SetNpcRealm(999); m_PlayerName.text = _name; SyncPosition(true); } public void SetNPCName(int _id) { var config = Config.Instance.Get(_id); if (config != null) { SetNpcRealm(config.ClientRealm); 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 = Config.Instance.Get(_npcId); if (config != null) { SetNpcRealm(config.ClientRealm); m_PlayerName.text = config.charName; } UpdateNpcRebornTime(_npcId); m_FuncTxt.gameObject.SetActive(PlayerDatas.Instance.baseData.FBID != 0); m_FuncTxt.text = Language.Get("BossReborn_Transfer"); } private void OnClickNpcReborn(E_NpcType _npcType, int _npcId, uint arg3) { if (_npcType != E_NpcType.Func) { return; } var _cfg = BossInfoConfig.GetBossInfoByStoneId(_npcId); if (_cfg != null) { if (PlayerDatas.Instance.baseData.FBID != 0 && !BossFakeLineUtility.Instance.showFakeLine) { 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; } FindPreciousModel.BossInfo _bossInfo; if (findPreciousModel.TryGetBossInfo(npcId, out _bossInfo)) { m_RebornTime.gameObject.SetActive(true); (m_TimeBehaviour as TimerToChsBehaviour).addtionInfo = Language.Get("BossReborn_RefreshTime"); m_TimeBehaviour.Begin(_bossInfo.refreshTime, () => { m_NpcAppearTxt.gameObject.SetActive(true); }); } else { m_RebornTime.gameObject.SetActive(false); } m_NpcAppearTxt.gameObject.SetActive(!m_RebornTime.gameObject.activeSelf); } public void SetMonsterInfo(int _npcId, int _level) { var config = Config.Instance.Get(_npcId); if (config != null) { SetNpcRealm(config.ClientRealm); 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.PlayerDataRefreshInfoEvent -= OnPlayerInfoRefresh; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayerInfoRefresh; } public void Dispose() { NPCInteractProcessor.s_NpcInteractEvent -= OnClickNpcReborn; findPreciousModel.bossInfoUpdateEvent -= UpdateNpcRebornTime; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayerInfoRefresh; } private void OnPlayerInfoRefresh(PlayerDataRefresh _refreshType) { switch (_refreshType) { case PlayerDataRefresh.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, } } }