//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, February 27, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class RealmEquipWin : Window { [SerializeField] RectTransform m_Content; [SerializeField] EquipSlots m_EquipSlots; [SerializeField] Text m_FightPoint; [SerializeField] RawImage m_Role; [SerializeField] Image m_ImgAppearance; [SerializeField] Button m_SelectAppearance; [SerializeField] RectTransform m_LevelContainer; [SerializeField] Button m_SuiteButton; [SerializeField] Button m_SuiteClose; [SerializeField] RedpointBehaviour m_SuiteRedPoint; [SerializeField] EquipSuitPropertyWidget m_SuitPropertyWidget; List levelSelectBehaviours = new List(); EquipModel model { get { return ModelCenter.Instance.GetModel(); } } EquipStrengthModel strengthModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_SuiteClose.SetListener(() => { m_SuitPropertyWidget.SetActive(false); }); m_SelectAppearance.SetListener(() => { model.SetAppearance(model.selectedLevel.value); }); m_SuiteButton.SetListener(OpenSuiteAttr); } private void OpenSuiteAttr() { if (m_SuitPropertyWidget.gameObject.activeSelf) m_SuitPropertyWidget.SetActive(false); else m_SuitPropertyWidget.SetActive(true); } protected void TriggerLast() { int index = Math.Max(1, model.selectedLevel.value - 1); model.SelectSet(index); } protected void TriggerNext() { int index = Math.Min(model.selectedLevel.value + 1, model.GetUnLockedEquipSets().Count); model.SelectSet(index); } protected override void OnPreOpen() { if (model.selectedLevel.value == 0) { model.SelectSet(model.GetFirstRedpointEquipSet()); } m_SuitPropertyWidget.SetActive(model.isOpenSuiteAttrRect); model.isOpenSuiteAttrRect = false; } 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(); } UI3DModelExhibition.InstanceClone2.StopShow(); } protected override void OnAfterClose() { model.ResetOperateParams(); } protected override void OnActived() { base.OnActived(); var knapSackWin = WindowCenter.Instance.Get(); if (knapSackWin != null) { Transform parent = knapSackWin.subWindowContainer; this.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one); this.transform.SetAsLastSibling(); } 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(); DisplayLevels(); 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.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.GetUnLockedEquipSets(); var behaviourCount = sets.Count; var behaviourGap = behaviourCount - levelSelectBehaviours.Count; for (var i = 0; i < behaviourGap; i++) { var instance = UIUtility.CreateWidget("EquipSetSelect", "EquipSetSelect"); instance.transform.SetParentEx(m_LevelContainer, Vector3.zero, Quaternion.identity, Vector3.one); instance.transform.SetAsFirstSibling(); levelSelectBehaviours.Insert(0, instance.GetComponent()); } for (var i = 0; i < levelSelectBehaviours.Count; i++) { var behaviour = levelSelectBehaviours[i]; if (i < behaviourCount) { behaviour.SetActive(true); behaviour.Display(sets[i], model.selectedLevel.value == sets[i], model.GetEquipSet(sets[i]).redpoint.id); } else { behaviour.SetActive(false); } } } private void DisplayEquips(int level) { for (var i = 1; i <= 12; i++) { m_EquipSlots[i].Display(level, i); } m_SuiteRedPoint.redpointId = 6560 + level; } private void DisplayAppearaneSign(bool isCurrentEquiped) { m_ImgAppearance.SetSprite(isCurrentEquiped ? "RealmEquip_CurrentEquip" : "RealmEquip_PutOn"); } private void DisplayAppearance(EquipAppearance appearance, bool resetRotation) { UI3DModelExhibition.InstanceClone2.ShowPlayer(m_Role, new UI3DPlayerExhibitionData() { job = PlayerDatas.Instance.baseData.Job, clothesId = appearance.clothes, weaponId = appearance.weapon, secondaryId = appearance.secondary, keepRotation = !resetRotation, reikiRootEffectId = strengthModel.GetMasterLV(model.selectedLevel.Fetch()), suitLevel = appearance.isSuit ? 1 : 0, equipLevel = model.selectedLevel.Fetch(), titleID = PlayerDatas.Instance.baseData.TitleID, }); m_Role.raycastTarget = false; } private void DisplayFightPoint(int fightPoint) { m_FightPoint.text = fightPoint.ToString(); } private void DisplayGetWays(List getWays) { if (getWays.IsNullOrEmpty()) { WindowCenter.Instance.Close(); } else { ModelCenter.Instance.GetModel().SetWays(getWays.ToArray()); WindowCenter.Instance.Open(); } } #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; } } } } } }