VolvoFH16.java
/**
* Utfärdat av Durim Miziraj
* Kontakt: gusmizdu@student.gu.se
*/
package lab2;
import java.util.ArrayDeque;
import java.util.Deque;
import static java.awt.Color.YELLOW;
import static java.lang.System.out;
public final class VolvoFH16 extends ConditionallyMovableVehicle implements RampOperated {
private static final double LOAD_RADIUS = 5.0d;
private static final byte MAX_CAPACITY = 6;
private final Deque<Vehicle> cargo = new ArrayDeque<>();
private boolean isRampLowered;
public VolvoFH16() {
super(
/* Number of doors */ 2,
/* Engine power */ 200.0d,
/* Vehicle color */ YELLOW,
/* Vehicle model */ "VolvoFH16",
/* X position */ 0.0d,
/* Y position */ 0.0d
);
raiseRamp();
}
public void lowerRamp() {
if (getCurrentSpeed() > 0) return;
isRampLowered = true;
}
public void raiseRamp() {
isRampLowered = false;
}
public boolean canLoad() {
return (getCurrentSpeed() == 0 && isRampLowered);
}
public void load() {
Vehicle v;
if (!canLoad()) {
out.println("Can not load, ramp is not lowered!");
return;
}
if (cargo.size() >= MAX_CAPACITY) {
out.println("Can not load, " + getModelName() +" is full!");
return;
}
v = getClosestInRange(
Vehicle.class,
LOAD_RADIUS,
car -> (car instanceof Car) && !cargo.contains(car)
);
if (v == null) return;
cargo.push(v);
v.mutatePoint(getX(), getY());
}
public void unLoad() {
if (!canLoad()) {
out.println("Can not unload, ramp is not lowered!");
return;
}
if (cargo.isEmpty()) {
out.println("There is nothing to unload!");
return;
}
Vehicle v = cargo.pop();
v.mutatePoint(getX() - 1.0, getY());
}
private StringBuilder loadToString() {
StringBuilder sb = new StringBuilder();
if (cargo.isEmpty()) return sb.append("Cargohold is empty.");
for (Vehicle v : cargo) sb.append(v).append('\n');
return sb;
}
public void printLoad() { out.println(loadToString()); }
protected double speedFactor() { return getEnginePower() * 0.01d; }
@Override
public void move() {
super.move();
for (Vehicle v : cargo) {
v.mutatePoint(getX(), getY());
}
}
@Override
protected boolean canMove() { return !isRampLowered; }
@Override
protected String subToString() {
StringBuilder sb = new StringBuilder();
sb.append(", \n\tisRampLowered = " + isRampLowered)
.append("\n\t" + loadToString());
return sb.toString();
}
}