// 文件位置: Assets/Scripts/TH1_UI/View/Announce/UIInteractionCityUpgradeItem.cs using System; using System.Collections.Generic; using System.Net.Mime; using System.Text; using Logic.Action; using Logic.Multilingual; using RuntimeData; using TH1_Logic.Action; using TH1_Logic.Core; using TH1_Logic.HeroTask; using TH1_UI.HintUI; using TH1Resource; using TMPro; using UI.HintUI; using Unity.VisualScripting; using UnityEditor.Rendering; using UnityEngine; using UnityEngine.UI; namespace TH1_UI.View.Info { public class UIInfoTechTreeCircleMono : MonoBehaviour { [Header("会响应玩家交互的模块")] public Button ClickButton; public HintTrigger HintTrigger; [Header("需要每局游戏开始初始化的模块")] public GameObject Group1; public List Group1_Action; public GameObject Group2; public List Group2_Action; public GameObject Group3; public List Group3_Action; public TextMeshProUGUI Title; [Header("需要每次打开界面都刷新的模块")] public Image BG; public CanvasGroup BGCanvasGroup; public Image CircleBG; public GameObject CostBar; public TextMeshProUGUI CostText; public Color CostBlue; public Color CostRed; public Color CircleGray; public Color CircleYellow; public void SetContent(TechInfo techInfo,Action techClickCallback) { if (techInfo == null) return; //Step #1 根据atomList数量 确定采用哪种显示结构 List techListMono = techInfo.TechAtomList.Count switch { 1 => Group1_Action, 2 => Group2_Action, _ => Group3_Action, }; Group1.SetActive(false); Group2.SetActive(false); Group3.SetActive(false); switch( techInfo.TechAtomList.Count) { case 1 : Group1.SetActive(true); break; case 2:Group2.SetActive(true); break; default:Group3.SetActive(true); break; } //每个小图标单独设置 int rk = 0; foreach (var atom in techInfo.TechAtomList) { if (techListMono.Count <= rk) break; if(!Table.Instance.TechDataAssets.GetTechAtomInfo(atom, out var info))continue; SetAtomContent(info,techListMono[rk]); rk++; } MultilingualManager.Instance.SetUIText(Title,techInfo.TechName); if (techClickCallback != null) { ClickButton.onClick.RemoveAllListeners(); ClickButton.onClick.AddListener(()=> { techClickCallback.Invoke(techInfo.TechType); }); } } private void SetAtomContent(TechAtomInfo info,Image smallCircle) { var civEnum = Main.MapData.PlayerMap.SelfPlayerData.CivEnum; var forceEnum = Main.MapData.PlayerMap.SelfPlayerData.ForceEnum; if (info.UseActionSprite) { if (info.TechActions.Count == 0) return; var t = info.TechActions[0]; if(Table.Instance.ActionDataAssets.GetActionInfo(t, out var actionInfo)) smallCircle.sprite = actionInfo.GetIcon(civEnum, forceEnum,GridSpType.None); else { Debug.Log($"actionInfo Wrong is {t.ActionType} "); } } else smallCircle.sprite = info.IconContainer.GetIcon(civEnum,forceEnum); IconSizingUtility.SetIconSize(smallCircle,info.iconViewSizeType); } public void RefreshStatus(TechInfo techInfo) { var player = Main.MapData.PlayerMap.SelfPlayerData; //Step #1 设置costbar CostBar.SetActive(false); //Step #2 先处理已经学会的 if (player.TechTree.CheckIfHasTech(techInfo.TechType)) { BG.sprite = ResourceCache.Instance.SpriteCache.CommonBG_CircleGreen; BGCanvasGroup.alpha = 1; CircleBG.color = CircleYellow; CostBar.SetActive(false); return; } //Step #3 处理当前可以学习的 bool fatherResearched = false; foreach(var t in techInfo.FatherTechList) if (player.TechTree.CheckIfHasTech(t)) { fatherResearched = true; break; } if (fatherResearched) { CostBar.SetActive(true); var cost = player.GetTechCost(techInfo); CostText.text = cost.ToString(); CostText.color = player.PlayerCoin + player.PlayerTechPoint < cost ? CostRed : CostBlue; BG.sprite = ResourceCache.Instance.SpriteCache.CommonBG_CircleBlue; BGCanvasGroup.alpha = 1; CircleBG.color = CircleYellow; return; } //Step #4 处理无法学习的情况 BG.sprite = ResourceCache.Instance.SpriteCache.CommonBG_CircleGrey; BGCanvasGroup.alpha = 0.3f; CircleBG.color = CircleGray; } public void SetContentForCheckPanel(TechAtom techAtom,bool learned = false) { CostBar.SetActive(false); Group1.SetActive(true); Group2.SetActive(false); Group3.SetActive(false); if (!Table.Instance.TechDataAssets.GetTechAtomInfo(techAtom, out var info)) return; var player = Main.MapData.PlayerMap.SelfPlayerData; Group1_Action[0].sprite = info.GetIcon(player.CivEnum, player.ForceEnum, GridSpType.None); IconSizingUtility.SetIconSize(Group1_Action[0],info.iconViewSizeType); BG.sprite = learned ? ResourceCache.Instance.SpriteCache.CommonBG_CircleGreen:ResourceCache.Instance.SpriteCache.CommonBG_CircleBlue; BGCanvasGroup.alpha = 1; CircleBG.color = CircleYellow; MultilingualManager.Instance.SetUIText(Title,info.TechAtomName); HintTrigger.DataProvider.HintDataType = HintDataType.TechAtomHintData; HintTrigger.DataProvider.TechAtom = techAtom; } public void OnClose() { } } }