Пример #1
0
        public void BattleMechEngineTypeCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal("Standard", battleMechDesign.Engine.EngineType);
        }
Пример #2
0
        public void BattleMechEngineTonnageCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal(300, battleMechDesign.Engine.EngineRating);
        }
Пример #3
0
        public void TestMegaMekFiles()
        {
            string[] sFiles = Utilities.GetFiles($"{Utilities.DataDirectory}{Path.DirectorySeparatorChar}megamek-master{Path.DirectorySeparatorChar}megamek{Path.DirectorySeparatorChar}data{Path.DirectorySeparatorChar}mechfiles{Path.DirectorySeparatorChar}mechs", "*.mtf");

            int iLoadCount = 0;

            foreach (string sFile in sFiles)
            {
                try
                {
                    BattleMechDesign bmd = MTFReader.ReadBattleMechDesignFile(sFile);

                    iLoadCount++;
                }
                catch (Exception ex)
                {
                    string sText = "";
                    while (ex != null)
                    {
                        sText += ex.Message;
                        sText += "/";
                        ex     = ex.InnerException;
                    }
                    sText += Path.GetFileNameWithoutExtension(sFile);
                    _outputHelper.WriteLine(sText);
                }
            }

            Assert.Equal(sFiles.Length, iLoadCount);
        }
Пример #4
0
        public void MassCheckMegaMekFiles()
        {
            string[] sFiles     = Utilities.GetFiles($"{Utilities.DataDirectory}{Path.DirectorySeparatorChar}megamek-master{Path.DirectorySeparatorChar}megamek{Path.DirectorySeparatorChar}data{Path.DirectorySeparatorChar}mechfiles{Path.DirectorySeparatorChar}mechs", "*.mtf");
            int      iLoadCount = 0;

            foreach (string sFile in sFiles)
            {
                try
                {
                    BattleMechDesign bmd = MTFReader.ReadBattleMechDesignFile(sFile);
                    double           dComputedTonnage = bmd.ComputedTonnage;
                    if (bmd.Tonnage < dComputedTonnage || (bmd.Tonnage - dComputedTonnage > 0.5 && !Utilities.IsUndertonnageDesign(bmd)))
                    {
                        _outputHelper.WriteLine($"{bmd.Variant} {bmd.Model} rated at {bmd.Tonnage}, computed as {bmd.ComputedTonnage}");
                        _outputHelper.WriteLine(bmd.TonnageLedger);
                    }
                    else
                    {
                        iLoadCount++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception($"Error loading {sFile}", ex);
                }
            }
            _outputHelper.WriteLine($"Checked {sFiles.Length} MTF files.");
            Assert.Equal(sFiles.Length, iLoadCount);
        }
Пример #5
0
        public void BattleMechVariantNameCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal("AS7-D", battleMechDesign.Variant);
        }
Пример #6
0
        public void BattleMechTonnageCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal(100, battleMechDesign.Tonnage);
        }
Пример #7
0
 public void StoreBattleMechDesign(BattleMechDesign battleMechDesign)
 {
     if (!BattleMechDesigns.ContainsKey(battleMechDesign.Id))
     {
         BattleMechDesigns.Add(battleMechDesign.Id, battleMechDesign);
     }
 }
Пример #8
0
        public void BattleMechModelNameCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal("Atlas", battleMechDesign.Model);
        }
Пример #9
0
        public void CheckGOL1HStructure()
        {
            BattleMechDesign designGoliath = MTFReader.ReadBattleMechDesignFile(GoliathTestFile);

            Element element = ConvertBattletechObject.ToAlphaStrike(designGoliath);

            Assert.Equal(6, element.MaxStructure);
        }
Пример #10
0
        public void Configure(Design design)
        {
            BattleMechDesign battleMechDesign = design as BattleMechDesign;

            Tonnage           = Math.Ceiling(2 * battleMechDesign.Tonnage / 20) / 2D;
            CriticalSpaceMech = (int)Math.Ceiling(battleMechDesign.Tonnage / 15);
            Damage            = (int)Math.Ceiling(battleMechDesign.Tonnage / 10) + 1;
        }
