//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, September 07, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; 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 [SerializeField] Image m_Shield;//护盾显示 [SerializeField] Text _TimeTxt;//时间 [SerializeField] Slider _BatterySlider;//电量 [SerializeField] Image m_WifiImg;//Wife [SerializeField] GameObject m_BatteryChong;//充电 private float loadingtime = 0f;//默认时间 VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } BuffModel Buffmodel { get { return ModelCenter.Instance.GetModel(); } } PKModel pKModel { get { return ModelCenter.Instance.GetModel(); } } PlayerMainDate onMainModel { get { return ModelCenter.Instance.GetModel(); } } FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel(); } } private int vipExperienceSurplusTime = 0; private int GetLv = 0;//获取人物等级 public void Init() { loadingtime = 0f; Initialize();//关于数据的初始化 BuffGameObject(); TextSwitch(Buffmodel.PkType); OnElectricQuantity(); OnNetworkState(); SetShieldNumber();//设置护盾值 m_VipExperienceTween.Init(); _TimeTxt.text = DateTime.Now.ToString("HH:mm"); OnNetworkState(); onBatteryStateChanged(SDKUtility.Instance.ChargingType); RefreshVipData(); EmperorBuffEvent(); _PatternBtn.SetListener(PatternButton); _BuffBtn.SetListener(BuffButton); _VIPBtn.onClick.AddListener(VIPButton); _HeadBtn.onClick.AddListener(HeadButton); _PromoteBtn.onClick.AddListener(OnPromoteBtn); PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418) PlayerDatas.Instance.OnSwitchAttackMode += OnSwitchAttackMode; BuffModel.Even_ObjAddBuf += BuffGameObject; BuffModel.Even_ObjDelBuff += BuffGameObject; PlayerMainDate.ElectricQuantityEvent += OnElectricQuantity; PlayerMainDate.NetworkStateEvent += OnNetworkState; TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent; SDKUtility.Instance.OnChargingTypeChanged += onBatteryStateChanged; vipModel.OnVipTimeEvent += RefreshVipData; PlayerMainDate.EmperorBuffEvent += EmperorBuffEvent; var inBossArea = PlayerDatas.Instance.hero != null && MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 if (PlayerDatas.Instance.baseData.MapID == 10040 && !inBossArea)//关于逍遥城状态的特殊处理 { if (Buffmodel.PkType != onMainModel.AreaState) { Buffmodel.PkType = onMainModel.AreaState; DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)onMainModel.AreaState); } } } public void UnInit() { PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418) BuffModel.Even_ObjAddBuf -= BuffGameObject; BuffModel.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.RemoveAllListeners(); _HeadBtn.RemoveAllListeners(); _PromoteBtn.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) { m_BatteryChong.gameObject.SetActive(arg0 == SDKUtility.E_ChargingType.ChargingFull || arg0 == SDKUtility.E_ChargingType.Charging); } 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 <= 3) { m_WifiImg.SetSprite("MainInterfaceWifiIcon2"); } else { 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() { int mapID = PlayerDatas.Instance.baseData.MapID; var config = MapConfig.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) { var activityline = 0; fairyGrabBossModel.TryGetFairyGrabBossLine(out activityline); if (PlayerDatas.Instance.baseData.MapID == 10040 && activityline == PlayerDatas.Instance.baseData.FBID)//逍遥城活动线不允许切换模式 { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); return; } if (PlayerDatas.Instance.baseData.MapID == 10040 && IsBossBool && !fairyGrabBossModel.grabBossHintOpen)//逍遥城boss区域特殊处理(可切换状态) { WindowCenter.Instance.Open(); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } return; } if (onMainModel.ShieldedArea.Contains(mapID))//Boss争夺战前三只保底只能是和平模式 { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); return; } if (onMainModel.ActivityList.Contains(PlayerDatas.Instance.baseData.MapID) && activityline != PlayerDatas.Instance.baseData.FBID)//再前四章新手地图且不在活动区域 { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); return; } WindowCenter.Instance.Open(); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } else { SysNotifyMgr.Instance.ShowTip("Map_AtkType"); } } void TextSwitch(int _EnumType) { var _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() { 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 HeadButton() { ModelCenter.Instance.GetModel().OpenRolePanel(); } 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()//关于数据的初始化 { GetLv = PlayerDatas.Instance.baseData.LV; _LVText.text = PlayerDatas.Instance.baseData.LV.ToString();//等级的初始化 DisplayHp(); _PowerNumbern.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); DisplayHead(PlayerDatas.Instance.baseData.Job, 0);//角色头像初始化 DisplayVip(PlayerDatas.Instance.baseData.VIPLv);//获取Vip等级且赋值 } void Updatefighting(PlayerDataType type)//数据的刷新 { switch (type) { case PlayerDataType.FightPower://战斗力的刷新83 _PowerNumbern.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); break; case PlayerDataType.LV://等级的刷新8 _LVText.text = PlayerDatas.Instance.baseData.LV.ToString(); if (PlayerDatas.Instance.baseData.LV > GetLv) { GetLv = PlayerDatas.Instance.baseData.LV; WindowCenter.Instance.Open(); } break; case PlayerDataType.MaxHP://最大血量的刷新28 case PlayerDataType.HP://当前血量29 DisplayHp(); break; case PlayerDataType.VIPLv://关于VIP等级的刷新 DisplayVip((int)PlayerDatas.Instance.baseData.VIPLv); break; case PlayerDataType.ExAttr4://当前护盾值 SetShieldNumber(); break; case PlayerDataType.MaxProDef://最大护盾值 SetShieldNumber(); break; default: break; } } void DisplayHead(int _jobID, int _ReincarnationLv)//关于人物头像的赋值 { _Head.SetSprite(GeneralDefine.GetJobHeadPortrait(_jobID, _ReincarnationLv)); } void DisplayVip(int _vipID)//获取Vip等级且赋值 { _VipNumber.text = vipModel.IsVipExperience() ? "1" : _vipID.ToString(); } private void DisplayHp() { var hp = (int)PlayerDatas.Instance.baseData.HP; var maxHp = (int)PlayerDatas.Instance.extersion.MaxHP; _Hp_number.text = StringUtility.Contact(hp, "/", maxHp); if (maxHp > 0) { _HPSlider.value = (float)hp / maxHp;//血条的初始化 } else { _HPSlider.value = 1f; } } private void RefreshVipData() { var hero = PlayerDatas.Instance.hero; var lifeBarShow = false; DisplayVip(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) { DisplayVip(PlayerDatas.Instance.baseData.VIPLv); } } private void LateUpdate() { loadingtime += Time.deltaTime; if (loadingtime >= 1f) { _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(); } } private void SetShieldNumber()//护盾值设置 { if (PlayerDatas.Instance.extersion.MaxProDef != 0) { var MaxProDef = PlayerDatas.Instance.extersion.MaxProDef;//最大值 var ExAttr4 = (int)PlayerDatas.Instance.baseData.shield;//当前值 var fillAmount = (float)ExAttr4 / MaxProDef; m_Shield.fillAmount = fillAmount; } else { m_Shield.fillAmount = 0f; } } } }