//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Sunday, May 05, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RoleInfomationWin : Window { [SerializeField] RolePropertyBehaviour[] m_PropertyBehaviours; [SerializeField] Text m_PlayerExp; [SerializeField] Text m_PlayerLv; [SerializeField] Text m_PlayerName; [SerializeField] Text m_PlayerFightPower; [SerializeField] RawImage m_PlayerShowModel; [SerializeField] RectTransform m_ContainerExp; [SerializeField] Slider m_ExpSlider; [SerializeField] Text m_WorldExp; [SerializeField] Button m_PlayerPropertyBtn; [SerializeField] Button m_TitleBtn; [SerializeField] Button m_RenameBtn; [SerializeField] Image m_RoleTitleIcon; [SerializeField] Image m_RoleRealmIcon; [SerializeField] Button m_Btn_Elixir; TitleModel m_TitleModel; TitleModel titleModel { get { return m_TitleModel ?? (m_TitleModel = ModelCenter.Instance.GetModel()); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_PlayerPropertyBtn.onClick.AddListener(OnAttrExplainClick); m_TitleBtn.onClick.AddListener(OnDesignationClick); m_RenameBtn.onClick.AddListener(OnRenameClick); m_Btn_Elixir.onClick.AddListener(OnElixirClick); } protected override void OnPreOpen() { PlayerDatas.Instance.playerDataUpdateEvent += OnUpdateLvExp; PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerInfo; titleModel.OnRefreshGainTitle += OnRefreshTitle; PlayerDatas.Instance.worldLevelUpdateEvent += OnRefreshWorldLv; packModel.refreshItemCountEvent += RefreshItemCountAct; m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); OnUpdateLvExp(); DisplayModel(); OnRefreshRealm(); OnRefreshWorldLv(); for (int i = 0; i < m_PropertyBehaviours.Length; i++) { m_PropertyBehaviours[i].Display(); } } protected override void OnAfterOpen() { } protected override void OnPreClose() { UI3DModelExhibition.Instance.StopShow(); PlayerDatas.Instance.playerDataUpdateEvent -= OnUpdateLvExp; PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerInfo; titleModel.OnRefreshGainTitle -= OnRefreshTitle; PlayerDatas.Instance.worldLevelUpdateEvent -= OnRefreshWorldLv; packModel.refreshItemCountEvent -= RefreshItemCountAct; for (int i = 0; i < m_PropertyBehaviours.Length; i++) { m_PropertyBehaviours[i].Dispose(); } } protected override void OnAfterClose() { } #endregion void DisplayModel() { UI3DModelExhibition.Instance.ShowPlayer(m_PlayerShowModel, PlayerDatas.Instance.baseData.Job); } private void OnRefreshTitle() { TitleData titleData = titleModel.GetTitleEquip(); if (titleData != null && titleModel.IsTitleGain(titleData.id)) { m_RoleTitleIcon.gameObject.SetActive(true); DienstgradConfig cfg = DienstgradConfig.Get(titleData.id); if (cfg != null) { m_RoleTitleIcon.SetSprite(cfg.Image); } } else { m_RoleTitleIcon.gameObject.SetActive(false); } } private void OnRefreshRealm() { int realmlv = PlayerDatas.Instance.baseData.realmLevel; RealmConfig presentCfg = RealmConfig.Get(realmlv); if (presentCfg != null && presentCfg.Lv > 0) { m_RoleRealmIcon.SetSprite(presentCfg.Img); m_RoleRealmIcon.gameObject.SetActive(true); } else { m_RoleRealmIcon.gameObject.SetActive(false); } } private void OnRefreshPlayerInfo(PlayerDataType refreshType) { switch (refreshType) { case PlayerDataType.FightPower: m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString(); break; case PlayerDataType.RealmLevel: { OnRefreshRealm(); } break; case PlayerDataType.LV: case PlayerDataType.TotalExp: case PlayerDataType.ExpPoint: { OnUpdateLvExp(); OnRefreshWorldLv(); } break; } } private void RefreshItemCountAct(PackType packType, int index, int arg3) { if (packType == PackType.Equip) { DisplayModel(); } } private void OnRefreshWorldLv() { int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.WorldLv).LimitLV; if (PlayerDatas.Instance.baseData.LV >= limit) { m_WorldExp.gameObject.SetActive(true); m_WorldExp.text = Language.Get("WordExpText", PlayerDatas.Instance.worldLv, Mathf.FloorToInt(UIHelper.ReplacePercentage((int)PlayerDatas.Instance.worldExpRate, 2)) + "%"); } else { m_WorldExp.gameObject.SetActive(false); } } void OnUpdateLvExp() { int lv = PlayerDatas.Instance.baseData.LV; if (PlayerLVConfig.Get(lv + 1) == null) { m_ExpSlider.maxValue = 1; m_ExpSlider.minValue = 0; m_ExpSlider.value = 1; m_PlayerExp.text = Language.Get("L1055"); } else { m_ExpSlider.minValue = 0; m_ExpSlider.maxValue = PlayerLVConfig.GetExpByPlayerLv(lv); m_ExpSlider.value = (ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000; m_PlayerExp.text = string.Format("{0}/{1}", UIHelper.ReplaceLargeNum((ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000), UIHelper.ReplaceLargeNum((ulong)PlayerLVConfig.GetExpByPlayerLv(lv))); } m_PlayerLv.text = Language.Get("Z1024", lv); m_PlayerName.text = PlayerDatas.Instance.baseData.PlayerName; OnRefreshTitle(); } private string GetAttrStr(PropertyType type) { PlayerPropertyConfig cfg = PlayerPropertyConfig.Get((int)type); float value = UIHelper.GetPropertyValue(type); return StringUtility.Contact(UIHelper.ReplaceLargeNum(UIHelper.ReplacePercentage(value, cfg.ISPercentage)), cfg.ISPercentage == 1 ? "%" : string.Empty); } private void OnDesignationClick() { if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Title)) { WindowCenter.Instance.Open(); } else { FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.Title); } } private void OnRenameClick() { WindowCenter.Instance.Open(); } private void OnElixirClick() { //WindowCenter.Instance.Open(); } private void OnAttrExplainClick() { WindowCenter.Instance.Open(); } } }