Пример #11
0
        public void CheckAS7DStructure()
        {
            BattleMechDesign designAtlas = MTFReader.ReadBattleMechDesignFile(AtlasTestFile);

            Element element = ConvertBattletechObject.ToAlphaStrike(designAtlas);

            Assert.Equal(8, element.MaxStructure);
        }
Пример #12
0
        public void GoliathTonnageCheck()
        {
            string           sFilePath        = GoliathTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            _outputHelper.WriteLine(battleMechDesign.TonnageLedger);
            Assert.Equal(80, battleMechDesign.ComputedTonnage);
        }
Пример #13
0
        public void CheckGOL1HMovement()
        {
            BattleMechDesign designGoliath = MTFReader.ReadBattleMechDesignFile(GoliathTestFile);

            Element      element = ConvertBattletechObject.ToAlphaStrike(designGoliath);
            MovementMode m       = element.GetMovementMode("");

            Assert.Equal(4, m.Points);
        }
Пример #14
0
        public void CheckAS7DMovement()
        {
            BattleMechDesign designAtlas = MTFReader.ReadBattleMechDesignFile(AtlasTestFile);

            Element      element = ConvertBattletechObject.ToAlphaStrike(designAtlas);
            MovementMode m       = element.GetMovementMode("");

            Assert.Equal(3, m.Points);
        }
Пример #15
0
        public void BattlemechRLLISCheck()
        {
            string           sFilePath        = GoliathTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            StructureLocation structure = GetBattleMechStructureLocation(battleMechDesign, "RLL");

            Assert.Equal(17, structure.MaxStructurePoints);
        }
Пример #16
0
        public void BattlemechCTISCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            StructureLocation structure = GetBattleMechStructureLocation(battleMechDesign, "CT");

            Assert.Equal(31, structure.MaxStructurePoints);
        }
Пример #17
0
        public void BattleMechRLArmorCheck()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            ArmorFacing Facing = GetBattleMechArmorFacing(battleMechDesign, "RL");

            Assert.Equal(41, Facing.ArmorPoints);
        }
Пример #18
0
        public void Configure(Design design)
        {
            BattleMechDesign battleMechDesign = design as BattleMechDesign;

            int iMaceBaseState = (int)Math.Ceiling(battleMechDesign.Tonnage / 10);

            Tonnage           = (double)iMaceBaseState;
            CriticalSpaceMech = iMaceBaseState;
            Damage            = (int)Math.Ceiling(battleMechDesign.Tonnage / 4);
        }
Пример #19
0
        public void Configure(Design design)
        {
            BattleMechDesign battleMechDesign = design as BattleMechDesign;

            int iHatchetBaseStat = (int)Math.Ceiling(battleMechDesign.Tonnage / 15);

            Tonnage           = (double)iHatchetBaseStat;
            CriticalSpaceMech = iHatchetBaseStat;
            Damage            = (int)Math.Ceiling(battleMechDesign.Tonnage / 5);
        }
Пример #20
0
        public void Configure(Design design)
        {
            BattleMechDesign battleMechDesign = design as BattleMechDesign;

            double dRetractableBladeBaseStat = Math.Ceiling(2D * battleMechDesign.Tonnage / 20D) / 2D;

            Tonnage           = (double)dRetractableBladeBaseStat + 0.5D;
            CriticalSpaceMech = (int)Math.Ceiling(dRetractableBladeBaseStat) + 1;
            Damage            = (int)Math.Ceiling(battleMechDesign.Tonnage / 10);
        }
Пример #21
0
 public StructureLocation GetBattleMechStructureLocation(BattleMechDesign bmd, string sLocation)
 {
     foreach (BattleMechHitLocation bmhl in bmd.HitLocations)
     {
         if (bmhl.Name.Equals(sLocation))
         {
             return(bmhl.Structure);
         }
     }
     throw new Exception($"Location {sLocation} not found in Battlemech Design {bmd.Variant} {bmd.Model}");
 }
