static void PrintWarGearOption(IKTRulesContext db, WarGearOption option) { Console.Write($"[{option.Operation}]: "); var tokens = (new WargearOption.Tokenizer()).Tokenize(option.Operation); var op = WargearOption.OperationParser.Operation.Parse(tokens); Console.WriteLine(op.ToString(x => db.Weapons.Find(x)?.NameEn ?? x)); }
static async Task <int> ShowCostTable(IKTRulesContext db, Faction faction) { var costTable = new CostTable(db, faction.Id); await costTable.PrintModelTable(); await costTable.PrintWargearTable(); return(0); }
static async Task <int> ShowUnitTable(IKTRulesContext db, Model unit) { Console.WriteLine($"\n== {unit.NameEn} =="); var table = new ConsoleTables.ConsoleTable("Name", "M", "WS", "BS", "S", "T", "W", "A", "Ld", "Sv", "Max"); foreach (var profile in unit.ModelProfiles) { table.AddRow( profile.NameEn, profile.Movement.ToString() + '"', profile.WeaponSkill.ToString() + '+', profile.BallisticSkill.ToString() + '+', profile.Strength, profile.Toughness, profile.Wounds, profile.Attacks, profile.Leadership, profile.Save.ToString() + '+', profile.MaximumNumber > 0 ? profile.MaximumNumber.ToString() : "-" ); } table.Configure(o => o.EnableCount = false); table.Write(); var weapons = unit.ModelWeapons.Select(w => w.Weapon.NameEn); Console.WriteLine($"This model is armed with: {string.Join(", ", weapons)}"); /* WARGEAR OPTIONS */ if (unit.WarGearOptions.Count > 0 || unit.ModelProfiles.Any(mp => mp.WarGearOptions.Count > 0)) { Console.WriteLine("\n=== Wargear Options ==="); foreach (var option in unit.WarGearOptions) { PrintWarGearOption(db, option); } foreach (var modelProfile in unit.ModelProfiles) { if (modelProfile.WarGearOptions.Count == 0) { continue; } Console.WriteLine($" - {modelProfile.NameEn}"); foreach (var option in modelProfile.WarGearOptions) { PrintWarGearOption(db, option); } } } /* ABILITIES */ Console.WriteLine("\n=== Abilities ==="); // faction abilities foreach (var ability in db.Factions.Where(f => f.Id == unit.FactionId).Include(f => f.Abilities).First().Abilities) { Console.WriteLine($"*{ability.NameEn}*: {ability.DescriptionEn}"); } // model abilities foreach (var ability in unit.Abilities) { Console.WriteLine($"*{ability.NameEn}*: {ability.DescriptionEn}"); } // model profile abilities foreach (var modelProfile in unit.ModelProfiles) { if (modelProfile.Abilities.Count == 0) { continue; } Console.WriteLine($" - {modelProfile.NameEn}"); foreach (var ability in modelProfile.Abilities) { Console.WriteLine($"*{ability.NameEn}*: {ability.DescriptionEn}"); } } /* PSYKER */ var psykers = unit.ModelProfiles.Where(mp => mp.NumberOfKnownPsychics > 0 || mp.NumberOfPsychicsManifestationPerRound > 0 || mp.NumberOfPsychicsDenialPerRound > 0); if (psykers.Count() > 0) { Console.WriteLine("\n=== Psyker ==="); foreach (var mp in psykers) { Console.WriteLine($"{mp.NameEn}: Cast {mp.NumberOfPsychicsManifestationPerRound}, Deny {mp.NumberOfPsychicsDenialPerRound}, Know {mp.NumberOfKnownPsychics}"); foreach (var psychic in mp.Psychics) { Console.WriteLine($" - {psychic.NameEn}"); } // TODO: psybolt? Or like, does everyone know that? } } /* SPECIALISTS */ Console.WriteLine("\n=== Specialists ==="); foreach (var mp in unit.ModelProfiles) { Console.WriteLine($"{mp.NameEn}: {string.Join(", ", mp.Specialists.Select(s => s.Specialist.NameEn))}"); } /* KEYWORDS */ Console.WriteLine("\n=== Keywords ==="); Console.WriteLine(unit.KeywordsEn); return(0); }
public CostTable(IKTRulesContext db, string factionId) { this.db = db; this.factionId = factionId; }
public static void ImportJSON( IKTRulesContext db, RulesProviders.RulesProvider rulesProvider) { var rules = rulesProvider.getJSON(); // factions are the only ones that aren't lists and we need the IDs var factionToId = new Dictionary <string, string>(); int nrows = 0; if (rules.ContainsKey("faction")) // tests don't always include factions { foreach (var kv in rules["faction"]) { string faction = kv.Key; Faction info = JsonConvert.DeserializeObject <Faction>(kv.Value); factionToId[faction] = info.Id; db.Factions.Add(info); } nrows = db.SaveChanges(); } Debug.WriteLine($"Saved {nrows} factions"); // import everything else // global: no dependencies ImportType(db.Phases, rules, "phases"); ImportType(db.Specialists, rules, "specialists"); ImportType(db.WeaponTypes, rules, "weapon_types"); // global: depends on specialists ImportType(db.Powers, rules, "powers"); // global: depends on weapon_types ImportType(db.Weapons, rules, "weapons"); // depends on specialists, weapons ImportType(db.Models, rules, "models", (faction, model) => { model.FactionId = factionToId[faction]; return(model); }); // depends on models ImportType(db.Abilities, rules, "abilities", (faction, ability) => { if (ability.ModelId == null && ability.ModelProfileId == null) { ability.FactionId = factionToId[faction]; } return(ability); }); ImportType(db.Psychics, rules, "psychics"); ImportType(db.Traits, rules, "traits"); // depends on models, specialists ImportType(db.Tactics, rules, "tactics", (faction, tactic) => { tactic.FactionId = factionToId[faction]; return(tactic); }); // TODO make sure we didn't miss anything nrows = db.SaveChanges(); Console.WriteLine($"Saved {nrows} other rows"); }