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

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;
}
}
}