Пример #22
0
        public void ReadAtlasFile()
        {
            string           sFilePath        = AtlasTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal("Atlas", battleMechDesign.Model);
            Assert.Equal("AS7-D", battleMechDesign.Variant);
            Assert.Equal(100, battleMechDesign.Tonnage);
            Assert.Equal(300, battleMechDesign.Engine.EngineRating);
            Assert.Equal("Standard", battleMechDesign.Engine.EngineType);
        }
Пример #23
0
        public void ReadGoliathFile()
        {
            string           sFilePath        = GoliathTestFile;
            BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath);

            Assert.Equal("Goliath", battleMechDesign.Model);
            Assert.Equal("GOL-1H", battleMechDesign.Variant);
            Assert.Equal(80, battleMechDesign.Tonnage);
            Assert.Equal(320, battleMechDesign.Engine.EngineRating);
            Assert.Equal("Standard", battleMechDesign.Engine.EngineType);
        }
Пример #24
0
        public void BattletechValueConfirmation(BattleMechDesign battlemechDesign, BVDataPoint dataPoint)
        {
            int battlemechDesignBV = (int)battlemechDesign.BV;
            int datapointBV        = (int)dataPoint.bV;

            if (battlemechDesignBV != datapointBV)
            {
                _outputHelper.WriteLine(battlemechDesign.Ledger.RootNode.GetTree(0));
            }

            Assert.Equal(datapointBV, battlemechDesignBV);
        }
Пример #25
0
        public ArmorFacing GetBattleMechArmorFacing(BattleMechDesign bmd, string sLocation)
        {
            foreach (BattleMechHitLocation bmhl in bmd.HitLocations)
            {
                if (bmhl.ArmorFacings.ContainsKey(sLocation))
                {
                    return(bmhl.ArmorFacings[sLocation]);
                }
            }

            throw new Exception($"Location {sLocation} not found in Battlemech Design {bmd.Variant} {bmd.Model}");
        }
Пример #26
0
        public static int MaxmiumDefensiveModifier(BattleMechDesign design)
        {
            //TODO: Need to add calculations for MASC, TSM, and Stealth
            //Armor TM315
            double WalkDistance  = Math.Truncate(design.Engine.EngineRating / design.Tonnage);
            double RunDistance   = Math.Round(WalkDistance * 1.5D, 0, MidpointRounding.AwayFromZero);
            int    iRunModifier  = BattleTechNET.TotalWarfare.CombatRules.TargetMovementModifier(RunDistance);
            int    iJumpModifier = BattleTechNET.TotalWarfare.CombatRules.TargetMovementModifier((double)design.JumpMP);// + 1;


            return(Math.Max(iRunModifier, iJumpModifier));
        }
Пример #27
0
        public IDictionary <Guid, string> ListBattleMechDesigns()
        {
            Dictionary <Guid, string> retval = new Dictionary <Guid, string>();

            foreach (Guid currentBattleMechDesignKey in BattleMechDesigns.Keys)
            {
                BattleMechDesign currentBattleMechDesign = BattleMechDesigns[currentBattleMechDesignKey];
                if (!retval.ContainsKey(currentBattleMechDesign.Id))
                {
                    retval.Add(currentBattleMechDesign.Id, currentBattleMechDesign.ToString());
                }
            }

            return(retval);
        }
