Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 56 additions & 30 deletions MyModTest/BaseTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using Handelabra.Sentinels.Engine.Controller.PromoCardUnlockControllers;
using System.Reflection;

namespace Handelabra.Sentinels.UnitTest
{
Expand Down Expand Up @@ -500,36 +501,61 @@ protected GameController SetupGameController(Game game)

IEnumerable<KeyValuePair<string, string>> HandleGetHeroCardsInBoxRequest(Func<string, bool> identifierCriteria, Func<string, bool> turnTakerCriteria)
{
var result = new List<KeyValuePair<string, string>>();

var modDefs = ModHelper.GetAllPromoDefinitions();

// Find all the playable hero character cards in the box (including other sizes of Sky-Scraper)
var availableHeroes = DeckDefinition.AvailableHeroes;
foreach (var heroTurnTaker in availableHeroes.Where(turnTakerCriteria))
{
var heroDefinition = DeckDefinitionCache.GetDeckDefinition(heroTurnTaker);

var defs = heroDefinition.GetAllCardDefinitions();

// Also include mod cards
defs = defs.Concat(modDefs.Where(c => c.ParentDeck.QualifiedIdentifier == heroTurnTaker));

foreach (var cardDef in defs)
{
// Ignore non-real cards (Sentinels Intructions) and cards that do not start in play (Sky-Scraper sizes)
if (cardDef.IsCharacter
&& cardDef.IsRealCard
&& identifierCriteria(cardDef.QualifiedPromoIdentifierOrIdentifier))
{
// It's in the box!
var kvp = new KeyValuePair<string, string>(heroTurnTaker, cardDef.QualifiedPromoIdentifierOrIdentifier);
Console.WriteLine("In the box {0}: {1}", result.Count, kvp.Value);
result.Add(kvp);
}
}
}

// Get the assemblies added to the mod helper
FieldInfo assemblyField = typeof(ModHelper).GetField("_assemblies", BindingFlags.NonPublic | BindingFlags.Static);
var modAssemblies = (Dictionary<string, Assembly>)assemblyField.GetValue(null);

var modDecks = new List<string>();
foreach (var assembly in modAssemblies)
{
var resourceNames = assembly.Value.GetManifestResourceNames();
foreach (var resource in resourceNames)
{
var decklistName = resource;
var index = decklistName.IndexOf("DeckList.json");
if (index < 0) continue; // Not a decklist
decklistName = decklistName.Remove(index);
decklistName = decklistName.Replace(".DeckLists", "");

string identifier;
ModHelper.GetNamespaceFromQualifiedIdentifier(decklistName, out identifier);

modDecks.Add($"{assembly.Key}.{identifier}");
}
}

var result = new List<KeyValuePair<string, string>>();

var modDefs = ModHelper.GetAllPromoDefinitions();

// Find all the playable hero character cards in the box (including other sizes of Sky-Scraper)
var availableHeroes = DeckDefinition.AvailableHeroes.Union(modDecks);
foreach (var heroTurnTaker in availableHeroes.Where(turnTakerCriteria))
{
var heroDefinition = DeckDefinitionCache.GetDeckDefinition(heroTurnTaker);
if (!heroDefinition.IsHero) continue; // Only hero decks

var defs = heroDefinition.GetAllCardDefinitions();

// Also include mod cards
defs = defs.Concat(modDefs.Where(c => c.ParentDeck.QualifiedIdentifier == heroTurnTaker));

foreach (var cardDef in defs)
{
// Ignore non-real cards (Sentinels Intructions) and cards that do not start in play (Sky-Scraper sizes)
if (cardDef.IsCharacter
&& cardDef.IsRealCard
&& identifierCriteria(cardDef.QualifiedPromoIdentifierOrIdentifier)
)
{
// It's in the box!
var kvp = new KeyValuePair<string, string>(heroTurnTaker, cardDef.QualifiedPromoIdentifierOrIdentifier);
Console.WriteLine("In the box {0}: {1}", result.Count, kvp.Value);
result.Add(kvp);
}
}
}

return result;
}

Expand Down