public void BattleMechEngineTypeCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); Assert.Equal("Standard", battleMechDesign.Engine.EngineType); }
public void BattleMechEngineTonnageCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); Assert.Equal(300, battleMechDesign.Engine.EngineRating); }
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); }
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); }
public void BattleMechVariantNameCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); Assert.Equal("AS7-D", battleMechDesign.Variant); }
public void BattleMechTonnageCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); Assert.Equal(100, battleMechDesign.Tonnage); }
public void StoreBattleMechDesign(BattleMechDesign battleMechDesign) { if (!BattleMechDesigns.ContainsKey(battleMechDesign.Id)) { BattleMechDesigns.Add(battleMechDesign.Id, battleMechDesign); } }
public void BattleMechModelNameCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); Assert.Equal("Atlas", battleMechDesign.Model); }
public void CheckGOL1HStructure() { BattleMechDesign designGoliath = MTFReader.ReadBattleMechDesignFile(GoliathTestFile); Element element = ConvertBattletechObject.ToAlphaStrike(designGoliath); Assert.Equal(6, element.MaxStructure); }
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; }
public void CheckAS7DStructure() { BattleMechDesign designAtlas = MTFReader.ReadBattleMechDesignFile(AtlasTestFile); Element element = ConvertBattletechObject.ToAlphaStrike(designAtlas); Assert.Equal(8, element.MaxStructure); }
public void GoliathTonnageCheck() { string sFilePath = GoliathTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); _outputHelper.WriteLine(battleMechDesign.TonnageLedger); Assert.Equal(80, battleMechDesign.ComputedTonnage); }
public void CheckGOL1HMovement() { BattleMechDesign designGoliath = MTFReader.ReadBattleMechDesignFile(GoliathTestFile); Element element = ConvertBattletechObject.ToAlphaStrike(designGoliath); MovementMode m = element.GetMovementMode(""); Assert.Equal(4, m.Points); }
public void CheckAS7DMovement() { BattleMechDesign designAtlas = MTFReader.ReadBattleMechDesignFile(AtlasTestFile); Element element = ConvertBattletechObject.ToAlphaStrike(designAtlas); MovementMode m = element.GetMovementMode(""); Assert.Equal(3, m.Points); }
public void BattlemechRLLISCheck() { string sFilePath = GoliathTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); StructureLocation structure = GetBattleMechStructureLocation(battleMechDesign, "RLL"); Assert.Equal(17, structure.MaxStructurePoints); }
public void BattlemechCTISCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); StructureLocation structure = GetBattleMechStructureLocation(battleMechDesign, "CT"); Assert.Equal(31, structure.MaxStructurePoints); }
public void BattleMechRLArmorCheck() { string sFilePath = AtlasTestFile; BattleMechDesign battleMechDesign = MTFReader.ReadBattleMechDesignFile(sFilePath); ArmorFacing Facing = GetBattleMechArmorFacing(battleMechDesign, "RL"); Assert.Equal(41, Facing.ArmorPoints); }
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); }
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); }
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); }
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}"); }
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); }
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); }
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); }
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}"); }
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)); }
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); }
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); }
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); }