Scania.java

/**
 *  Utfärdat av Durim Miziraj
 *  Kontakt: gusmizdu@student.gu.se
 */

package lab3;

import lab3.interfaces.Tippable;

import java.awt.geom.Point2D;
import static java.awt.Color.BLUE;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import static org.apache.commons.lang3.builder.ToStringStyle.MULTI_LINE_STYLE;

import static org.apache.commons.lang3.Validate.isTrue;
import static org.apache.commons.lang3.Validate.validState;



public final class Scania extends ConditionallyMovableVehicle implements Tippable {
  private byte tipBedAngle = 0;

  public Scania() {
    super(
      /* Number of doors */ 2,
      /* Engine power    */ 200.0d,
      /* Vehicle color   */ BLUE,
      /* Vehicle model   */ "Scania",
      /* X position      */ new Point2D.Double(0.0d, 0.0d)
     );

    tipBedAngle = 0;
  }

  public void setTipBedAngle(final byte angle) {
    double speed = getCurrentSpeed();

    isTrue(0 <= angle && angle <= 70);
    validState(speed == 0.0d);

    tipBedAngle = angle;
  }

  public byte getTipBedAngle() { return tipBedAngle; }

  @Override
  public boolean canMove() { return tipBedAngle == 0; }

  @Override
  protected double speedFactor() { return getEnginePower() * 0.01d; }

  @Override
  public String toString() {
    return ReflectionToStringBuilder.toString(this, MULTI_LINE_STYLE);
  }
}