Пример #28
0
        public static IEnumerable <object[]> GetBVTestCases()
        {
            List <object[]> retval = new List <object[]>();
            //Load Variants
            string sDirectory = $".{Path.DirectorySeparatorChar}TestFiles{Path.DirectorySeparatorChar}MassTesting{Path.DirectorySeparatorChar}";

            if (!Directory.Exists(sDirectory))
            {
                sDirectory = $".{Path.DirectorySeparatorChar}TestFiles{Path.DirectorySeparatorChar}";
            }
            string[] mtfFiles = Utilities.GetFiles(sDirectory, "*.mtf");
            Dictionary <string, BattleTechNET.TotalWarfare.BattleMechDesign> designs = new Dictionary <string, BattleTechNET.TotalWarfare.BattleMechDesign>();

            foreach (string mtfFile in mtfFiles)
            {
                try
                {
                    BattleMechDesign design = MTFReader.ReadBattleMechDesignFile(File.OpenRead(mtfFile));


                    designs.Add($"{design.Model} {design.Variant}", design);
                }
                catch (Exception ex)
                {
                }
            }


            //Load Test Data Points
            string    sTestCaseFileName = $".{System.IO.Path.DirectorySeparatorChar}TestFiles{System.IO.Path.DirectorySeparatorChar}BVTestCases.json";
            string    sJSONFile         = System.IO.File.ReadAllText(sTestCaseFileName);
            BVTestSet testSet           = JsonSerializer.Deserialize <BVTestSet>(sJSONFile);


            foreach (BVDataPoint dataPoint in testSet.testCases)
            {
                if (designs.ContainsKey(dataPoint.ToString()))
                {
                    retval.Add(new object[] { designs[dataPoint.ToString()], dataPoint });
                }
                //Commented out to allow Github Actions to not error on this test.
                //else
                //throw new Exception($"Could not find variant {dataPoint.ToString()}");
            }


            return(retval);
        }
 /// <summary>
 /// BattleMech Size table, SO356
 /// </summary>
 /// <param name="battleMechDesign">Valid Total Warfare BattleMech Design</param>
 /// <returns>Alpha Strike Size</returns>
 static private int GetSize(BattleMechDesign battleMechDesign)
 {
     if (battleMechDesign.Tonnage < 40)
     {
         return(1);
     }
     if (battleMechDesign.Tonnage < 60)
     {
         return(2);
     }
     if (battleMechDesign.Tonnage < 80)
     {
         return(3);
     }
     return(4);
 }
Пример #30
0
        public void MassCheckMixedTechbaseMegaMekFiles()
        {
            string[] sFiles     = Utilities.GetFiles($"{Utilities.DataDirectory}{Path.DirectorySeparatorChar}megamek-master{Path.DirectorySeparatorChar}megamek{Path.DirectorySeparatorChar}data{Path.DirectorySeparatorChar}mechfiles{Path.DirectorySeparatorChar}mechs", "*.mtf");
            int      iLoadCount = 0;
            int      iMixedTechBaseMechCount = 0;

            if (sFiles == null)
            {
                return;
            }
            foreach (string sFile in sFiles)
            {
                try
                {
                    BattleMechDesign bmd = MTFReader.ReadBattleMechDesignFile(sFile);
                    if (bmd.TechnologyBase == BattleTechNET.Common.TECHNOLOGY_BASE.BOTH)
                    {
                        double dComputedTonnage = bmd.ComputedTonnage;
                        if (bmd.Tonnage < dComputedTonnage || (bmd.Tonnage - dComputedTonnage > 0.5 && !Utilities.IsUndertonnageDesign(bmd)))
                        {
                            _outputHelper.WriteLine($"{bmd.Variant} {bmd.Model} rated at {bmd.Tonnage}, computed as {bmd.ComputedTonnage}");
                            _outputHelper.WriteLine($"Located at {sFile}");
                            if (bmd.Tonnage < dComputedTonnage)
                            {
                                _outputHelper.WriteLine("Computed tonnage exceeds nominal tonnage.");
                            }
                            if (bmd.Tonnage - dComputedTonnage > 0.5)
                            {
                                _outputHelper.WriteLine("Computed tonnage more than 0.5 tons below nominal tonnage.");
                            }
                            _outputHelper.WriteLine(bmd.TonnageLedger);
                        }
                        else
                        {
                            iLoadCount++;
                        }
                        iMixedTechBaseMechCount++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception($"Error loading {sFile}", ex);
                }
            }
            _outputHelper.WriteLine($"Checked {sFiles.Length} MTF files.");
            Assert.Equal(iMixedTechBaseMechCount, iLoadCount);
        }