package rescuecore2.standard.entities; import rescuecore2.worldmodel.Entity; import rescuecore2.worldmodel.EntityID; import rescuecore2.worldmodel.Property; import rescuecore2.worldmodel.properties.IntProperty; import rescuecore2.worldmodel.properties.BooleanProperty; import java.util.EnumSet; /** The Building object. */ public class Building extends Area { /** Fieryness levels that indicate burning. */ public static final EnumSet<StandardEntityConstants.Fieryness> BURNING = EnumSet.of(StandardEntityConstants.Fieryness.HEATING, StandardEntityConstants.Fieryness.BURNING, StandardEntityConstants.Fieryness.INFERNO); private IntProperty floors; private BooleanProperty ignition; private IntProperty fieryness; private IntProperty brokenness; private IntProperty code; private IntProperty attributes; private IntProperty groundArea; private IntProperty totalArea; private IntProperty temperature; private IntProperty importance; /** Construct a Building object with entirely undefined property values. @param id The ID of this entity. */ public Building(EntityID id) { super(id); floors = new IntProperty(StandardPropertyURN.FLOORS); ignition = new BooleanProperty(StandardPropertyURN.IGNITION); fieryness = new IntProperty(StandardPropertyURN.FIERYNESS); brokenness = new IntProperty(StandardPropertyURN.BROKENNESS); code = new IntProperty(StandardPropertyURN.BUILDING_CODE); attributes = new IntProperty(StandardPropertyURN.BUILDING_ATTRIBUTES); groundArea = new IntProperty(StandardPropertyURN.BUILDING_AREA_GROUND); totalArea = new IntProperty(StandardPropertyURN.BUILDING_AREA_TOTAL); temperature = new IntProperty(StandardPropertyURN.TEMPERATURE); importance = new IntProperty(StandardPropertyURN.IMPORTANCE); registerProperties(floors, ignition, fieryness, brokenness, code, attributes, groundArea, totalArea, temperature, importance); } /** Building copy constructor. @param other The Building to copy. */ public Building(Building other) { super(other); floors = new IntProperty(other.floors); ignition = new BooleanProperty(other.ignition); fieryness = new IntProperty(other.fieryness); brokenness = new IntProperty(other.brokenness); code = new IntProperty(other.code); attributes = new IntProperty(other.attributes); groundArea = new IntProperty(other.groundArea); totalArea = new IntProperty(other.totalArea); temperature = new IntProperty(other.temperature); importance = new IntProperty(other.importance); registerProperties(floors, ignition, fieryness, brokenness, code, attributes, groundArea, totalArea, temperature, importance); } @Override protected Entity copyImpl() { return new Building(getID()); } @Override public StandardEntityURN getStandardURN() { return StandardEntityURN.BUILDING; } @Override protected String getEntityName() { return "Building"; } @Override public Property getProperty(String urn) { StandardPropertyURN type; try { type = StandardPropertyURN.fromString(urn); } catch (IllegalArgumentException e) { return super.getProperty(urn); } switch (type) { case FLOORS: return floors; case IGNITION: return ignition; case FIERYNESS: return fieryness; case BROKENNESS: return brokenness; case BUILDING_CODE: return code; case BUILDING_ATTRIBUTES: return attributes; case BUILDING_AREA_GROUND: return groundArea; case BUILDING_AREA_TOTAL: return totalArea; case TEMPERATURE: return temperature; case IMPORTANCE: return importance; default: return super.getProperty(urn); } } /** Get the floors property. @return The floors property. */ public IntProperty getFloorsProperty() { return floors; } /** Get the number of floors in this building. @return The number of floors. */ public int getFloors() { return floors.getValue(); } /** Set the number of floors in this building. @param floors The new number of floors. */ public void setFloors(int floors) { this.floors.setValue(floors); } /** Find out if the floors property has been defined. @return True if the floors property has been defined, false otherwise. */ public boolean isFloorsDefined() { return floors.isDefined(); } /** Undefine the floors property. */ public void undefineFloors() { floors.undefine(); } /** Get the ignition property. @return The ignition property. */ public BooleanProperty getIgnitionProperty() { return ignition; } /** Get the value of the ignition property. @return The ignition property value. */ public boolean getIgnition() { return ignition.getValue(); } /** Set the ignition property. @param ignition The new ignition value. */ public void setIgnition(boolean ignition) { this.ignition.setValue(ignition); } /** Find out if the ignition property has been defined. @return True if the ignition property has been defined, false otherwise. */ public boolean isIgnitionDefined() { return ignition.isDefined(); } /** Undefine the ingition property. */ public void undefineIgnition() { ignition.undefine(); } /** Get the fieryness property. @return The fieryness property. */ public IntProperty getFierynessProperty() { return fieryness; } /** Get the fieryness of this building. @return The fieryness property value. */ public int getFieryness() { return fieryness.getValue(); } /** Get the fieryness of this building as an enum constant. If fieryness is not defined then return null. @return The fieryness property value as a Fieryness enum, or null if fieryness is undefined. */ public StandardEntityConstants.Fieryness getFierynessEnum() { if (!fieryness.isDefined()) { return null; } return StandardEntityConstants.Fieryness.values()[fieryness.getValue()]; } /** Set the fieryness of this building. @param fieryness The new fieryness value. */ public void setFieryness(int fieryness) { this.fieryness.setValue(fieryness); } /** Find out if the fieryness property has been defined. @return True if the fieryness property has been defined, false otherwise. */ public boolean isFierynessDefined() { return fieryness.isDefined(); } /** Undefine the fieryness property. */ public void undefineFieryness() { fieryness.undefine(); } /** Get the brokenness property. @return The brokenness property. */ public IntProperty getBrokennessProperty() { return brokenness; } /** Get the brokenness of this building. @return The brokenness value. */ public int getBrokenness() { return brokenness.getValue(); } /** Set the brokenness of this building. @param brokenness The new brokenness. */ public void setBrokenness(int brokenness) { this.brokenness.setValue(brokenness); } /** Find out if the brokenness property has been defined. @return True if the brokenness property has been defined, false otherwise. */ public boolean isBrokennessDefined() { return brokenness.isDefined(); } /** Undefine the brokenness property. */ public void undefineBrokenness() { brokenness.undefine(); } /** Get the building code property. @return The building code property. */ public IntProperty getBuildingCodeProperty() { return code; } /** Get the building code of this building. @return The building code. */ public int getBuildingCode() { return code.getValue(); } /** Get the building code of this building as an enum constant. If building code is not defined then return null. @return The building code property value as a BuildingCode enum, or null if building code is undefined. */ public StandardEntityConstants.BuildingCode getBuildingCodeEnum() { if (!code.isDefined()) { return null; } return StandardEntityConstants.BuildingCode.values()[code.getValue()]; } /** Set the building code of this building. @param newCode The new building code. */ public void setBuildingCode(int newCode) { this.code.setValue(newCode); } /** Find out if the building code has been defined. @return True if the building code has been defined, false otherwise. */ public boolean isBuildingCodeDefined() { return code.isDefined(); } /** Undefine the building code. */ public void undefineBuildingCode() { code.undefine(); } /** Get the building attributes property. @return The building attributes property. */ public IntProperty getBuildingAttributesProperty() { return attributes; } /** Get the building attributes of this building. @return The building attributes. */ public int getBuildingAttributes() { return attributes.getValue(); } /** Set the building attributes of this building. @param newAttributes The new building attributes. */ public void setBuildingAttributes(int newAttributes) { this.attributes.setValue(newAttributes); } /** Find out if the building attributes property has been defined. @return True if the building attributes property has been defined, false otherwise. */ public boolean isBuildingAttributesDefined() { return attributes.isDefined(); } /** Undefine the building attributes. */ public void undefineBuildingAttributes() { attributes.undefine(); } /** Get the ground area property. @return The ground area property. */ public IntProperty getGroundAreaProperty() { return groundArea; } /** Get the ground area of this building. @return The ground area. */ public int getGroundArea() { return groundArea.getValue(); } /** Set the ground area of this building. @param ground The new ground area. */ public void setGroundArea(int ground) { this.groundArea.setValue(ground); } /** Find out if the ground area property has been defined. @return True if the ground area property has been defined, false otherwise. */ public boolean isGroundAreaDefined() { return groundArea.isDefined(); } /** Undefine the ground area. */ public void undefineGroundArea() { groundArea.undefine(); } /** Get the total area property. @return The total area property. */ public IntProperty getTotalAreaProperty() { return totalArea; } /** Get the total area of this building. @return The total area. */ public int getTotalArea() { return totalArea.getValue(); } /** Set the total area of this building. @param total The new total area. */ public void setTotalArea(int total) { this.totalArea.setValue(total); } /** Find out if the total area property has been defined. @return True if the total area property has been defined, false otherwise. */ public boolean isTotalAreaDefined() { return totalArea.isDefined(); } /** Undefine the total area property. */ public void undefineTotalArea() { totalArea.undefine(); } /** Get the temperature property. @return The temperature property. */ public IntProperty getTemperatureProperty() { return temperature; } /** Get the temperature of this building. @return The temperature. */ public int getTemperature() { return temperature.getValue(); } /** Set the temperature of this building. @param temperature The new temperature. */ public void setTemperature(int temperature) { this.temperature.setValue(temperature); } /** Find out if the temperature property has been defined. @return True if the temperature property has been defined, false otherwise. */ public boolean isTemperatureDefined() { return temperature.isDefined(); } /** Undefine the temperature property. */ public void undefineTemperature() { temperature.undefine(); } /** Get the building importance property. @return The importance property. */ public IntProperty getImportanceProperty() { return importance; } /** Get the importance of this building. @return The importance. */ public int getImportance() { return importance.getValue(); } /** Set the importance of this building. @param importance The new importance. */ public void setImportance(int importance) { this.importance.setValue(importance); } /** Find out if the importance property has been defined. @return True if the importance property has been defined, false otherwise. */ public boolean isImportanceDefined() { return importance.isDefined(); } /** Undefine the importance property. */ public void undefineImportance() { importance.undefine(); } /** Find out if this building is on fire. @return True iff this buildings fieryness indicates that it is burning. */ public boolean isOnFire() { if (!fieryness.isDefined()) { return false; } return BURNING.contains(getFierynessEnum()); } }