Files
Continentis/Assets/Scripts/MainGame/UI/CombatMainPage/TeamSwitchButton.cs
2025-12-14 00:51:34 -05:00

103 lines
3.4 KiB
C#

using System;
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
using Continentis.MainGame.Combat;
using DG.Tweening;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Continentis.MainGame.UI
{
public class TeamSwitchButton : MonoBehaviour
{
public bool isTeam;
public Button button;
public TMP_Text buttonText;
public TMP_Text teamPileText;
private void Awake()
{
isTeam = false;
button.onClick.AddListener(() =>
{
if (isTeam)
{
SwitchToCurrentCharacter();
}
else
{
SwitchToTeam();
}
});
}
public void SwitchToTeam()
{
if(isTeam) return;
isTeam = true;
Sequence seq = DOTween.Sequence();
seq.Append(CombatUIManager.Instance.combatMainPage.handPile.rectTransform.DOAnchorPosY(-300f, 0.2f)
.OnComplete(() =>
{
CombatUIManager.Instance.combatMainPage.ClearAllCardViews();
CombatMainManager.Instance.characterController.playerTeam.deckSubmodule.SetUpHandCardViews();
CombatMainManager.Instance.characterController.playerTeam.deckSubmodule.GetAllCards().ForEach(card =>
{
card.user = CombatMainManager.Instance.currentCharacter;
card.RefreshCardAttributes();
buttonText.text = "Team";
UpdateTeamPileText(card.user.team);
});
}));
seq.AppendInterval(0.1f);
seq.Append(CombatUIManager.Instance.combatMainPage.handPile.rectTransform.DOAnchorPosY(80f, 0.2f));
seq.Play();
}
public void SwitchToCurrentCharacter()
{
if(!isTeam) return;
isTeam = false;
if (CombatMainManager.Instance.currentCharacter is PlayerHero playerHero)
{
Sequence seq = DOTween.Sequence();
seq.Append(CombatUIManager.Instance.combatMainPage.handPile.rectTransform.DOAnchorPosY(-300f, 0.2f)
.OnComplete(() =>
{
CombatUIManager.Instance.combatMainPage.ClearAllCardViews();
playerHero.deckSubmodule.SetUpHandCardViews();
buttonText.text = "Hero";
UpdateTeamPileText(playerHero.team);
}));
seq.AppendInterval(0.1f);
seq.Append(CombatUIManager.Instance.combatMainPage.handPile.rectTransform.DOAnchorPosY(80f, 0.2f));
seq.Play();
}
else
{
throw new Exception("当前角色不是玩家角色,无法显示卡牌。");
}
}
public void UpdateTeamPileText(CombatTeam team)
{
int currentCardCount = team.deckSubmodule.HandPile.Count;
if (isTeam)
{
gameObject.SetActive(true);
}
else
{
gameObject.SetActive(currentCardCount != 0);
}
teamPileText.text = $"{currentCardCount}/10";
}
}
}