using System; using System.Collections.Generic; using Animancer; using Logic; using Logic.Action; using Logic.Audio; using Logic.CrashSight; using Logic.Multilingual; using RuntimeData; using TH1_Core.Events; using TH1_Logic.Core; using TH1_UI.Components; using TH1_UI.HintUI; using TH1Resource; using TMPro; using UI.HintUI; using UnityEngine; using UnityEngine.UI; //用于匹配科技树视觉位置的enum标记 public enum TechTreeCircleViewType { t1,t2,t3,t4,t5,t11,t12,t21,t22,t31,t32,t41,t42,t51,t52,t110,t120,t210,t220,t310,t320,t410,t420,t510,t520 } namespace TH1_UI.View.Info { public class UIInfoTechTreeView : Base.View { public Button closeButton; public ViDelegateAssisstant.Dele OnBtnCloseClick; [System.Serializable] public class TechTreeCirclePair { public TechTreeCircleViewType ViewType; public UIInfoTechTreeCircleMono CircleMono; } public List< TechTreeCirclePair > TechTreeCircleMonoList; private CivEnum _showCivEnum = CivEnum.Common; private ForceEnum _showForceEnum = ForceEnum.Common; [Header("TreeLine相关")] public List treeLineList; public Color TreeLineColorYellow; public Color TreeLineColorGray; public Color TreeLineColorWhite; [Header("子窗口相关")] public UIInfoTechTreeCheckPanelMono CheckPanel; protected override void InitStart() { base.InitStart(); closeButton.onClick.RemoveAllListeners(); closeButton.onClick.AddListener(() => { OnBtnCloseClick.Invoke(); }); CheckPanel.InitStart(RefreshStatus); } public bool InitAllTechCircle() { //Step #1 获得当前player和playerInfo var viewPlayer = Main.MapData.PlayerMap.SelfPlayerData; if (viewPlayer == null || !Table.Instance.PlayerDataAssets.GetPlayerInfo(viewPlayer, out var playerInfo)) { LogSystem.LogError("UIInfoTechTreeView.InitAllTechCircle(): viewPlayer or playerInfo is null"); return false; } //Step #2 foreach (var tech in playerInfo.TechPool) { if (!Table.Instance.TechDataAssets.GetTechInfo(tech, out var techInfo)) continue; foreach(var techCircleMonoPair in TechTreeCircleMonoList) if (techCircleMonoPair.ViewType == techInfo.TechTreeCircleViewType) { techCircleMonoPair.CircleMono.SetContent(techInfo,OnCircleClick); break; } } return true; } public void RefreshStatus() { //Step #1 获得当前player和playerInfo var viewPlayer = Main.MapData.PlayerMap.SelfPlayerData; if (viewPlayer == null || !Table.Instance.PlayerDataAssets.GetPlayerInfo(viewPlayer, out var playerInfo)) { LogSystem.LogError("UIInfoTechTreeView.InitAllTechCircle(): viewPlayer or playerInfo is null"); return; } //Step #2 处理每个circle foreach (var tech in playerInfo.TechPool) { if (!Table.Instance.TechDataAssets.GetTechInfo(tech, out var techInfo)) continue; foreach(var techCircleMonoPair in TechTreeCircleMonoList) if (techCircleMonoPair.ViewType == techInfo.TechTreeCircleViewType) { techCircleMonoPair.CircleMono.RefreshStatus(techInfo); break; } } //Step #3 处理每个TreeLine和TreeNode foreach (var line in treeLineList) { if (line.IsNode) line.GetComponent().color = TreeLineColorWhite; else line.GetComponent().color = TreeLineColorYellow; } foreach (var tech in playerInfo.TechPool) { if (viewPlayer.TechTree.CheckIfTechCanLearn(tech) || viewPlayer.TechTree.CheckIfHasTech(tech)) continue; if (!Table.Instance.TechDataAssets.GetTechInfo(tech, out var techInfo)) continue; foreach (var line in treeLineList) if (line.viewType == techInfo.TechTreeCircleViewType) line.GetComponent().color = TreeLineColorGray; } } public void SetContent() { var player = Main.MapData.PlayerMap.SelfPlayerData; //Step #1 开局初始化 如果目前科技树上的circle已经是上一局的老版本,或者这是第一次打开科技树 if(_showCivEnum != player.CivEnum || _showForceEnum != player.ForceEnum) InitAllTechCircle(); RefreshStatus(); //Step #6 设置BGM //AudioManager.Instance.PlayMusic(info.MusicName,1f,2f,true); } public void OnCircleClick(TechType techType) { CheckPanel.Open(techType); } public void CloseView() { AudioManager.Instance.StopMusic(); } } }