154 lines
4.3 KiB
C#
154 lines
4.3 KiB
C#
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<UIInfoTechTreeViewTypeMono> 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<Image>().color = TreeLineColorWhite;
|
||
else
|
||
line.GetComponent<Image>().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<Image>().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();
|
||
}
|
||
|
||
}
|
||
|
||
}
|