//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, September 07, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using TableConfig; using System.Collections.Generic; //用于人物头像面板 namespace Snxxz.UI { public class HeadPortraitTip : MonoBehaviour { [SerializeField] Image _Head;//人物头像 [SerializeField] Text _BuffNumber;//Buff数量 [SerializeField] Text _VipNumber;//Vip等级 [SerializeField] Text _PowerNumbern;//战斗力 [SerializeField] Text _LVText;//人物等级 [SerializeField] Text _Hp_number;//血量数值 [SerializeField] Slider _HPSlider;//主界面的血条框 [SerializeField] Button _PatternBtn;//攻击对象按钮 [SerializeField] Button _BuffBtn;//Buff按钮 [SerializeField] Button _VIPBtn;//Vip按钮 [SerializeField] Button _HeadBtn;//人物头像按钮 [SerializeField] Button _PromoteBtn;//战力提升按钮 [SerializeField] Text vipExperienceTime; [SerializeField] Text vipExperiencePrivilege; [SerializeField] RectTransform vipExperienceImg; [SerializeField] VipExperienceTween m_VipExperienceTween; [SerializeField] UIEffect m_UieffectEmperor;//娲皇Buff private int _hp = 0;//获取当前的血量 private int _maxHp = 0;//获取最大血量 private int _fighting = 0;//获取战斗; private int _ReincarnationLv = 0;//获取转生等级 private int _jobType = 0;//获取顽疾职业 [SerializeField] Text _TimeTxt;//时间 [SerializeField] Slider _BatterySlider;//电量 [SerializeField] Image m_WifiImg;//Wife [SerializeField] GameObject m_BatteryChong;//充电 public float loadingTime = 1f;//时间刷新 private float loadingtime = 0f;//默认时间 VipModel m_VipModel; VipModel vipModel { get { return m_VipModel ?? (m_VipModel = ModelCenter.Instance.GetModel()); } } PlayerBuffDatas m_BuffModel; PlayerBuffDatas Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel()); } } PKModel m_PKModel; PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel()); } } PlayerMainDate m_MainModel; PlayerMainDate onMainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel()); } } RolePromoteModel m_PromoteModel; RolePromoteModel promoteModel { get { return m_PromoteModel ?? (m_PromoteModel = ModelCenter.Instance.GetModel()); } } CapacityDelayModel m_CapacityDelayModel; CapacityDelayModel capacityDelayModel { get { return m_CapacityDelayModel ?? (m_CapacityDelayModel = ModelCenter.Instance.GetModel()); } } private int vipExperienceSurplusTime = 0; public void Init() { loadingtime = 0f; Initialize();//关于数据的初始化 BuffGameObject(); TextSwitch(Buffmodel.PkType); OnElectricQuantity(); OnNetworkState(); RefreshVipActive(); m_VipExperienceTween.Init(); _TimeTxt.text = DateTime.Now.ToString("HH:mm"); PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;//数据的刷新(h0418) PlayerDatas.Instance.OnSwitchAttackMode += OnSwitchAttackMode; PlayerBuffDatas.Even_ObjAddBuf += BuffGameObject; PlayerBuffDatas.Even_ObjDelBuff += BuffGameObject; PlayerMainDate.ElectricQuantityEvent += OnElectricQuantity; OnNetworkState(); PlayerMainDate.NetworkStateEvent += OnNetworkState; UIEventTrigger.Get(_PatternBtn.gameObject).OnUp = PatternButton; UIEventTrigger.Get(_BuffBtn.gameObject).OnUp = BuffButton; TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent; onBatteryStateChanged(SDKUtility.Instance.ChargingType); SDKUtility.Instance.OnChargingTypeChanged += onBatteryStateChanged; vipModel.OnVipTimeEvent += RefreshVipData; PlayerMainDate.EmperorBuffEvent += EmperorBuffEvent; _VIPBtn.onClick.AddListener(VIPButton); _HeadBtn.onClick.AddListener(HeadButton); _PromoteBtn.onClick.AddListener(OnPromoteBtn); RefreshVipData(); EmperorBuffEvent(); } public void UnInit() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;//数据的刷新(h0418) PlayerBuffDatas.Even_ObjAddBuf -= BuffGameObject; PlayerBuffDatas.Even_ObjDelBuff -= BuffGameObject; PlayerDatas.Instance.OnSwitchAttackMode -= OnSwitchAttackMode; PlayerMainDate.ElectricQuantityEvent -= OnElectricQuantity; PlayerMainDate.NetworkStateEvent -= OnNetworkState; TimeMgr.Instance.OnSyntonyEvent -= OnSyntonyEvent; SDKUtility.Instance.OnChargingTypeChanged -= onBatteryStateChanged; vipModel.OnVipTimeEvent -= RefreshVipData; PlayerMainDate.EmperorBuffEvent -= EmperorBuffEvent; _VIPBtn.onClick.RemoveAllListeners(); _HeadBtn.onClick.RemoveAllListeners(); _PromoteBtn.onClick.RemoveAllListeners(); m_VipExperienceTween.UnInit(); } private void EmperorBuffEvent() { if (onMainModel.IsEmperor) { if (!m_UieffectEmperor.IsPlaying) { m_UieffectEmperor.Play(); } } } private void CloseEmperorBufEffect() { if (m_UieffectEmperor.IsPlaying) { m_UieffectEmperor.Stop(); } if (onMainModel.IsEmperor) { onMainModel.IsEmperor = false; } } private void onBatteryStateChanged(SDKUtility.E_ChargingType arg0) { switch ((int)arg0) { case 0: case 1: m_BatteryChong.SetActive(false); break; case 2: case 3: m_BatteryChong.SetActive(true); break; default: m_BatteryChong.SetActive(false); break; } } private void OnNetworkState() { switch (onMainModel.NetworkState) { case 0: m_WifiImg.SetSprite("MainInterfaceNoWifiIcon"); break; case 2: if (onMainModel.WifiSignal <= 1) { m_WifiImg.SetSprite("MainInterfaceWifiIcon3"); } else if (onMainModel.WifiSignal > 1 && onMainModel.WifiSignal <= 3) { m_WifiImg.SetSprite("MainInterfaceWifiIcon2"); } else if (onMainModel.WifiSignal > 3) { m_WifiImg.SetSprite("MainInterfaceWifiIcon"); } break; default: m_WifiImg.SetSprite("MainInterfaceEIcon"); break; } } private void OnElectricQuantity() { _BatterySlider.value = onMainModel.ElectricQuantity; } private void OnSwitchAttackMode(E_AttackMode obj)//PK状态切换 { TextSwitch((int)obj); } void PatternButton(GameObject obj) { int mapID = PlayerDatas.Instance.baseData.MapID; var config = Config.Instance.Get(mapID); int[] atkInt = pKModel.GetArea(config.AtkType).ToArray(); bool IsBossBool = MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 if (atkInt.Length > 1) { if (PlayerDatas.Instance.baseData.MapID == 10040 && !IsBossBool) { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); return; } WindowCenter.Instance.Open(); if (WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Close(); } } else { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); } } void TextSwitch(int _EnumType) { Image _PkImage = _PatternBtn.GetComponent(); switch (_EnumType) { case 0: Buffmodel.PkType = 0; _PkImage.SetSprite("Atk_Peace");//和平 break; case 1: Buffmodel.PkType = 1; _PkImage.SetSprite("Atk_All");//全体 break; case 2: Buffmodel.PkType = 2; break; case 3: Buffmodel.PkType = 3; break; case 4: Buffmodel.PkType = 4; break; case 5: Buffmodel.PkType = 5; if (PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON) { _PkImage.SetSprite("Atk_League");//仙盟联赛 } else { _PkImage.SetSprite("Atk_Force");//强制 } break; case 6: break; case 7: break; default: break; } } void BuffButton(GameObject obj) { CloseEmperorBufEffect(); WindowCenter.Instance.Open(); } void VIPButton() { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("FuncNoOpen_VIP"); return; } WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); } void CombatButton() { // DesignDebug.Log("战斗力提升"); SysNotifyMgr.Instance.ShowTip("UnopenedFunction"); } void HeadButton() { // DesignDebug.Log("头像点击框"); WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); } void OnPromoteBtn() { WindowCenter.Instance.Open(); } void BuffGameObject() { int Count = Buffmodel._BuffDic.Count; if (Count <= 0) { _BuffBtn.gameObject.SetActive(false); } else { _BuffBtn.gameObject.SetActive(true); _BuffNumber.text = Count.ToString(); } } void Initialize()//关于数据的初始化 { _LVText.text = PlayerDatas.Instance.baseData.LV.ToString();//等级的初始化 _Hp_number.text = PlayerDatas.Instance.baseData.HP.ToString() + "/" + PlayerDatas.Instance.extersion.MaxHP.ToString();//人物血量的初始化 _hp = (int)PlayerDatas.Instance.baseData.HP; _maxHp = (int)PlayerDatas.Instance.extersion.MaxHP; if (_maxHp > 0) { _HPSlider.value = (float)Math.Round((float)_hp / _maxHp, 2, MidpointRounding.AwayFromZero);//血条的初始化 } else { _HPSlider.value = 1f; } _fighting = (int)PlayerDatas.Instance.baseData.FightPoint; _PowerNumbern.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); _jobType = (int)PlayerDatas.Instance.baseData.Job; _ReincarnationLv = (int)PlayerDatas.Instance.baseData.ExAttr1;//得到转生等级 HeadImage(PlayerDatas.Instance.baseData.Job, 0);//角色头像初始化 JobTitle(PlayerDatas.Instance.baseData.Job, _ReincarnationLv); VipImage(PlayerDatas.Instance.baseData.VIPLv);//获取Vip等级且赋值 } void OnFightHpChange(uint hp) { _hp = (int)hp; _Hp_number.text = _hp.ToString() + "/" + _maxHp.ToString(); _HPSlider.value = (float)Math.Round((float)_hp / _maxHp, 2, MidpointRounding.AwayFromZero);//血量条 } void Updatefighting(PlayerDataRefresh _tCDBPlayerRefresh)//数据的刷新 { switch (_tCDBPlayerRefresh) { case PlayerDataRefresh.FightPower://战斗力的刷新83 _fighting = (int)PlayerDatas.Instance.baseData.FightPoint; _PowerNumbern.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); break; case PlayerDataRefresh.LV://等级的刷新8 _LVText.text = PlayerDatas.Instance.baseData.LV.ToString(); break; case PlayerDataRefresh.MaxHP://最大血量的刷新28 _maxHp = (int)PlayerDatas.Instance.extersion.MaxHP; _Hp_number.text = _hp.ToString() + "/" + _maxHp.ToString(); _HPSlider.value = (float)Math.Round((float)_hp / _maxHp, 2, MidpointRounding.AwayFromZero);//血量条 break; case PlayerDataRefresh.HP://当前血量29 _hp = (int)PlayerDatas.Instance.baseData.HP; _Hp_number.text = _hp.ToString() + "/" + _maxHp.ToString(); _HPSlider.value = (float)Math.Round((float)_hp / _maxHp, 2, MidpointRounding.AwayFromZero);//血量条 break; case PlayerDataRefresh.VIPLv://关于VIP等级的刷新 RefreshVipActive(); VipImage((int)PlayerDatas.Instance.baseData.VIPLv); break; case PlayerDataRefresh.Job://玩家职业 _jobType = (int)PlayerDatas.Instance.baseData.Job; JobTitle(_jobType, _ReincarnationLv); break; case PlayerDataRefresh.ExAttr1://获取转生等级 _ReincarnationLv = (int)PlayerDatas.Instance.baseData.ExAttr1; JobTitle(_jobType, _ReincarnationLv); break; default: break; } } void HeadImage(int _jobID, int _ReincarnationLv)//关于人物头像的赋值 { _Head.SetSprite(GeneralConfig.Instance.GetJobHeadPortrait(_jobID, _ReincarnationLv)); } void VipImage(int _vipID)//获取Vip等级且赋值 { _VipNumber.text = vipModel.IsVipExperience() ? "1" : _vipID.ToString(); } void JobTitle(int _Job, int _ReincarnationLv)//职业名称 { string str = _Job + "0" + _ReincarnationLv; int JobName = int.Parse(str); string Name = ""; if (Config.Instance.Get(JobName) != null) { Name = Config.Instance.Get(JobName).name; } } private void RefreshVipData() { RefreshVipActive(); var _hero = PlayerDatas.Instance.hero; bool _lifeBarShow = false; VipImage(PlayerDatas.Instance.baseData.VIPLv); if (_hero != null && _hero.SelectTarget != null) { _lifeBarShow = (_hero.SelectTarget is GA_NpcFightBoss) || (_hero.SelectTarget is GA_NpcClientFightBoss); } vipExperienceImg.gameObject.SetActive(vipModel.IsVipExperience() && !_lifeBarShow); vipExperienceSurplusTime = Mathf.Max(0, (int)(vipModel.vipExperienceOverdue - TimeUtility.ServerNow).TotalSeconds); if (vipExperienceSurplusTime > 0) { RefreshVipExperienceTime(); vipExperiencePrivilege.text = Language.Get("VipCard2"); } } private void RefreshVipExperienceTime() { vipExperienceTime.text = Language.Get("VipCard1", TimeUtility.SecondsToHMS(vipExperienceSurplusTime)); } private void OnSyntonyEvent(TimeMgr.SyntonyType _type) { if (_type == TimeMgr.SyntonyType.VipExperirnceOverdue) { RefreshVipActive(); VipImage(PlayerDatas.Instance.baseData.VIPLv); } } private void RefreshVipActive() { // _VipNumber.material = (vipModel.IsVipActive() || vipModel.IsVipExperience()) ? // MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial(); // _VIPBtn.image.material = (vipModel.IsVipActive() || vipModel.IsVipExperience()) ? // MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial(); } private void LateUpdate() { loadingtime += Time.deltaTime; if (loadingtime >= loadingTime) { _TimeTxt.text = DateTime.Now.ToString("HH:mm"); loadingtime = 0f; } if (vipExperienceSurplusTime <= 0) return; var _surplusTime = Mathf.Max(0, (int)(vipModel.vipExperienceOverdue - TimeUtility.ServerNow).TotalSeconds); if (vipExperienceSurplusTime != _surplusTime) { vipExperienceSurplusTime = _surplusTime; RefreshVipExperienceTime(); } if (vipExperienceSurplusTime == 0) { RefreshVipData(); } } } }