using System.Collections.Generic; using Logic; using Logic.Action; using UnityEngine; using TMPro; // 如果使用TextMeshPro using RuntimeData; using Logic.Multilingual; using TH1Renderer; using UnityEngine.UIElements; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; public class BottomInfoUI// : MonoBehaviour { private MapData _mapData; private Main _main; public GameObject ROBottomInfoUI; public GameObject _skillInfo; private GameObject _unitBaseInfo, _gridBaseInfo, _cityBaseInfo, _actionInfo, _unitPreviewArea, //grid/unit预览框 _gridPreviewArea, _cityPreviewArea, _unitTitle, _unitDesc, _gridTitle, _gridDesc, _cityTitle, _cityDesc, _closeButton, _actionArea, _debugGrid, _debugUnit, _debugCity; //public Tilemap borderTilemap; //public GameObject unitPrefab; //private GameObject bottomInfoRenderedUnit;//用来存放角色预览的临时对象 //动画控制数据 private float _slideDuration = 0.2f; private float _slideTime; private Vector2 _hiddenPosition = new Vector2(-530, 0); private Vector2 _visiblePosition = new Vector2(0, 0); //private Vector2[] _visiblePosition = { new Vector2(100, 93), new Vector2(100, 100) }; private Vector2 _startPos, _endPos; private float _startAlpha, _endAlpha; //private Vector2[] _size = { new Vector2(1300,300),new Vector2(1300,686)}; //private Vector2[] _size = { new Vector2(1300,686),new Vector2(1300,686)}; private bool _isAnimating = false; // 动画是否正在进行 private bool _isShow = false; public Sprite ActionBGAvailable; public Sprite ActionBGExpensive; public Sprite ActionBGUnavailable; //-------- 表现层数据UI部分 --------// public bool UIBottomInfoStatus = false; public bool UIBottomInfoIsGrid = false; public bool UIBottomInfoHideFirst = false; public uint UIBottomInfoStatusObjectId; public List ActionList; public bool HasAction; //--------- 对象的实际显示情况 ----------// public BottomInfoUI(Main main,MapData mapData) { _main = main; _mapData = mapData; ROBottomInfoUI = UIManager.Instance.ROUIManager.transform.Find("BottomInfoPanel").gameObject; _gridBaseInfo = ROBottomInfoUI.transform.Find("InfoGroup/GridBaseInfo").gameObject; _unitBaseInfo = ROBottomInfoUI.transform.Find("InfoGroup/UnitBaseInfo").gameObject; _cityBaseInfo = ROBottomInfoUI.transform.Find("InfoGroup/CityBaseInfo").gameObject; _actionInfo = ROBottomInfoUI.transform.Find("InfoGroup/ActionInfo").gameObject; _skillInfo = ROBottomInfoUI.transform.Find("InfoGroup/UnitBaseInfo/SkillIconArea").gameObject; _closeButton = ROBottomInfoUI.transform.Find("CloseButton").gameObject; // 收起按钮 _debugGrid = UIManager.Instance.ROUIManager.transform.Find("DebugPanel/PanelGroup/Selected/DebugGrid").gameObject; _debugUnit = UIManager.Instance.ROUIManager.transform.Find("DebugPanel/PanelGroup/Selected/DebugUnit").gameObject; _debugCity = UIManager.Instance.ROUIManager.transform.Find("DebugPanel/PanelGroup/Selected/DebugCity").gameObject; _unitTitle = ROBottomInfoUI.transform.Find("InfoGroup/UnitBaseInfo/Title").gameObject; _gridTitle = ROBottomInfoUI.transform.Find("InfoGroup/GridBaseInfo/Title").gameObject; _cityTitle = ROBottomInfoUI.transform.Find("InfoGroup/CityBaseInfo/Title").gameObject; _unitDesc = ROBottomInfoUI.transform.Find("InfoGroup/UnitBaseInfo/Desc").gameObject; _gridDesc = ROBottomInfoUI.transform.Find("InfoGroup/GridBaseInfo/Desc").gameObject; _cityDesc = ROBottomInfoUI.transform.Find("InfoGroup/CityBaseInfo/Desc").gameObject; _unitPreviewArea = ROBottomInfoUI.transform.Find("InfoGroup/UnitBaseInfo/PreviewArea/Grid").gameObject; _gridPreviewArea = ROBottomInfoUI.transform.Find("InfoGroup/GridBaseInfo/PreviewArea/Grid").gameObject; _cityPreviewArea = ROBottomInfoUI.transform.Find("InfoGroup/CityBaseInfo/PreviewArea/Grid").gameObject; _actionArea = ROBottomInfoUI.transform.Find("InfoGroup/ActionInfo/ActionArea").gameObject; ActionBGAvailable = Resources.Load("ArtResources/TH1UI/Common/bgAvailable"); ActionBGExpensive = Resources.Load("ArtResources/TH1UI/Common/bgExpensive"); ActionBGUnavailable = Resources.Load("ArtResources/TH1UI/Common/bgUnavailable"); Init(); } public void Update() { if (_isAnimating) { _slideTime += Time.deltaTime / _slideDuration; if (_isShow) { ROBottomInfoUI.GetComponent().anchoredPosition = Vector2.Lerp(_hiddenPosition, _visiblePosition, _slideTime); ROBottomInfoUI.GetComponent().alpha = Mathf.Lerp(0f, 1f, _slideTime); } else { ROBottomInfoUI.GetComponent().anchoredPosition = Vector2.Lerp(_visiblePosition, _hiddenPosition, _slideTime); ROBottomInfoUI.GetComponent().alpha = Mathf.Lerp(1f, 0f, _slideTime); } if (_slideTime >= 1f) { _isAnimating = false; _slideTime = 0f; if(!_isShow) ROBottomInfoUI.SetActive(false); } else return; } //如果需要显示 if (UIBottomInfoStatus) { //如果不需要下滑再上滑,且已经显示了,退出,否则就说明要更新内容 if (!UIBottomInfoHideFirst && ROBottomInfoUI.activeSelf) return; //如果需要先下滑再上滑 if (UIBottomInfoHideFirst) { //设定播放下滑动画的初始参数 if (ROBottomInfoUI.activeSelf) { _isAnimating = true; _isShow = false; _slideTime = 0f; } UIBottomInfoHideFirst = false; } else { //设定播放上滑动画的初始参数 _isAnimating = true; _isShow = true; _slideTime = 0f; UpdateInfo(); ROBottomInfoUI.SetActive(true); } } //如果需要关闭 else { //如果已经关闭了,退出 if (!ROBottomInfoUI.activeSelf) return; _isAnimating = true; _isShow = false; _slideTime = 0f; } } public void Init() { ROBottomInfoUI.GetComponent().anchoredPosition = _hiddenPosition; ROBottomInfoUI.GetComponent().alpha = 0; _isAnimating = false; ROBottomInfoUI.SetActive(false); //需要根据玩家civ替换图标 foreach (Transform childAction in _actionArea.transform) { var timg = childAction.Find("Image").GetComponent(); var ttxt = childAction.Find("Text (TMP)").GetComponent(); var actionId = childAction.GetComponent().ActionId; //如果是根据文明变化的图标,就替换。否则,暂时就不动了,就交给默认设置好的 if (!Table.Instance.ActionDataAssets.GetActionInfo(actionId, out var actionInfo)) continue; if (actionInfo == null) continue; if (actionInfo.VarientIcon) { timg.sprite = Table.Instance.QueryActionIconSprite(actionId,Main.MapData.PlayerMap.SelfPlayerData); //timg.SetNativeSize(); //childAction.Find("Image").localScale = new Vector3(0.3f, 0.3f, 0.3f); //childAction.Find("Image").localPosition = new Vector3(0f, -40f, 0f); } if (actionId.ActionType == CommonActionType.BuildWonder) { Table.Instance.GridAndResourceDataAssets.GetWonderInfoByType(actionId.WonderType, _mapData.PlayerMap.SelfPlayerData,out var c); timg.sprite = c.Sprite; MultilingualManager.Instance.SetUIText(ttxt, c.Name); //childAction.Find("Image").localScale = new Vector3(0.2f, 0.2f, 0.2f); //childAction.Find("Image").localPosition = new Vector3(0f, -130f, 0f); } } //监听所有的Action按钮 ActionAreaClickHandler(); _closeButton.GetComponent