//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, November 19, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class GodWeaponPreviewWin : Window { [SerializeField] ScrollerController m_Controller; [SerializeField] Text m_RequireLevel; [SerializeField] Button[] m_SelectStages; [SerializeField] Transform[] m_EquipSigns; [SerializeField] Image m_Select; [SerializeField] RawImage m_RawModel; [SerializeField] PropertyBehaviour[] m_Propertys; [SerializeField] Text m_FightPower; [SerializeField] Text m_EffectName; [SerializeField] RawImage m_RawEffect; [SerializeField] RectTransform m_ContainerFuncs; [SerializeField] Button m_Equip; [SerializeField] Button m_Putoff; [SerializeField] Button m_Close; int selectStage = 1; public static int selectGodWeaponType = 1; MagicianModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.onClick.AddListener(CloseClick); for (int i = 0; i < m_SelectStages.Length; i++) { var index = i + 1; m_SelectStages[i].AddListener(() => { if (selectStage != index) { OnSelectStage(index); } }); } m_Controller.OnRefreshCell += OnRefreshCell; m_Equip.onClick.AddListener(Equip); m_Putoff.onClick.AddListener(PutOff); } protected override void OnPreOpen() { Display(); DisplayGodWeaponTypes(); PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent; } protected override void OnAfterOpen() { } protected override void OnPreClose() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent; UI3DModelExhibition.Instance.StopShow(); UI3DModelExhibition.InstanceClone1.StopShow(); } protected override void OnAfterClose() { } #endregion private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType) { if (refreshType == PlayerDataRefresh.EquipShowSwitch) { DisplayEquip(); DisplayModel(); } } void Display() { var defaultStage = model.GetGodWeaponStage(selectGodWeaponType); var level = 0; if (EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, selectGodWeaponType, out level)) { var _stage = 0; if (model.TryGetGodWeaponStage(selectGodWeaponType, level, out _stage)) { defaultStage = _stage; } } defaultStage = Mathf.Clamp(defaultStage, 1, 3); OnSelectStage(defaultStage); DisplayEquip(); } void DisplayGodWeaponTypes() { if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) == 0) { var list = model.godWeaponSorts; m_Controller.Refresh(); for (int i = 0; i < list.Count; i++) { if (model.godWeaponEffectTypes.Contains(list[i])) { m_Controller.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect); } } m_Controller.Restart(); } else { m_Controller.m_Scorller.RefreshActiveCellViews(); } } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var godWeaponCell = cell as GodWeaponPreviewCell; godWeaponCell.Display(cell.index); } private void OnGodWeaponSelect(CellView cell) { var type = cell.index; if (type != selectGodWeaponType) { selectGodWeaponType = type; m_Controller.m_Scorller.RefreshActiveCellViews(); Display(); } } private void OnSelectStage(int index) { m_Select.transform.localPosition = m_SelectStages[index - 1].transform.localPosition; selectStage = index; DisplayModel(); DisplayRequireLevel(); DisplayProperty(); DisplayFightPower(); DisplayGodWeaponEffect(); DisplayEquip(); } private void DisplayRequireLevel() { var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage); var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1); m_RequireLevel.text = Language.Get("GodWeaponStageRequireLevel", config.Name, requireLevel); var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType); m_RequireLevel.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level < requireLevel); m_ContainerFuncs.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level >= requireLevel); } private void DisplayFightPower() { var fightPower = 0; var dict = model.GetEffectPropertyUpper(selectGodWeaponType, selectStage); fightPower += model.TryGetEffectFightPower(selectGodWeaponType, selectStage); if (dict != null) { fightPower += UIHelper.GetFightPower(dict); } m_FightPower.text = StringUtility.Contact("+", fightPower); } private void DisplayProperty() { var dict = model.GetEffectPropertyUpper(selectGodWeaponType, selectStage); var index = 0; foreach (var key in dict.Keys) { if (index < m_Propertys.Length) { m_Propertys[index].gameObject.SetActive(true); m_Propertys[index].DisplayUpper(key, dict[key]); } index++; } for (int i = index; i < m_Propertys.Length; i++) { m_Propertys[i].gameObject.SetActive(false); } } void DisplayGodWeaponEffect() { var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage); var config = GodWeaponEffectConfig.Get(selectGodWeaponType, requireLevel); if (config != null) { m_EffectName.text = config.skillName; } UI3DModelExhibition.InstanceClone1.ShowGodWeaponEffect(selectGodWeaponType, requireLevel, m_RawEffect); } void DisplayEquip() { var equipedLevel = 0; EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, selectGodWeaponType, out equipedLevel); for (int i = 0; i < m_EquipSigns.Length; i++) { var stage = i + 1; var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, stage); m_EquipSigns[i].gameObject.SetActive(requireLevel == equipedLevel); } var selectLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage); m_Equip.gameObject.SetActive(selectLevel != equipedLevel); m_Putoff.gameObject.SetActive(selectLevel == equipedLevel); } private void Equip() { EquipShowSwitch.SendGodWeaponEffectOn(selectGodWeaponType, selectStage, true); } private void PutOff() { EquipShowSwitch.SendGodWeaponEffectOn(selectGodWeaponType, selectStage, false); } private void DisplayModel() { m_RawModel.gameObject.SetActive(true); var job = PlayerDatas.Instance.baseData.Job; var playerPack = ModelCenter.Instance.GetModel(); var clothes = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Clothes); var clothesId = clothes == null ? 0 : (int)clothes.itemId; var weapon = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Weapon); var weaponId = weapon == null ? 0 : (int)weapon.itemId; var wings = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Wing); var wingsId = wings == null ? 0 : (int)wings.itemId; var secondary = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Weapon2); var secondaryId = secondary == null ? 0 : (int)secondary.itemId; var fashionClothes = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionClothes); var fashionClothesId = fashionClothes == null ? 0 : (int)fashionClothes.itemId; var fashionWeapon = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionWeapon); var fashionWeaponId = fashionWeapon == null ? 0 : (int)fashionWeapon.itemId; var fashionSecondary = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionWeapon2); var fashionSecondaryId = fashionSecondary == null ? 0 : (int)fashionSecondary.itemId; 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]; } } } Dictionary dict = new Dictionary(); for (int i = 0; i < model.godWeaponTypes.Count; i++) { var type = model.godWeaponTypes[i]; if (!model.godWeaponEffectTypes.Contains(type)) { continue; } var godWeaponInfo = model.GetGodWeaponInfo(type); var equipedLevel = 0; if (type == selectGodWeaponType) { dict[type] = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage); } else if (EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, type, out equipedLevel)) { dict[type] = equipedLevel; } } UI3DPlayerExhibitionData data = new UI3DPlayerExhibitionData() { job = job, fashionClothesId = fashionClothesId, fashionWeaponId = fashionWeaponId, fashionSecondaryId = fashionSecondaryId, clothesId = clothesId, suitLevel = _suitLevel, weaponId = weaponId, wingsId = wingsId, secondaryId = secondaryId, isDialogue = false, godWeapons = dict }; UI3DModelExhibition.Instance.ShowOtherPlayer(m_RawModel, data); } } }