//-------------------------------------------------------- // [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;//护盾显示 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()); } } BuffModel m_BuffModel; BuffModel 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()); } } 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(); RefreshVipActive(); SetShieldNumber();//设置护盾值 m_VipExperienceTween.Init(); _TimeTxt.text = DateTime.Now.ToString("HH:mm"); PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;//数据的刷新(h0418) PlayerDatas.Instance.OnSwitchAttackMode += OnSwitchAttackMode; BuffModel.Even_ObjAddBuf += BuffGameObject; BuffModel.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(); bool IsBossBool = PlayerDatas.Instance.hero != null && MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 if (PlayerDatas.Instance.baseData.MapID == 10040 && !IsBossBool)//关于逍遥城状态的特殊处理 { if (Buffmodel.PkType != onMainModel.AreaState) { Buffmodel.PkType = onMainModel.AreaState; DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)onMainModel.AreaState); } } } public void UnInit() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= 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.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 = 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) { 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() { 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();//等级的初始化 _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(); if (PlayerDatas.Instance.baseData.LV > GetLv) { GetLv = PlayerDatas.Instance.baseData.LV; WindowCenter.Instance.Open(); } 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; case PlayerDataRefresh.ExAttr4://当前护盾值 SetShieldNumber(); break; case PlayerDataRefresh.MaxProDef://最大护盾值 SetShieldNumber(); break; default: break; } } void HeadImage(int _jobID, int _ReincarnationLv)//关于人物头像的赋值 { _Head.SetSprite(GeneralDefine.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 (JobNameConfig.Get(JobName) != null) { Name = JobNameConfig.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(); } } private void SetShieldNumber()//护盾值设置 { if (PlayerDatas.Instance.extersion.MaxProDef != 0) { int MaxProDef = PlayerDatas.Instance.extersion.MaxProDef;//最大值 int ExAttr4 = (int)PlayerDatas.Instance.baseData.ExAttr4;//当前值 float fillAmount = (float)Math.Round((double)ExAttr4 / MaxProDef, 2, MidpointRounding.AwayFromZero); m_Shield.fillAmount = fillAmount; } else { m_Shield.fillAmount = 0f; } } } }