This commit is contained in:
SoulliesOfficial
2025-10-23 00:49:44 -04:00
parent 9b1b5ca93f
commit 61a397dd4c
9846 changed files with 2618439 additions and 793547 deletions

View File

@@ -4,7 +4,7 @@ using System.Collections.Generic;
using Continentis.MainGame.Card;
using Continentis.MainGame.Commands;
using DG.Tweening;
using SoulliesFramework.General;
using SLSFramework.General;
using UniRx;
using UnityEngine;
@@ -17,6 +17,7 @@ namespace Continentis.MainGame.Character
public DeckSubmodule(CharacterBase character) : base(character)
{
piles = new Dictionary<string, List<CardInstance>>();
piles.Add("Storage", new List<CardInstance>());
piles.Add("Hand", new List<CardInstance>());
piles.Add("Draw", new List<CardInstance>());
piles.Add("Discard", new List<CardInstance>());
@@ -28,19 +29,23 @@ namespace Continentis.MainGame.Character
public partial class DeckSubmodule
{
public void SetUpCardViews()
public void SetUpHandCardViews()
{
DrawPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.deckPage.drawPile));
HandPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.deckPage.handPile));
DiscardPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.deckPage.discardPile));
ExhaustPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.deckPage.exhaustPile));
DrawPile.ForEach(c=> c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.drawPile));
HandPile.ForEach(c=>
{
if(!c.cardLogic.playSubmodule.isDuringPlayEffect)
c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.handPile);
});
DiscardPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.discardPile));
ExhaustPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.exhaustPile));
}
public void DrawCards(int cardCount, float interval)
{
if (cardCount > DrawPile.Count)
if (cardCount > DrawPile.Count && DiscardPile.Count > 0)
{
Debug.Log("抽牌堆牌数不足,洗牌。");
Debug.Log("抽牌堆牌数不足,且弃牌堆有牌,正在洗牌...");
ReshuffleDeck();
}
@@ -62,22 +67,32 @@ namespace Continentis.MainGame.Character
public void DiscardCard(CardInstance card, float interval = 0.1f)
{
CommandQueueManager.Instance.AddCommand(new Cmd_DiscardCards(this, new List<CardInstance> { card }, interval));
CommandQueueManager.Instance.AddCommand(new Cmd_DiscardCards(card.deck, new List<CardInstance> { card }, interval));
}
public void DiscardCards(List<CardInstance> cards, float interval = 0.1f)
{
CommandQueueManager.Instance.AddCommand(new Cmd_DiscardCards(this, cards, interval));
Dictionary<DeckSubmodule, List<CardInstance>> groupedCards = cards.GroupBy(card => card.deck)
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var kvp in groupedCards)
{
CommandQueueManager.Instance.AddCommand(new Cmd_DiscardCards(kvp.Key, kvp.Value, interval));
}
}
public void ExhaustCard(CardInstance card, float interval = 0.1f)
{
CommandQueueManager.Instance.AddCommand(new Cmd_ExhaustCards(this, new List<CardInstance> { card }, interval));
CommandQueueManager.Instance.AddCommand(new Cmd_ExhaustCards(owner is PlayerHero, card.deck, new List<CardInstance> { card }, interval));
}
public void ExhaustCards(List<CardInstance> cards, float interval = 0.1f)
{
CommandQueueManager.Instance.AddCommand(new Cmd_ExhaustCards(this, cards, interval));
Dictionary<DeckSubmodule, List<CardInstance>> groupedCards = cards.GroupBy(card => card.deck)
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var kvp in groupedCards)
{
CommandQueueManager.Instance.AddCommand(new Cmd_ExhaustCards(owner is PlayerHero, kvp.Key, kvp.Value, interval));
}
}
public void ReshuffleDeck(float interval = 0.1f)
@@ -104,18 +119,25 @@ namespace Continentis.MainGame.Character
throw new Exception("Card not found in any pile.");
}
public void TransferCard(string pileName, int index, CardInstance card)
{
List<CardInstance> pile = Pile(pileName);
pile.Transfer(card, index);
card.cardLocation = new CardLocation(pileName, index);
}
public void TransferCard(string fromPileName, string toPileName, CardInstance card)
{
List<CardInstance> fromPile = Pile(fromPileName);
List<CardInstance> toPile = Pile(toPileName);
fromPile.Transfer(toPile, card);
card.currentPileName = toPileName;
card.cardLocation = new CardLocation(toPileName, toPile.IndexOf(card));
}
public void TransferCard(List<CardInstance> fromPile, List<CardInstance> toPile, CardInstance card)
{
fromPile.Transfer(toPile, card);
card.currentPileName = piles.FirstOrDefault(pilePair => pilePair.Value == toPile).Key;
card.cardLocation = new CardLocation(GetCardLocation(card, out _).Key, toPile.IndexOf(card));
}
public List<CardInstance> GetAllCards()
@@ -142,6 +164,7 @@ namespace Continentis.MainGame.Character
throw new KeyNotFoundException($"Pile '{pileName}' not found.");
}
public List<CardInstance> StoragePile => Pile("Storage");
public List<CardInstance> HandPile => Pile("Hand");
public List<CardInstance> DrawPile => Pile("Draw");
public List<CardInstance> DiscardPile => Pile("Discard");