From 9489d660c4d0da65824d089c6d89afa06518fe6e Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 20 Dec 2023 23:17:45 +0100 Subject: [PATCH 1/2] Separate methods for exact weight and rounded weight; show exact weight in MML construction --- .../verifier/TestAdvancedAerospace.java | 2 +- .../src/megamek/common/verifier/TestAero.java | 2 +- .../common/verifier/TestBattleArmor.java | 2 +- .../megamek/common/verifier/TestEntity.java | 34 ++++++++++++++----- .../megamek/common/verifier/TestInfantry.java | 5 ++- .../common/verifier/TestProtomech.java | 4 +-- .../common/verifier/TestSmallCraft.java | 2 +- .../common/verifier/TestSupportVehicle.java | 7 +++- 8 files changed, 40 insertions(+), 18 deletions(-) diff --git a/megamek/src/megamek/common/verifier/TestAdvancedAerospace.java b/megamek/src/megamek/common/verifier/TestAdvancedAerospace.java index 56e7b25428e..1c51b9a4d0d 100644 --- a/megamek/src/megamek/common/verifier/TestAdvancedAerospace.java +++ b/megamek/src/megamek/common/verifier/TestAdvancedAerospace.java @@ -1071,7 +1071,7 @@ public StringBuffer printEntity() { } @Override - public double calculateWeight() { + public double calculateWeightExact() { double weight = 0; weight += getWeightStructure(); weight += getWeightEngine(); diff --git a/megamek/src/megamek/common/verifier/TestAero.java b/megamek/src/megamek/common/verifier/TestAero.java index dccede956ba..ef0c5a31faa 100644 --- a/megamek/src/megamek/common/verifier/TestAero.java +++ b/megamek/src/megamek/common/verifier/TestAero.java @@ -1070,7 +1070,7 @@ public StringBuffer printEntity() { } @Override - public double calculateWeight() { + public double calculateWeightExact() { double weight = 0; weight += getWeightEngine(); weight += getWeightControls(); diff --git a/megamek/src/megamek/common/verifier/TestBattleArmor.java b/megamek/src/megamek/common/verifier/TestBattleArmor.java index b1add802f8f..96c097a72e6 100644 --- a/megamek/src/megamek/common/verifier/TestBattleArmor.java +++ b/megamek/src/megamek/common/verifier/TestBattleArmor.java @@ -1348,7 +1348,7 @@ public double calculateWeight(int trooper) { } @Override - public double calculateWeight() { + public double calculateWeightExact() { double totalWeight = 0.0; for (int i = 0; i < ba.getTroopers(); i++) { totalWeight += calculateWeight(i); diff --git a/megamek/src/megamek/common/verifier/TestEntity.java b/megamek/src/megamek/common/verifier/TestEntity.java index e81ecdd6628..7671c16f5ed 100755 --- a/megamek/src/megamek/common/verifier/TestEntity.java +++ b/megamek/src/megamek/common/verifier/TestEntity.java @@ -860,7 +860,32 @@ public static int calcHeatNeutralHSRequirement(Entity entity) { return heat; } + /** + * According to TM, unit weights are to be rounded up to the nearest half ton or kilo. This method + * returns the rounded weight. + * + * @return The weight of the unit, rounded up according to TM, p.22. + */ public double calculateWeight() { + double weight = calculateWeightExact(); + // If the unit used kg standard, we just need to get rid of floating-point math anomalies. + // Otherwise accumulated kg-scale equipment needs to be rounded up to the nearest half-ton. + weight = round(weight, Ceil.KILO); + if (usesKgStandard()) { + return weight; + } else { + return ceil(weight, Ceil.HALFTON); + } + } + + /** + * According to TM p.22, unit weights are to be rounded up to the nearest half ton or kilo, but in MML + * for construction at least we should be able to show the exact weight. This method returns the unrounded + * weight. + * + * @return The unrounded weight of the unit. + */ + public double calculateWeightExact() { double weight = 0; weight += getWeightEngine(); weight += getWeightStructure(); @@ -877,14 +902,7 @@ public double calculateWeight() { weight += getWeightCarryingSpace(); weight += getArmoredComponentWeight(); - // If the unit used kg standard, we just need to get rid of floating-point math anomalies. - // Otherwise accumulated kg-scale equipment needs to be rounded up to the nearest half-ton. - weight = round(weight, Ceil.KILO); - if (usesKgStandard()) { - return weight; - } else { - return ceil(weight, Ceil.HALFTON); - } + return weight; } public String printWeightCalculation() { diff --git a/megamek/src/megamek/common/verifier/TestInfantry.java b/megamek/src/megamek/common/verifier/TestInfantry.java index 5fbe9625110..2f589b8170d 100644 --- a/megamek/src/megamek/common/verifier/TestInfantry.java +++ b/megamek/src/megamek/common/verifier/TestInfantry.java @@ -287,10 +287,9 @@ public String getName() { public double getWeightPowerAmp() { return 0; } - + @Override - public double calculateWeight() { + public double calculateWeightExact() { return infantry.getWeight(); } - } \ No newline at end of file diff --git a/megamek/src/megamek/common/verifier/TestProtomech.java b/megamek/src/megamek/common/verifier/TestProtomech.java index be487fe2920..7da0c3b7d0f 100644 --- a/megamek/src/megamek/common/verifier/TestProtomech.java +++ b/megamek/src/megamek/common/verifier/TestProtomech.java @@ -244,9 +244,9 @@ public int getCountHeatSinks() { @Override public double calculateWeight() { // Deal with some floating point precision issues - return round(super.calculateWeight(), Ceil.KILO); + return round(super.calculateWeightExact(), Ceil.KILO); } - + @Override public double getWeightAllocatedArmor() { ProtomechArmor armor = ProtomechArmor.getArmor(proto); diff --git a/megamek/src/megamek/common/verifier/TestSmallCraft.java b/megamek/src/megamek/common/verifier/TestSmallCraft.java index f36ec9ad712..2cc19e2d119 100644 --- a/megamek/src/megamek/common/verifier/TestSmallCraft.java +++ b/megamek/src/megamek/common/verifier/TestSmallCraft.java @@ -808,7 +808,7 @@ public StringBuffer printEntity() { } @Override - public double calculateWeight() { + public double calculateWeightExact() { double weight = 0; weight += getWeightStructure(); weight += getWeightEngine(); diff --git a/megamek/src/megamek/common/verifier/TestSupportVehicle.java b/megamek/src/megamek/common/verifier/TestSupportVehicle.java index 3bda4d48c5d..56d51ec576c 100644 --- a/megamek/src/megamek/common/verifier/TestSupportVehicle.java +++ b/megamek/src/megamek/common/verifier/TestSupportVehicle.java @@ -715,7 +715,12 @@ private double ceilWeight(double val) { @Override public double calculateWeight() { - return ceilWeight(super.calculateWeight() + getFuelTonnage()); + return ceilWeight(calculateWeightExact()); + } + + @Override + public double calculateWeightExact() { + return super.calculateWeight() + getFuelTonnage(); } @Override From af6286c8c0e20ca2879bd2defbc3587818b81799 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 21 Dec 2023 17:03:16 +0100 Subject: [PATCH 2/2] Weight calc correction, some utility --- megamek/src/megamek/common/Entity.java | 5 +++++ megamek/src/megamek/common/verifier/TestEntity.java | 8 ++++++++ .../src/megamek/common/verifier/TestSupportVehicle.java | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/megamek/src/megamek/common/Entity.java b/megamek/src/megamek/common/Entity.java index 3100fa83bdd..4eaeb5a6de9 100644 --- a/megamek/src/megamek/common/Entity.java +++ b/megamek/src/megamek/common/Entity.java @@ -11073,6 +11073,11 @@ public Engine getEngine() { return engine; } + /** @return The type of engine if it has an engine, or Engine.NONE, if it has no engine. */ + public int getEngineType() { + return hasEngine() ? getEngine().getEngineType() : Engine.NONE; + } + public boolean hasEngine() { return (null != engine); } diff --git a/megamek/src/megamek/common/verifier/TestEntity.java b/megamek/src/megamek/common/verifier/TestEntity.java index 7671c16f5ed..a74aba999e3 100755 --- a/megamek/src/megamek/common/verifier/TestEntity.java +++ b/megamek/src/megamek/common/verifier/TestEntity.java @@ -1689,6 +1689,14 @@ boolean usesKgStandard() { return usesKgStandard(getEntity()); } + + public int totalCritSlotCount() { + int slotCount = 0; + for (int i = 0; i < getEntity().locations(); i++) { + slotCount += getEntity().getNumberOfCriticals(i); + } + return slotCount; + } } // End class TestEntity class Armor { diff --git a/megamek/src/megamek/common/verifier/TestSupportVehicle.java b/megamek/src/megamek/common/verifier/TestSupportVehicle.java index 56d51ec576c..909cb351593 100644 --- a/megamek/src/megamek/common/verifier/TestSupportVehicle.java +++ b/megamek/src/megamek/common/verifier/TestSupportVehicle.java @@ -720,7 +720,7 @@ public double calculateWeight() { @Override public double calculateWeightExact() { - return super.calculateWeight() + getFuelTonnage(); + return super.calculateWeightExact() + getFuelTonnage(); } @Override