Files
Continentis/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectHandCards.cs

80 lines
3.1 KiB
C#
Raw Normal View History

2025-10-23 00:49:44 -04:00
using System;
using System.Collections.Generic;
using System.Linq;
using Continentis.MainGame.Commands;
using Continentis.MainGame.UI;
using SLSFramework.General;
namespace Continentis.MainGame.Card
{
public class CardLogicComponent_SelectHandCards : CardLogicComponentBase
{
private Func<CardInstance, bool> selectCondition;
private Action<CardInstance> selectEffect;
public List<CardInstance> selectedCards;
public CardLogicComponent_SelectHandCards SetCondition(Func<CardInstance, bool> condition)
{
selectCondition = condition;
return this;
}
public CardLogicComponent_SelectHandCards SetEffect(Action<CardInstance> effect)
{
selectEffect = effect;
return this;
}
/// <summary>
/// 添加选择手牌的指令
/// </summary>
/// <param name="commandGroup">目标指令组</param>
/// <param name="title">选择卡牌的描述性标题</param>
2025-12-11 17:25:49 -05:00
/// <param name="includeTeam">是否包含队伍内的卡牌,如果不包含,则强制切换到角色手牌,且禁用切换按钮</param>
2025-10-23 00:49:44 -04:00
/// <param name="maxSelection">最大选择数量</param>
/// <param name="forceMax">是否强制选择最大数量</param>
2025-12-11 17:25:49 -05:00
public void AddSelectionCommands(ref CommandGroup commandGroup, string title, int maxSelection, bool forceMax = false, bool includeTeam = false)
2025-10-23 00:49:44 -04:00
{
selectedCards = new List<CardInstance>();
HandCardSelectionInterface handCardSelector = CombatUIManager.Instance.combatMainPage.handCardSelector;
commandGroup.AddCommand(new Cmd_Function(() =>
{
2025-11-15 12:17:34 -05:00
handCardSelector.Setup(title, mainLogic.card, maxSelection, selectCondition, forceMax);
2025-12-11 17:25:49 -05:00
if (!includeTeam)
{
CombatUIManager.Instance.combatMainPage.teamSwitchButton.SwitchToCurrentCharacter();
CombatUIManager.Instance.combatMainPage.teamSwitchButton.button.interactable = false;
}
2025-10-23 00:49:44 -04:00
}));
commandGroup.AddCommand(new Cmd_WaitForUI(handCardSelector));
commandGroup.AddCommand(new Cmd_Function(() =>
{
selectedCards = handCardSelector.selectedCards.ToList();
selectedCards.ForEach(selectEffect);
2025-12-11 17:25:49 -05:00
if (!includeTeam)
{
CombatUIManager.Instance.combatMainPage.teamSwitchButton.button.interactable = true;
}
2025-10-23 00:49:44 -04:00
}));
}
2025-10-31 10:02:30 -04:00
/// <summary>
/// 添加选择手牌的指令无UI直接选择符合条件的卡牌
/// </summary>
/// <param name="commandGroup">目标指令组</param>
public void AddSelectionCommands(ref CommandGroup commandGroup)
{
selectedCards = user.deckSubmodule.HandPile.Filtered(selectCondition).ToList();
commandGroup.AddCommand(new Cmd_Function(() =>
{
selectedCards.ForEach(selectEffect);
}));
}
2025-10-23 00:49:44 -04:00
}
}