TH1/Unity/Assets/Scripts/UI/CityUpgradeActionUI.cs
2025-07-30 18:03:37 +08:00

109 lines
3.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Animancer;
using System.Collections;
using System.Collections.Generic;
using Logic;
using Logic.Action;
using UnityEngine;
using RuntimeData;
using UI;
public class CityUpgradeActionUI
{
public MapData MapData;
private Main _main;
public CityLogic CityLogic;
private GameObject _roCityUpgradeActionUI;
private GameObject _actionArea;
private CityData _cityData;
public CityUpgradeActionUI(Main main,MapData mapData)
{
MapData = mapData;
_main = main;
_roCityUpgradeActionUI = UIManager.Instance.ROUIManager.transform.Find("CityUpgradeActionPanel").gameObject;;
_actionArea = _roCityUpgradeActionUI.transform.Find("ActionArea").gameObject;
_roCityUpgradeActionUI.SetActive(false);
ActionAreaClickHandler();
}
// Update is called once per frame
public void Update()
{
//如果当前面板已经显示了那么return
if (_roCityUpgradeActionUI.activeSelf)
return;
foreach (var cityData in MapData.CityMap.CityList)
if (MapData.GetPlayerDataByCityId(cityData.Id,out var playerData)
&& playerData == MapData.PlayerMap.SelfPlayerData && cityData.CityLevelUpPoint)
{
_cityData = cityData;
UpdateUIInfo();
FadeIn();
break;
}
}
void UpdateUIInfo()
{
foreach (Transform act in _actionArea.transform)
{
act.gameObject.SetActive(false);
var fakeActionId = act.GetComponent<ActionIdMono>().ActionId;
var actionDict = ActionLogicFactory.GetActionLogicDict();
foreach (var action in actionDict.Values)
{
var commonActionParams = new CommonActionParams(mapData:MapData,playerData:MapData.PlayerMap.SelfPlayerData,
cityData:_cityData,mainObjectType:MainObjectType.City);
if(ActionLogicFactory.GetActionLogic(fakeActionId).CheckCan(commonActionParams))
act.gameObject.SetActive(true);
}
}
}
public void ActionAreaClickHandler()//让每个action挂一个点击监听事件
{
ActionClickedEvent[] items = _actionArea.GetComponentsInChildren<ActionClickedEvent>(true);//这里设为true会遍历所有inactive的对象
foreach (ActionClickedEvent item in items)
{
item.OnItemClicked += ActionAreaClicked;
}
}
public void FadeOut()
{
AnimancerComponent animancer = _roCityUpgradeActionUI.GetComponent<AnimancerComponent>();
AnimationClip animationB = Resources.Load<AnimationClip>("Animations/UI/CityUpgradeActionPanelFadeOut");
animancer.Play(animationB);
Timer.Instance.TimerRegister(_roCityUpgradeActionUI, OnFadeOutComplete, 0.2f);
}
public void OnFadeOutComplete()
{
_roCityUpgradeActionUI.SetActive(false);
}
public void FadeIn()
{
_roCityUpgradeActionUI.SetActive(true);
_roCityUpgradeActionUI.GetComponent<CanvasGroup>().alpha = 0;
AnimancerComponent animancer = _roCityUpgradeActionUI.GetComponent<AnimancerComponent>();
AnimationClip animationB = Resources.Load<AnimationClip>("Animations/UI/CityUpgradeActionPanelFadeIn");
animancer.Play(animationB);
}
public void ActionAreaClicked(GameObject clickedItem)
{
var fakeActionId = clickedItem.GetComponent<ActionIdMono>().ActionId;
var commonActionParams = new CommonActionParams(mapData:MapData,playerData:MapData.PlayerMap.SelfPlayerData,
cityData:_cityData,mainObjectType:MainObjectType.City);
if(ActionLogicFactory.GetActionLogic(fakeActionId).Execute(commonActionParams, false))
FadeOut();
}
}