using System; using Continentis.MainGame.Combat; using Lean.Pool; using UnityEngine; using UnityEngine.UI; namespace Continentis.MainGame.UI { public class CombatMainPage : UIPageBase { public RectTransform dropZone; public DrawPile drawPile; public HandPile handPile; public DiscardPile discardPile; public ExhaustPile exhaustPile; public GravePile gravePile; public TeamSwitchButton teamSwitchButton; public HandCardSelectionInterface handCardSelector; public CustomCardSelectionInterface customCardSelector; public CombatResourcesDisplayer combatResourcesDisplayer; public ActionOrderDisplayer actionOrderDisplayer; public RoundHint roundHint; public Button endActionButton; private Action currentButtonAction; protected override void Awake() { base.Awake(); endActionButton.onClick.AddListener(OnButtonClicked); // 默认绑定结束行动 SetButtonAction(CombatMainManager.Instance.EndAction, "End Action", false); } /// /// 切换按钮回调、文本和可交互状态,统一从此处管理。 /// public void SetButtonAction(Action action, string label, bool interactable) { currentButtonAction = action; endActionButton.GetComponentInChildren().text = label; endActionButton.interactable = interactable; } private void OnButtonClicked() { currentButtonAction?.Invoke(); } public void ClearAllCardViews() { drawPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject)); handPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject)); discardPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject)); exhaustPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject)); gravePile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject)); drawPile.cardViews.Clear(); handPile.cardViews.Clear(); discardPile.cardViews.Clear(); exhaustPile.cardViews.Clear(); gravePile.cardViews.Clear(); drawPile.UpdateCountText(); handPile.UpdateCountText(); discardPile.UpdateCountText(); exhaustPile.UpdateCountText(); gravePile.UpdateCountText(); } public PileBase Pile(string pileName) { switch (pileName) { case "Draw": return drawPile; case "Hand": return handPile; case "Discard": return discardPile; case "Exhaust": return exhaustPile; case "Grave": return gravePile; case "Intention": throw new NotImplementedException("Intention pile UI is in HUD, not in DeckPage."); default: throw new ArgumentOutOfRangeException(nameof(pileName), pileName, null); } } } }