109 lines
3.8 KiB
C#
109 lines
3.8 KiB
C#
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();
|
||
|
||
}
|
||
|
||
|
||
}
|