//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 07, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class FashionDressWin : Window { [SerializeField] FashionDressTypeBehaviour[] m_FashionDressTypes; [SerializeField] Button m_ViewProperty; [SerializeField] Button m_Resolve; [SerializeField] IntensifySmoothSlider m_SmoothSlider; [SerializeField] Text m_CabinetExp; [SerializeField] Text m_CabinetLevel; [SerializeField] RawImage m_RawModel; [SerializeField] FashionDressQualityBehaviour[] m_FashionDressQualitys; [SerializeField] ScrollerController m_ScrollerControl; [SerializeField] RectTransform m_ContainerViewDetail; [SerializeField] Button m_ViewDetail; FashionDressModel model { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } MagicianModel godWeaponModel { get { return ModelCenter.Instance.GetModel(); } } List resolveList = new List(); #region Built-in protected override void BindController() { } protected override void AddListeners() { m_ViewProperty.AddListener(ViewProperty); m_Resolve.AddListener(Resolve); m_ViewDetail.AddListener(ViewDetail); m_ScrollerControl.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { SetDefaultSelect(); model.cabinetRefresh += FashionDressCabinetRefresh; model.selectTypeRefresh += SelectTypeRefresh; model.selectQualityRefresh += SelectQualityRefresh; model.selectFashionDressRefresh += SelectFashionDressRefresh; //model.virtualEquipRefresh += VirtualEquipRefresh; model.fashionDressRefresh += FashionDressRefresh; packModel.refreshItemCountEvent += RefreshItemCountAct; for (int i = 0; i < m_FashionDressTypes.Length; i++) { m_FashionDressTypes[i].Display(); } for (int i = 0; i < m_FashionDressQualitys.Length; i++) { m_FashionDressQualitys[i].Display(); } Display(); List list; if (model.TryGetFashionDresses(model.selectType, model.selectQuality, out list)) { if (model.jumpFashionDress != 0 && list.Contains(model.jumpFashionDress)) { m_ScrollerControl.JumpIndex(list.IndexOf(model.jumpFashionDress)); } } model.jumpFashionDress = 0; } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.cabinetRefresh -= FashionDressCabinetRefresh; model.selectTypeRefresh -= SelectTypeRefresh; model.selectQualityRefresh -= SelectQualityRefresh; model.selectFashionDressRefresh -= SelectFashionDressRefresh; packModel.refreshItemCountEvent -= RefreshItemCountAct; model.fashionDressRefresh -= FashionDressRefresh; //model.virtualEquipRefresh -= VirtualEquipRefresh; for (int i = 0; i < m_FashionDressTypes.Length; i++) { m_FashionDressTypes[i].Dispose(); } for (int i = 0; i < m_FashionDressQualitys.Length; i++) { m_FashionDressQualitys[i].Dispose(); } UI3DModelExhibition.Instance.StopShow(); model.TryEquip(); } protected override void OnAfterClose() { } #endregion void SetDefaultSelect() { model.selectType = model.fashionDressTypes[0]; model.selectQuality = 0; foreach (var fashionDressType in model.fashionDressTypes) { var equipId = model.GetFashionDressEquipId(fashionDressType); model.SetVirtualEquipFashionDress(fashionDressType, equipId); model.SetSelectFashionDress(fashionDressType, equipId); } for (int i = 0; i <= 2; i++) { List list; if (model.TryGetFashionDresses(model.selectType, i, out list) && list.Count > 0) { model.selectQuality = i; break; } } if (model.jumpFashionDress == 0) { if (model.levelUpRedpoint.state == RedPointState.Simple) { model.jumpFashionDress = model.fashionDressRedpointId; } } if (model.jumpFashionDress != 0) { FashionDress fashionDress; if (model.TryGetFashionDress(model.jumpFashionDress, out fashionDress)) { model.selectType = fashionDress.fashionDressType; var config = FashionDressConfig.Get(model.jumpFashionDress); model.selectQuality = config.quality; } } } void Display() { DisplayCabinet(); DisplayFashionDress(); DisplayModel(); DisplayViewDetail(); } void DisplayCabinet(bool requireAnimation = false) { m_SmoothSlider.stage = model.cabinetLevel; if (!requireAnimation) { m_SmoothSlider.delay = 0; m_SmoothSlider.ResetStage(); } else { m_SmoothSlider.delay = 0.2f; } bool isMax = model.cabinetLevel >= model.cabinetMaxLevel; var progress = 0f; if (isMax) { progress = 1; m_CabinetExp.text = StringUtility.Contact(model.cabinetExp, Language.Get("FashionDressCabinetMaxLevel")); } else { var config = FashionDressCabinetConfig.Get(model.cabinetLevel + 1); progress = Mathf.Clamp01((float)model.cabinetExp / config.NeedExp); m_CabinetExp.text = StringUtility.Contact(model.cabinetExp, "/", config.NeedExp); } m_SmoothSlider.value = progress; m_CabinetLevel.text = Language.Get("CabinetLevel", model.cabinetLevel); } void DisplayFashionDress() { List list; m_ScrollerControl.Refresh(); if (model.TryGetFashionDresses(model.selectType, model.selectQuality, out list)) { for (int i = 0; i < list.Count; i++) { m_ScrollerControl.AddCell(ScrollerDataType.Header, list[i]); } } m_ScrollerControl.Restart(); } void DisplayViewDetail() { var selectFashionDress = model.GetSelectFashionDress(model.selectType); m_ContainerViewDetail.gameObject.SetActive(selectFashionDress != 0); } private void FashionDressCabinetRefresh() { DisplayCabinet(true); } private void SelectTypeRefresh() { List list; if (!model.TryGetFashionDresses(model.selectType, model.selectQuality, out list) || list.Count == 0) { for (int i = 0; i <= 2; i++) { if (model.TryGetFashionDresses(model.selectType, i, out list) && list.Count > 0) { model.selectQuality = i; break; } } } DisplayFashionDress(); DisplayViewDetail(); } private void SelectQualityRefresh() { DisplayFashionDress(); } private void SelectFashionDressRefresh(int type) { if (model.selectType == type) { m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); } DisplayModel(); DisplayViewDetail(); } //private void VirtualEquipRefresh(int type) //{ // if (model.selectType == type) // { // m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); // } // DisplayModel(); // DisplayViewDetail(); //} private void FashionDressRefresh(int id) { m_ScrollerControl.RefreshSingleCellView(id); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var fashionDressCell = cell as FashionDressCell; fashionDressCell.Display(cell.index); } private void RefreshItemCountAct(PackType packType, int index, int itemId) { if (packType == PackType.Item && model.fashionDressLevelUpItems.Contains(itemId)) { m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); } if (packType == PackType.Equip) { if (index == (int)RoleEquipType.FashionClothes || index == (int)RoleEquipType.FashionWeapon || index == (int)RoleEquipType.FashionWeapon2) { m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); foreach (var fashionDressType in model.fashionDressTypes) { var equipId = model.GetFashionDressEquipId(fashionDressType); model.SetVirtualEquipFashionDress(fashionDressType, equipId); model.SetSelectFashionDress(fashionDressType, equipId); } } } } public void DisplayModel() { m_RawModel.gameObject.SetActive(true); var job = PlayerDatas.Instance.baseData.Job; var playerPack = ModelCenter.Instance.GetModel(); var clothes = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Clothes); var clothesId = clothes == null ? 0 : (int)clothes.itemId; var weapon = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Weapon); var weaponId = weapon == null ? 0 : (int)weapon.itemId; var wings = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Wing); var wingsId = wings == null ? 0 : (int)wings.itemId; var secondary = playerPack.GetItemByIndex(PackType.Equip, (int)RoleEquipType.Weapon2); var secondaryId = secondary == null ? 0 : (int)secondary.itemId; var fashionDressClothesId = 0; var fashionDressWeaponId = 0; var fashionDressSecondaryId = 0; foreach (var type in model.fashionDressTypes) { var selectFashionId = model.GetSelectFashionDress(type); if (selectFashionId == 0) { continue; } FashionDress fashionDress; if (model.TryGetFashionDress(selectFashionId, out fashionDress)) { var index = model.fashionTypeMapPlaceDict[type]; switch ((RoleEquipType)index) { case RoleEquipType.FashionWeapon: fashionDressWeaponId = fashionDress.GetEquipItemId(); break; case RoleEquipType.FashionClothes: fashionDressClothesId = fashionDress.GetEquipItemId(); break; case RoleEquipType.FashionWeapon2: fashionDressSecondaryId = fashionDress.GetEquipItemId(); break; } } } int _suitLevel = 0; if (clothes != null) { if (clothes.isSuite == 1) { if (clothes.GetUseDataModel(30) != null && clothes.GetUseDataModel(30)[0] != 0) { _suitLevel = clothes.GetUseDataModel(30)[0]; } } } UI3DPlayerExhibitionData data = new UI3DPlayerExhibitionData() { job = job, clothesId = clothesId, suitLevel = _suitLevel, weaponId = weaponId, wingsId = wingsId, secondaryId = secondaryId, fashionClothesId = fashionDressClothesId, fashionWeaponId = fashionDressWeaponId, fashionSecondaryId = fashionDressSecondaryId, isDialogue = false, }; UI3DModelExhibition.Instance.ShowOtherPlayer(m_RawModel, data); } private void Resolve() { if (!model.TryGetSatisfyResolves(ref resolveList)) { SysNotifyMgr.Instance.ShowTip("FashionDressResolveOpenError"); return; } WindowCenter.Instance.Open(); } private void ViewProperty() { WindowCenter.Instance.Open(); } private void ViewDetail() { var virtualEquipId = model.GetVirtualEquipFashionDress(model.selectType); var selectFashionDress = model.GetSelectFashionDress(model.selectType); if (selectFashionDress != 0) { model.ViewFashionDressDetails(selectFashionDress); } else if (virtualEquipId != 0) { model.ViewFashionDressDetails(virtualEquipId); } } } }