Пример #1
0
        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));
        }
Пример #2
0
        static async Task <int> ShowCostTable(IKTRulesContext db, Faction faction)
        {
            var costTable = new CostTable(db, faction.Id);
            await costTable.PrintModelTable();

            await costTable.PrintWargearTable();

            return(0);
        }
Пример #3
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);
        }
Пример #4
0
 public CostTable(IKTRulesContext db, string factionId)
 {
     this.db        = db;
     this.factionId = factionId;
 }
Пример #5
0
        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");
        }