using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; using UnityEngine.UIElements; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; using Toggle = UnityEngine.UI.Toggle; using PhxhSDK; using Framework; using Cysharp.Threading.Tasks; using Gameplay.Common; using cfg.VihecleCultivateCfg; using Gameplay.Net; using Gameplay; public class UI_VehicleTechTreeController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_Bg; public Image Image_LeftPanelBg; public Button Button_Back; public TMP_Text Text_Back; public Toggle Toggle_0; public Toggle Toggle_1; public Toggle Toggle_2; public Toggle Toggle_3; public Toggle Toggle_4; public Toggle Toggle_5; public Image Image_TitleIcon; public TMP_Text Text_Title; public TMP_Text Text_TitleEn0; public TMP_Text Text_TitleEn1; public PhxhScrollView ScrollView_TechTree; ///Auto Gen End/// VehicleType curType = VehicleType.None; VehicleType CurType { get { return curType; } set { curType = value; Text_Title.text = "TechTree_" + curType.ToString(); } } List Toggles; Dictionary TreePrefabs;//= new(); public async static UniTask Open(object data = null) { return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_VehicleTechTree, data); } // deal with input data public override void PreLoad(object data = null) { TreePrefabs = new Dictionary(); var VehicleTypeCount = (int)VehicleType.Max - 1; for (int i = 0; i < VehicleTypeCount; i++) { var type = (VehicleType)(i + 1); var path = string.Format(UIManager.UI_PREFAB_PATH, "Interface_Vehicle/TechTree/" + type.ToString() + "_0"); PostPreload(path).Forget(); } } // Use this for initialization public override void OnInit() { //bind UI GameObj UI_VehicleTechTreeBinder.GetComponents(this); ButtonBind(); var currencyList = GetComponent("UI_CurrencyList"); currencyList.SetData(GLConfig.Inst.data.DiamondItemId, GLConfig.Inst.data.GoldItemId); Toggles = new List { Toggle_0, Toggle_1, Toggle_2, Toggle_3, Toggle_4, Toggle_5 }; var VehicleTypeCount = (int)VehicleType.Max - 1; for (int i = 0; i < VehicleTypeCount; i++) { var toggle = Toggles[i]; var type = (VehicleType)(i + 1); toggle.onValueChanged.AddListener((isOn) => OnToggleValueChanged(toggle, type, isOn)); SetTreePrefab(type); } for (int i = VehicleTypeCount; i < Toggles.Count; i++) { Toggles[i].gameObject.SetActive(false); } Toggles[0].isOn = true; } //invoke when open window protected override void OnShowWindow(object data = null) { var currencyList = GetComponent("UI_CurrencyList"); currencyList.Refresh(); } //invoke when reload window protected override void OnReloadWindow(object data = null) { } //invoke when close window protected override void OnHideWindow() { } //invoke when destroy public override void OnRelease() { base.OnRelease(); } void SetTreePrefab(VehicleType type) { GameObject uiPrefab = null; var path = string.Format(UIManager.UI_PREFAB_PATH, "Interface_Vehicle/TechTree/" + type.ToString() + "_0"); var res = GetPreLoadResult(path); if (res != null) uiPrefab = GameObject.Instantiate(GetPreLoadResult(path), ScrollView_TechTree.content, false); TreePrefabs.Add(type, uiPrefab); BindTreeButton(uiPrefab, type); } void OnToggleValueChanged(Toggle changeToggle, VehicleType type, bool isOn) { if (isOn) { foreach (var toggle in Toggles) { if (toggle != changeToggle) { toggle.isOn = false; } } CurType = type; if (TreePrefabs.TryGetValue(type, out GameObject go) && go != null) { go.SetActive(true); RefreshTreeContent(go, type); } } else { var isOnCnt = 0; foreach (var toggle in Toggles) { if (toggle.isOn) { isOnCnt++; } } if (isOnCnt == 0) { changeToggle.isOn = true; return; } if (TreePrefabs.TryGetValue(type, out GameObject go) && go != null) go.SetActive(false); } } void BindTreeButton(GameObject Tree, VehicleType type) { if (Tree == null) return; var root = VehicleCultivateManager.Instance.GetVehicleForest(type); Queue queue = new Queue(); foreach (var child in root.VehicleChildren) { var node = VehicleCultivateManager.Instance.Get(child) as VehicleTreeNode; queue.Enqueue(node); } while (queue.Count > 0) { var node = queue.Dequeue(); Transform childGO = Tree.transform.Find("v_" + node.ID); if (childGO == null) { Debug.LogError("Can't find node " + node.ID); continue; } else { var data = Actor.Instance.Character.GetVehicleDevelopment(node.ID); Button btn = CommonUtils.GetComponent