using System; using System.Collections.Generic; using System.Linq; using Cute; using LitJson; using UnityEngine; namespace Wizard; public class PuzzleQuestSelectDialog : MonoBehaviour { public class DisplayData { public PuzzleQuestData Data; public int Difficulty; public bool IsCleared; public bool IsAdditional; public bool IsUnlocked; public bool IsDisplayNew; public string UnlockConditionText; } [SerializeField] private GameObject _groupOrigin; [SerializeField] private Transform _groupParent; private Action _onDecide; private const int DIFFICULTY_COUNT = 4; private const int BATTLE_CONFIRM_DIALOG_DEPTH = 20; public static List CollectResourcePath(List displayDataList) { List list = new List(); foreach (int item in displayDataList.Select((DisplayData data) => data.Data.PlayerSkin).Distinct()) { list.Add(Toolbox.ResourcesManager.GetAssetTypePath(item.ToString(), ResourcesManager.AssetLoadPathType.DeckListTexture)); } return list; } public static List CreateDisplayData(bool isDisplayNew, JsonData jsonData) { List list = new List(); for (int i = 0; i < jsonData.Count; i++) { JsonData jsonData2 = jsonData[i]; int id = jsonData2["puzzle_id"].ToInt(); PuzzleQuestData puzzleQuestData = Data.Master.PuzzleQuestDataList.Find((PuzzleQuestData item) => item.Id == id); if (puzzleQuestData == null) { Debug.LogError($"unknown puzzle quest id : {id}"); continue; } bool valueOrDefault = jsonData2.GetValueOrDefault("is_additional", defaultValue: false); bool valueOrDefault2 = jsonData2.GetValueOrDefault("is_playable", defaultValue: true); string valueOrDefault3 = jsonData2.GetValueOrDefault("release_condition_text_id", string.Empty); list.Add(new DisplayData { Data = puzzleQuestData, Difficulty = jsonData2["puzzle_difficulty"].ToInt(), IsCleared = jsonData2["is_cleared"].ToBoolean(), IsAdditional = valueOrDefault, IsUnlocked = valueOrDefault2, IsDisplayNew = (isDisplayNew && valueOrDefault && valueOrDefault2), UnlockConditionText = GetUnlockConditionText(valueOrDefault3) }); } return list; } public static DialogBase CreateDialog(PuzzleQuestInfo info, Action onDecide) { DialogBase dialog = UIManager.GetInstance().CreateDialogClose(); dialog.SetTitleLabel(Data.SystemText.Get("Puzzle_SelectDialog_0001")); dialog.SetSize(DialogBase.Size.XL); dialog.SetButtonLayout(DialogBase.ButtonLayout.NONE); GameObject gameObject = UnityEngine.Object.Instantiate((GameObject)Resources.Load("UI/layoutParts/Dialog/PuzzleQuestSelectDialog")); gameObject.GetComponent().Setup(info, delegate(PuzzleQuestData data, int difficulty) { onDecide(data, difficulty); dialog.Close(); }); dialog.SetObj(gameObject); return dialog; } private void Setup(PuzzleQuestInfo info, Action onDecide) { _onDecide = onDecide; List> list = CreateOrderedDisplayDataList(info.DisplayDatas); _groupOrigin.gameObject.SetActive(value: true); float num = 0f; foreach (List item in list) { PuzzleQuestSelectGroup component = UnityEngine.Object.Instantiate(_groupOrigin, _groupParent).GetComponent(); component.Setup(info.GetDifficultyName(item[0].Difficulty), item, OnClickItem); UIUtil.SetLocalPositionY(component.transform, num); num -= component.GetHeight(); } _groupParent.GetComponent().ResetPosition(); _groupOrigin.gameObject.SetActive(value: false); } private List> CreateOrderedDisplayDataList(List displayDataList) { List> list = new List>(4); List> list2 = new List>(4); int i = 0; while (i < 4) { List list3 = displayDataList.Where((DisplayData data) => data.Difficulty == i).ToList(); if (list3.Count != 0) { if (list3.All((DisplayData data) => data.IsCleared)) { list2.Add(list3); } else { list.Add(list3); } } int num = i + 1; i = num; } list.AddRange(list2); return list; } private void OnClickItem(DisplayData displayData) { GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE); DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose(); dialogBase.SetTitleLabel(Data.SystemText.Get("Common_0021")); dialogBase.SetSize(DialogBase.Size.S); dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn); dialogBase.SetButtonText(Data.SystemText.Get("Common_0004"), Data.SystemText.Get("Common_0005")); dialogBase.SetPanelDepth(20); dialogBase.ClickSe_Btn1 = Se.TYPE.SYS_BTN_DECIDE_TRANS; dialogBase.onPushButton1 = delegate { _onDecide(displayData.Data, displayData.Difficulty); }; string text = string.Format(arg0: Data.SystemText.Get(displayData.Data.QuestNameTextId), format: Data.SystemText.Get("Puzzle_SelectDialog_0002")); if (displayData.IsCleared) { text = text + "\n" + Data.SystemText.Get("Puzzle_SelectDialog_0003"); } dialogBase.SetText(text); } private static string GetUnlockConditionText(string textId) { if (!(textId != string.Empty)) { return null; } return Data.SystemText.Get(textId); } }