//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, February 27, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmEquipWin : Window { [SerializeField] Button m_Close; [SerializeField] RectTransform m_LevelsContainer; [SerializeField] EquipSlots m_EquipSlots; [SerializeField] Text m_FightPoint; [SerializeField] RawImage m_Role; [SerializeField] Image m_ImgAppearance; [SerializeField] Button m_SelectAppearance; [SerializeField] EquipSuitPropertyWidget m_SuitPropertyWidget; [SerializeField] CandidateEquipWidget m_CandidateEquipWidget; [SerializeField] EquipGetWayWidget m_GetWayWidget; List levelSelectBehaviours = new List(); List emptyFillers = new List(); EquipModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.SetListener(() => { WindowCenter.Instance.Close(); }); m_SelectAppearance.SetListener(() => { model.SetAppearance(model.selectedLevel.value); }); } protected override void OnPreOpen() { if (model.selectedLevel.value == 0) { model.SelectSet(model.GetFirstRedpointEquipSet()); } } protected override void OnAfterOpen() { m_SuitPropertyWidget.DisplaySuitPlaceEffects(model.suitPlaceCollectEffects.Fetch()); m_SuitPropertyWidget.DisplaySuitLevelEffects(model.suitActive.Fetch()); } protected override void OnPreClose() { if (!WindowJumpMgr.Instance.IsJumpState) { WindowCenter.Instance.Open(); } } protected override void OnAfterClose() { model.ResetOperateParams(); } protected override void OnActived() { base.OnActived(); DisplayLevels(); DisplayDynamicInfo(true); } protected override void LateUpdate() { base.LateUpdate(); DisplayDynamicInfo(false); } private void DisplayDynamicInfo(bool force) { if (force || model.selectedLevel.dirty) { var level = model.selectedLevel.Fetch(); DisplayEquips(level); var eightSuitLevel = model.GetSuitLevel(level, EquipSuitType.EightSuit); m_SuitPropertyWidget.Init(level , eightSuitLevel); } if (force || model.appearance.dirty) { DisplayAppearance(model.appearance.Fetch(), force); } if (force || model.fightPoint.dirty) { DisplayFightPoint(model.fightPoint.Fetch()); } if (force || model.candidateEquips.dirty) { var candidates = model.candidateEquips.Fetch(); m_CandidateEquipWidget.Display(model.selectedLevel.value, candidates); } if (force || model.suitPlaces.dirty) { m_SuitPropertyWidget.DisplaySuitPlaces(model.suitPlaces.Fetch()); } if (force || model.suitProperty.dirty) { m_SuitPropertyWidget.DisplayProperty(model.suitProperty.Fetch()); } if (force || model.getWays.dirty) { DisplayGetWays(model.getWays.Fetch()); } if (force || model.isAppearanceLevel.dirty) { DisplayAppearaneSign(model.isAppearanceLevel.Fetch()); } if (this.windowState == WindowState.Opened && model.suitPlaceCollectEffects.dirty) { m_SuitPropertyWidget.DisplaySuitPlaceEffects(model.suitPlaceCollectEffects.Fetch()); } if (this.windowState == WindowState.Opened && model.suitActive.dirty) { m_SuitPropertyWidget.DisplaySuitLevelEffects(model.suitActive.Fetch()); } } private void DisplayLevels() { var sets = model.GetViewableEquipSets(); var behaviourCount = sets.Count; var emptyCount = behaviourCount >= 5 ? 0 : 5 - behaviourCount; var behaviourGap = behaviourCount - levelSelectBehaviours.Count; for (var i = 0; i < behaviourGap; i++) { var instance = UIUtility.CreateWidget("EquipLevelSelectBehaviour", "EquipLevelSelectBehaviour"); instance.transform.SetParentEx(m_LevelsContainer, Vector3.zero, Quaternion.identity, Vector3.one); instance.transform.SetAsFirstSibling(); levelSelectBehaviours.Insert(0, instance.GetComponent()); } for (var i = 0; i < emptyCount; i++) { var instance = UIUtility.CreateWidget("EquipLevelSelectEmptyBehaviour", "EquipLevelSelectEmptyBehaviour"); instance.transform.SetParentEx(m_LevelsContainer, Vector3.zero, Quaternion.identity, Vector3.one); instance.transform.SetAsLastSibling(); emptyFillers.Add(instance); } for (var i = 0; i < levelSelectBehaviours.Count; i++) { var behaviour = levelSelectBehaviours[i]; if (i < behaviourCount) { behaviour.gameObject.SetActive(true); behaviour.Display(sets[i]); } else { behaviour.gameObject.SetActive(false); } } for (var i = 0; i < emptyFillers.Count; i++) { emptyFillers[i].SetActive(i < emptyCount); } } private void DisplayEquips(int level) { for (var i = 1; i <= 12; i++) { m_EquipSlots[i].Display(level, i); } } private void DisplayAppearaneSign(bool isCurrentEquiped) { m_ImgAppearance.SetSprite(isCurrentEquiped ? "RealmEquip_CurrentEquip" : "RealmEquip_PutOn"); } private void DisplayAppearance(EquipAppearance appearance, bool resetRotation) { UI3DModelExhibition.Instance.ShowPlayer(m_Role, new UI3DPlayerExhibitionData() { job = PlayerDatas.Instance.baseData.Job, clothesId = appearance.clothes, weaponId = appearance.weapon, secondaryId = appearance.secondary, keepRotation = !resetRotation, }); } private void DisplayFightPoint(int fightPoint) { m_FightPoint.text = fightPoint.ToString(); } private void DisplayGetWays(List getWays) { if (getWays.IsNullOrEmpty()) { m_GetWayWidget.gameObject.SetActive(false); } else { m_GetWayWidget.gameObject.SetActive(true); m_GetWayWidget.DisplayGetWays(getWays); } } #endregion [System.Serializable] public class EquipSlots { public EquipSlotBehaviour weapon; public EquipSlotBehaviour secondary; public EquipSlotBehaviour hat; public EquipSlotBehaviour clothes; public EquipSlotBehaviour belt; public EquipSlotBehaviour trousers; public EquipSlotBehaviour shoes; public EquipSlotBehaviour glove; public EquipSlotBehaviour neck; public EquipSlotBehaviour fairy1; public EquipSlotBehaviour fairy2; public EquipSlotBehaviour jade; public EquipSlotBehaviour this[int place] { get { switch ((RoleEquipType)place) { case RoleEquipType.Weapon: return weapon; case RoleEquipType.Weapon2: return secondary; case RoleEquipType.Hat: return hat; case RoleEquipType.Clothes: return clothes; case RoleEquipType.Belt: return belt; case RoleEquipType.Trousers: return trousers; case RoleEquipType.Shoes: return shoes; case RoleEquipType.Glove: return glove; case RoleEquipType.Neck: return neck; case RoleEquipType.FairyCan1: return fairy1; case RoleEquipType.FairyCan2: return fairy2; case RoleEquipType.Jade: return jade; default: return null; } } } } } }