using Animancer; using System.Collections; using System.Collections.Generic; using Logic; using Logic.Action; using UnityEngine; using RuntimeData; 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().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(true);//这里设为true,会遍历所有inactive的对象 foreach (ActionClickedEvent item in items) { item.OnItemClicked += ActionAreaClicked; } } public void FadeOut() { AnimancerComponent animancer = _roCityUpgradeActionUI.GetComponent(); AnimationClip animationB = Resources.Load("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().alpha = 0; AnimancerComponent animancer = _roCityUpgradeActionUI.GetComponent(); AnimationClip animationB = Resources.Load("Animations/UI/CityUpgradeActionPanelFadeIn"); animancer.Play(animationB); } public void ActionAreaClicked(GameObject clickedItem) { var fakeActionId = clickedItem.GetComponent().ActionId; var commonActionParams = new CommonActionParams(mapData:MapData,playerData:MapData.PlayerMap.SelfPlayerData, cityData:_cityData,mainObjectType:MainObjectType.City); if(ActionLogicFactory.GetActionLogic(fakeActionId).Execute(commonActionParams)) FadeOut(); } }