134 lines
3.7 KiB
Java
Executable File
134 lines
3.7 KiB
Java
Executable File
package logistics.storage;
|
|
|
|
import logistics.quantities.FloatUnit;
|
|
import logistics.quantities.NeedCollector;
|
|
|
|
/**
|
|
* The FloatStorage class represents a floating-point storage for a specific FloatUnit object.
|
|
* It includes methods for getting the unit, stored amount, and maximum capacity, as well as
|
|
* methods for consuming, filling, and reporting needs.
|
|
*
|
|
* @author Nikolaus Köberlein
|
|
* @version 1.0
|
|
*/
|
|
public class FloatStorage {
|
|
|
|
private FloatUnit unit;
|
|
private float stored;
|
|
private float max;
|
|
|
|
/**
|
|
* Construct a FloatStorage object with a stored amount, FloatUnit object, and maximum capacity
|
|
*
|
|
* @param stored The initial stored amount for the FloatStorage object
|
|
* @param unit The FloatUnit object for the FloatStorage object
|
|
* @param max The maximum capacity for the FloatStorage object
|
|
*
|
|
* @throws java.lang.IllegalArgumentException if unit is negative
|
|
*/
|
|
public FloatStorage(float stored, FloatUnit unit, float max) {
|
|
if (stored < 0 || max < 0) {
|
|
throw new IllegalArgumentException("Units cannot be negative");
|
|
}
|
|
if (stored > max) {
|
|
this.stored = max;
|
|
this.unit = unit;
|
|
this.max = max;
|
|
} else {
|
|
this.stored = stored;
|
|
this.unit = unit;
|
|
this.max = max;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the FloatUnit object for the FloatStorage object
|
|
*
|
|
* @return The FloatUnit object for the FloatStorage object
|
|
*/
|
|
public FloatUnit getUnit() {
|
|
return unit;
|
|
}
|
|
|
|
/**
|
|
* Get the stored amount for the FloatStorage object
|
|
*
|
|
* @return The stored amount for the FloatStorage object
|
|
*/
|
|
public float getStored() {
|
|
return stored;
|
|
}
|
|
|
|
/**
|
|
* Get the maximum capacity for the FloatStorage object
|
|
*
|
|
* @return The maximum capacity for the FloatStorage object
|
|
*/
|
|
public float getMax() {
|
|
return max;
|
|
}
|
|
|
|
/**
|
|
* Consume a specific amount from the FloatStorage object
|
|
*
|
|
* @param amount The amount to consume from the FloatStorage object
|
|
* @return The amount consumed from the FloatStorage object
|
|
*
|
|
* @throws java.lang.IllegalArgumentException if consume is negative
|
|
*/
|
|
public float consume(float amount) {
|
|
if (amount < 0) {
|
|
throw new IllegalArgumentException("Consume cannot be negative");
|
|
}
|
|
if (stored < amount) {
|
|
float newStored = stored;
|
|
stored = 0;
|
|
return newStored;
|
|
}
|
|
stored -= amount;
|
|
return amount;
|
|
}
|
|
|
|
/**
|
|
* Fill the FloatStorage object with a specific amount
|
|
*
|
|
* @param amount The amount to fill the FloatStorage object with
|
|
*
|
|
* @throws java.lang.IllegalArgumentException if consume is negative
|
|
*/
|
|
public void fill(float amount) {
|
|
if (amount < 0) {
|
|
throw new IllegalArgumentException("Consume cannot be negative");
|
|
}
|
|
stored += amount;
|
|
if (max < stored) {
|
|
fillUp();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fill the FloatStorage object to its maximum capacity
|
|
*/
|
|
public void fillUp() {
|
|
stored = max;
|
|
}
|
|
|
|
/**
|
|
* Report the needs of the FloatStorage object to a NeedCollector object
|
|
*
|
|
* @param collector The NeedCollector object to which to report the needs
|
|
*/
|
|
public void reportNeed (NeedCollector collector) {
|
|
collector.add(max-stored, unit);
|
|
}
|
|
|
|
/**
|
|
* Get a string representation of the FloatStorage object
|
|
*
|
|
* @return A string representation of the FloatStorage object
|
|
*/
|
|
@Override
|
|
public String toString() {
|
|
return "storage with " + stored + " of " + max + " " + unit;
|
|
}
|
|
} |