From 42ec8deb7671a99ba79e357344c9ae358ac72921 Mon Sep 17 00:00:00 2001 From: Shalinihr1402 Date: Mon, 27 Jul 2026 20:05:05 +0530 Subject: [PATCH 1/2] Use BuildingSpec area property for building floor area --- .../org/mars_sim/msp/core/structure/building/Building.java | 5 +++-- .../msp/core/structure/building/BuildingConfig.java | 3 ++- .../mars_sim/msp/core/structure/building/BuildingSpec.java | 6 +++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java index aa084c99a2..4981f7087a 100755 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java @@ -60,7 +60,6 @@ import org.mars_sim.msp.core.structure.building.function.FoodProduction; import org.mars_sim.msp.core.structure.building.function.Function; import org.mars_sim.msp.core.structure.building.function.FunctionType; -import org.mars_sim.msp.core.structure.building.function.VehicleGarage; import org.mars_sim.msp.core.structure.building.function.HeatMode; import org.mars_sim.msp.core.structure.building.function.Heating; import org.mars_sim.msp.core.structure.building.function.LifeSupport; @@ -78,6 +77,7 @@ import org.mars_sim.msp.core.structure.building.function.Storage; import org.mars_sim.msp.core.structure.building.function.SystemType; import org.mars_sim.msp.core.structure.building.function.ThermalGeneration; +import org.mars_sim.msp.core.structure.building.function.VehicleGarage; import org.mars_sim.msp.core.structure.building.function.VehicleMaintenance; import org.mars_sim.msp.core.structure.building.function.WasteProcessing; import org.mars_sim.msp.core.structure.building.function.cooking.Cooking; @@ -250,7 +250,8 @@ public Building(int id, int zone, String buildingType, String name, BoundedObjec length = bounds.getLength(); } - floorArea = length * width; + + floorArea = spec.getArea(); if (floorArea < 0) { throw new IllegalArgumentException("Floor area cannot be -ve w=" + width + ", l=" + length); } diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java index 88bba6b45b..2fdfadb0a0 100755 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java @@ -133,6 +133,7 @@ private BuildingSpec parseBuilding(String buildingTypeName, Element buildingElem double width = Double.parseDouble(buildingElement.getAttributeValue(WIDTH)); double length = Double.parseDouble(buildingElement.getAttributeValue(LENGTH)); + double area = width * length; int baseLevel = Integer.parseInt(buildingElement.getAttributeValue(BASE_LEVEL)); double roomTemp = Double.parseDouble(buildingElement.getAttributeValue(ROOM_TEMPERATURE)); int maintenanceTime = Integer.parseInt(buildingElement.getAttributeValue(MAINTENANCE_TIME)); @@ -182,7 +183,7 @@ private BuildingSpec parseBuilding(String buildingTypeName, Element buildingElem category = deriveCategory(supportedFunctions.keySet()); } - BuildingSpec newSpec = new BuildingSpec(buildingTypeName, desc, category, width, length, baseLevel, + BuildingSpec newSpec = new BuildingSpec(buildingTypeName, desc, category, width, length,area, baseLevel, roomTemp, maintenanceTime, wearLifeTime, basePowerRequirement, basePowerDownPowerRequirement, supportedFunctions); diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java index 930bfb65d3..1c994e68e0 100644 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java @@ -37,6 +37,7 @@ public class BuildingSpec { private double length; private double width; + private double area; private double baseMass; @@ -65,7 +66,7 @@ public class BuildingSpec { private BuildingCategory category; - BuildingSpec(String buildingType, String description, BuildingCategory category, double width, double length, int baseLevel, + BuildingSpec(String buildingType, String description, BuildingCategory category, double width, double length, double area,int baseLevel, double roomTemperature, int maintenanceTime, int wearLifeTime, double basePowerRequirement, double basePowerDownPowerRequirement, Map supportedFunctions) { @@ -148,6 +149,9 @@ public double getLength() { public double getWidth() { return width; } + public double getArea() { + return area; +} public double getBaseMass() { return baseMass; From 98ff9a8dc3dfe2c3c8f16ca9d3253d979a35baa4 Mon Sep 17 00:00:00 2001 From: Shalinihr1402 Date: Thu, 6 Aug 2026 12:07:30 +0530 Subject: [PATCH 2/2] Fix building area calculation by adding shape attribute in buildings.xml --- .../msp/core/structure/building/Building.java | 4 ++-- .../msp/core/structure/building/BuildingConfig.java | 11 ++++++++++- .../msp/core/structure/building/BuildingSpec.java | 9 +++++++++ .../structure/building/function/LifeSupport.java | 4 ++-- mars-sim-core/src/main/resources/xml/buildings.xml | 13 +++++++------ 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java index 4981f7087a..39c594eb23 100755 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/Building.java @@ -1315,8 +1315,8 @@ public void reinit() { // TODO this is wrong as names can change. This is just used to identify if there are multiple floors. public boolean isAHabOrHub() { - return buildingType.contains(" Hab") - || buildingType.contains(" Hub"); + BuildingSpec spec = SimulationConfig.instance().getBuildingConfiguration().getBuildingSpec(buildingType); + return spec != null && "circular".equalsIgnoreCase(spec.getShape()); } /** diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java index 2fdfadb0a0..28a2838a3b 100755 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingConfig.java @@ -133,7 +133,13 @@ private BuildingSpec parseBuilding(String buildingTypeName, Element buildingElem double width = Double.parseDouble(buildingElement.getAttributeValue(WIDTH)); double length = Double.parseDouble(buildingElement.getAttributeValue(LENGTH)); - double area = width * length; + String shape = buildingElement.getAttributeValue("shape"); + double area; + if (shape != null && shape.equalsIgnoreCase("circular")) { + area = Math.PI * (length / 2.0) * (length / 2.0); + } else { + area = width * length; + } int baseLevel = Integer.parseInt(buildingElement.getAttributeValue(BASE_LEVEL)); double roomTemp = Double.parseDouble(buildingElement.getAttributeValue(ROOM_TEMPERATURE)); int maintenanceTime = Integer.parseInt(buildingElement.getAttributeValue(MAINTENANCE_TIME)); @@ -192,6 +198,9 @@ private BuildingSpec parseBuilding(String buildingTypeName, Element buildingElem if (construction != null) { newSpec.setConstruction(ConstructionType.valueOf(ConfigHelper.convertToEnumName(construction))); } + if (shape != null) { + newSpec.setShape(shape); + } String baseMass = buildingElement.getAttributeValue(BASE_MASS); if (baseMass != null) { diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java index 1c994e68e0..812b456724 100644 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/BuildingSpec.java @@ -38,6 +38,7 @@ public class BuildingSpec { private double length; private double width; private double area; + private String shape; private double baseMass; @@ -152,6 +153,14 @@ public double getWidth() { public double getArea() { return area; } + + public String getShape() { + return shape; + } + + public void setShape(String shape) { + this.shape = shape; + } public double getBaseMass() { return baseMass; diff --git a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/function/LifeSupport.java b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/function/LifeSupport.java index 45ab04d2ff..bc69977f4f 100755 --- a/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/function/LifeSupport.java +++ b/mars-sim-core/src/main/java/org/mars_sim/msp/core/structure/building/function/LifeSupport.java @@ -62,8 +62,8 @@ public LifeSupport(Building building, FunctionSpec spec) { length = building.getLength(); width = building.getWidth(); - floorArea = length * width; - + floorArea = building.getFloorArea(); + double t = AirComposition.C_TO_K + building.getCurrentTemperature(); double vol = building.getVolumeInLiter(); // 1 Cubic Meter = 1,000 Liters air = new AirComposition(t, vol); diff --git a/mars-sim-core/src/main/resources/xml/buildings.xml b/mars-sim-core/src/main/resources/xml/buildings.xml index 12ddd41b8f..84a9fa58ab 100644 --- a/mars-sim-core/src/main/resources/xml/buildings.xml +++ b/mars-sim-core/src/main/resources/xml/buildings.xml @@ -6,6 +6,7 @@ + @@ -168,7 +169,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Lander Hab is the initial habitat for a crew of four. It serves as a jack-of-all-trades building that houses many basic but critical functions @@ -2083,7 +2084,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Storage Hab is a Lander Hab refitted storage building with ample storage space. It has built-in PV panels @@ -2126,7 +2127,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Research Hab is a Lander Hab refitted laboratory building for scientific research. It can be custom-tailored with COMPUTING @@ -2182,7 +2183,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Residential Hab is a Lander Hab refitted residential quarters for living accommodation of up to 8 persons. It uses solar @@ -2227,7 +2228,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Medical Hab is a Lander Hab refitted medical facility for providing medical basic care. It also has medical research workbench and @@ -2293,7 +2294,7 @@ http://www.uss-hornet.org/groups/pdf/SEMB_MarsHabitat.pdf - The Machinery Hab is a Lander Hab refitted manufacturing workshop for making items and synthesizing resource. It provides storage space for