You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.5 KiB
178 lines
5.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using CsvHelper;
|
|
using CsvHelper.Configuration;
|
|
|
|
namespace FabStarterDeckGen
|
|
{
|
|
public class ReferenceCardRow
|
|
{
|
|
public string Identifiers;
|
|
public string Set_Identifiers;
|
|
public string Name;
|
|
public string Pitch;
|
|
public string Rarity;
|
|
}
|
|
|
|
public class ReferenceCardRowMap : ClassMap<ReferenceCardRow>
|
|
{
|
|
public ReferenceCardRowMap()
|
|
{
|
|
Map(m => m.Identifiers).Name("Identifiers");
|
|
Map(m => m.Set_Identifiers).Name("Set Identifiers");
|
|
Map(m => m.Name).Name("Name");
|
|
Map(m => m.Pitch).Name("Pitch");
|
|
Map(m => m.Rarity).Name("Rarity");
|
|
}
|
|
}
|
|
|
|
public class CardInstance
|
|
{
|
|
private Regex clean_card_name_regex = new Regex(@"[^a-zA-Z0-9_ ]+");
|
|
public CardInstance(ReferenceCardRow pBase)
|
|
{
|
|
Name = pBase.Name;
|
|
Pitch = pBase.Pitch;
|
|
Rarity = pBase.Rarity;
|
|
foreach (var part in pBase.Identifiers.Split(','))
|
|
{
|
|
if (part == "null")
|
|
continue;
|
|
Identifiers.Add(part);
|
|
}
|
|
|
|
foreach (var part in pBase.Set_Identifiers.Split(','))
|
|
{
|
|
if (part == "null")
|
|
continue;
|
|
Set_Identifiers.Add(part);
|
|
}
|
|
|
|
CleanName = clean_card_name_regex.Replace(Name, "");
|
|
|
|
}
|
|
public List<String> Identifiers = new List<String>();
|
|
public List<String> Set_Identifiers = new List<String>();
|
|
public string Name;
|
|
public string CleanName;
|
|
public string Pitch;
|
|
public string Rarity;
|
|
|
|
public bool IsPitchless => Pitch == "";
|
|
public bool IsRed => Pitch == "1";
|
|
public bool IsYellow => Pitch == "2";
|
|
public bool IsBlue => Pitch == "3";
|
|
|
|
public string CleanNameRed => CleanName + " - R";
|
|
public string CleanNameYellow => CleanName + " - Y";
|
|
public string CleanNameBlue => CleanName + " - B";
|
|
}
|
|
|
|
public class ReferenceSetRow
|
|
{
|
|
public string Identifier;
|
|
public string Name;
|
|
public string Initial_Release_Dates;
|
|
}
|
|
|
|
public class ReferenceSetRowMap : ClassMap<ReferenceSetRow>
|
|
{
|
|
public ReferenceSetRowMap()
|
|
{
|
|
Map(m => m.Identifier).Name("Identifier");
|
|
Map(m => m.Initial_Release_Dates).Name("Initial Release Dates");
|
|
Map(m => m.Name).Name("Name");
|
|
}
|
|
}
|
|
|
|
public class SetInstance
|
|
{
|
|
public SetInstance(ReferenceSetRow pBase)
|
|
{
|
|
Identifier = pBase.Identifier;
|
|
Name = pBase.Name;
|
|
var release_dates = new List<DateTime>();
|
|
foreach (var part in pBase.Initial_Release_Dates.Split(','))
|
|
{
|
|
if (part == "null")
|
|
continue;
|
|
release_dates.Add(DateTime.Parse(part));
|
|
}
|
|
|
|
if (release_dates.Count > 0)
|
|
{
|
|
release_dates.Sort();
|
|
EarliestReleaseDate = release_dates[0];
|
|
}
|
|
else
|
|
{
|
|
EarliestReleaseDate = DateTime.UnixEpoch;
|
|
}
|
|
}
|
|
|
|
public string Identifier;
|
|
public string Name;
|
|
public DateTime EarliestReleaseDate;
|
|
public bool IsPromoSet;
|
|
public bool IsDeckSet;
|
|
public bool IsClassicBattleSet;
|
|
}
|
|
|
|
public class ReferenceCardLoader
|
|
{
|
|
private List<ReferenceSetRow> ReferenceSets;
|
|
private List<ReferenceCardRow> ReferenceCards;
|
|
|
|
public List<SetInstance> Sets = new List<SetInstance>();
|
|
public List<CardInstance> Cards = new List<CardInstance>();
|
|
|
|
public void LoadSetCSV(string pFilePath)
|
|
{
|
|
var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = "\t", Encoding = Encoding.UTF8 };
|
|
using (var reader = new StreamReader(pFilePath))
|
|
using (var csv = new CsvReader(reader, config))
|
|
{
|
|
csv.Context.RegisterClassMap<ReferenceSetRowMap>();
|
|
ReferenceSets = csv.GetRecords<ReferenceSetRow>().ToList();
|
|
}
|
|
|
|
foreach (var set in ReferenceSets)
|
|
{
|
|
Sets.Add(new SetInstance(set));
|
|
}
|
|
}
|
|
|
|
public void LoadCardCSV(string pFilePath)
|
|
{
|
|
var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = "\t", Encoding = Encoding.UTF8 };
|
|
using (var reader = new StreamReader(pFilePath))
|
|
using (var csv = new CsvReader(reader, config))
|
|
{
|
|
csv.Context.RegisterClassMap<ReferenceCardRowMap>();
|
|
ReferenceCards = csv.GetRecords<ReferenceCardRow>().ToList();
|
|
}
|
|
|
|
foreach (var card in ReferenceCards)
|
|
{
|
|
Cards.Add(new CardInstance(card));
|
|
}
|
|
}
|
|
|
|
public List<CardInstance> GetCardsWithName(string pName)
|
|
{
|
|
List<CardInstance> card_list = new List<CardInstance>();
|
|
foreach (var card in Cards)
|
|
{
|
|
if(card.Name != pName)
|
|
continue;
|
|
card_list.Add(card);
|
|
}
|
|
return card_list;
|
|
}
|
|
}
|
|
}
|