//--------------------------------------------------------
|
// [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<VipModel>()); } }
|
BuffModel m_BuffModel;
|
BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
|
PKModel m_PKModel;
|
PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel<PKModel>()); } }
|
PlayerMainDate m_MainModel;
|
PlayerMainDate onMainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel<PlayerMainDate>()); } }
|
RolePromoteModel m_PromoteModel;
|
RolePromoteModel promoteModel { get { return m_PromoteModel ?? (m_PromoteModel = ModelCenter.Instance.GetModel<RolePromoteModel>()); } }
|
CapacityDelayModel m_CapacityDelayModel;
|
CapacityDelayModel capacityDelayModel { get { return m_CapacityDelayModel ?? (m_CapacityDelayModel = ModelCenter.Instance.GetModel<CapacityDelayModel>()); } }
|
FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
|
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.playerDataRefreshEvent += 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.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.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<CombatModeWin>();
|
if (WindowCenter.Instance.IsOpen<FunctionForecastWin>())
|
{
|
WindowCenter.Instance.Close<FunctionForecastWin>();
|
}
|
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<CombatModeWin>();
|
if (WindowCenter.Instance.IsOpen<FunctionForecastWin>())
|
{
|
WindowCenter.Instance.Close<FunctionForecastWin>();
|
}
|
}
|
else
|
{
|
SysNotifyMgr.Instance.ShowTip("Map_AtkType");
|
}
|
}
|
void TextSwitch(int _EnumType)
|
{
|
Image _PkImage = _PatternBtn.GetComponent<Image>();
|
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<BuffListWin>();
|
}
|
|
void VIPButton()
|
{
|
if (VersionConfig.Get().isBanShu)
|
{
|
SysNotifyMgr.Instance.ShowTip("FuncNoOpen_VIP");
|
return;
|
}
|
WindowCenter.Instance.Close<MainInterfaceWin>();
|
WindowCenter.Instance.Open<VipRechargeWin>(false, 1);
|
}
|
|
void CombatButton()
|
{
|
// DesignDebug.Log("战斗力提升");
|
|
SysNotifyMgr.Instance.ShowTip("UnopenedFunction");
|
}
|
|
|
void HeadButton()
|
{
|
ModelCenter.Instance.GetModel<RoleModel>().OpenRolePanel();
|
}
|
|
void OnPromoteBtn()
|
{
|
WindowCenter.Instance.Open<PromoteDetailsWin>();
|
}
|
|
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;
|
HeadImage(PlayerDatas.Instance.baseData.Job, 0);//角色头像初始化
|
JobTitle(PlayerDatas.Instance.baseData.Job, 1);
|
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(PlayerDataType _tCDBPlayerRefresh)//数据的刷新
|
{
|
switch (_tCDBPlayerRefresh)
|
{
|
case PlayerDataType.FightPower://战斗力的刷新83
|
_fighting = (int)PlayerDatas.Instance.baseData.FightPoint;
|
_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<UpgradeWin>();
|
}
|
break;
|
case PlayerDataType.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 PlayerDataType.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 PlayerDataType.VIPLv://关于VIP等级的刷新
|
RefreshVipActive();
|
VipImage((int)PlayerDatas.Instance.baseData.VIPLv);
|
break;
|
case PlayerDataType.Job://玩家职业
|
_jobType = (int)PlayerDatas.Instance.baseData.Job;
|
JobTitle(_jobType, _ReincarnationLv);
|
break;
|
case PlayerDataType.ExAttr1://获取转生等级
|
JobTitle(_jobType, 1);
|
break;
|
case PlayerDataType.ExAttr4://当前护盾值
|
SetShieldNumber();
|
break;
|
case PlayerDataType.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.shield;//当前值
|
float fillAmount = (float)Math.Round((double)ExAttr4 / MaxProDef, 2, MidpointRounding.AwayFromZero);
|
m_Shield.fillAmount = fillAmount;
|
}
|
else
|
{
|
m_Shield.fillAmount = 0f;
|
}
|
|
}
|
}
|
|
|
|
|
|
}
|
|
|
|