lots of changes
This commit is contained in:
@@ -53,7 +53,7 @@ public class Worm {
|
||||
|
||||
if (!isValidMinRadius(minRadius))
|
||||
throw new IllegalArgumentException("Invalid min radius"); // TODO add decent exception msg
|
||||
if (!isValidRadius(radius))
|
||||
if (!canHaveAsMinRadius(radius))
|
||||
throw new IllegalArgumentException("Invalid radius");
|
||||
|
||||
setRadius(radius);
|
||||
@@ -199,10 +199,10 @@ public class Worm {
|
||||
* |new.getRadius() == radius
|
||||
* @throws IllegalArgumentException
|
||||
* the given radius is not a valid radius for any worm
|
||||
* |! isValidRadius(radius)
|
||||
* |! canHaveAsMinRadius(radius)
|
||||
*/
|
||||
public void setRadius(double radius) throws IllegalArgumentException {
|
||||
if (!isValidRadius(radius))
|
||||
if (!canHaveAsMinRadius(radius))
|
||||
throw new IllegalArgumentException("Invalid radius");
|
||||
|
||||
this.radius = radius;
|
||||
@@ -240,8 +240,8 @@ public class Worm {
|
||||
* (or equal) and the radius is a number
|
||||
* |result == (radius >= this.minRadius && !Double.isNaN(radius))
|
||||
*/
|
||||
private boolean isValidRadius(double radius) {
|
||||
return radius >= this.minRadius && !Double.isNaN(radius);
|
||||
private boolean canHaveAsMinRadius(double radius) {
|
||||
return radius >= getMinRadius() && !Double.isNaN(radius);
|
||||
}
|
||||
|
||||
|
||||
@@ -316,16 +316,21 @@ public class Worm {
|
||||
* |this.actionPoints = actionPoints
|
||||
*/
|
||||
public void setActionPoints(long actionPoints) {
|
||||
this.actionPoints = toValidActionPoints(actionPoints);
|
||||
if (actionPoints > getMaxActionPoints())
|
||||
actionPoints = getMaxActionPoints();
|
||||
else if (actionPoints < 0)
|
||||
actionPoints = 0;
|
||||
|
||||
this.actionPoints = actionPoints;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param delta
|
||||
* @param delta ...
|
||||
*/
|
||||
public void decreaseActionPoints (long delta) {
|
||||
|
||||
this.actionPoints = toValidActionPoints(this.actionPoints - delta);
|
||||
setActionPoints(getActionPoints() - delta);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -338,38 +343,19 @@ public class Worm {
|
||||
*/
|
||||
private long maxActionPoints;
|
||||
|
||||
private void setMaxActionPoints(double maxActionPoints) {
|
||||
this.maxActionPoints = round(maxActionPoints);
|
||||
setActionPoints(this.actionPoints);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param actionPoints
|
||||
* @return
|
||||
*/
|
||||
private long toValidActionPoints(long actionPoints) {
|
||||
if (actionPoints > this.maxActionPoints)
|
||||
actionPoints = this.maxActionPoints;
|
||||
else if (actionPoints < 0)
|
||||
actionPoints = 0;
|
||||
|
||||
return actionPoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the maximum of points to the given maximum of points
|
||||
*
|
||||
* @param maxPoints
|
||||
* @param maxActionPoints
|
||||
* the new maximum of points for the worm
|
||||
* @post the new maximum points is set to the given maximum points (as an integer)
|
||||
* |this.maxPoints = (int) ceil(maxPoints)
|
||||
* @post when the maximum points change, the current points should change too
|
||||
* |setPoints(this.points)
|
||||
*/
|
||||
private void setMaxPoints(double maxPoints) {
|
||||
this.maxActionPoints = (int) round(maxPoints);
|
||||
setActionPoints(this.actionPoints);
|
||||
private void setMaxActionPoints(double maxActionPoints) {
|
||||
this.maxActionPoints = round(maxActionPoints);
|
||||
setActionPoints(getActionPoints());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -382,7 +368,7 @@ public class Worm {
|
||||
*/
|
||||
private void subtractActionPoints (long value) {
|
||||
|
||||
setActionPoints(this.actionPoints - value);
|
||||
setActionPoints(getActionPoints() - value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -396,7 +382,7 @@ public class Worm {
|
||||
*/
|
||||
private void subtractActionPoints (double angle) {
|
||||
|
||||
setActionPoints(this.actionPoints - (long) ceil(toDegrees(angle) / 6));
|
||||
setActionPoints(getActionPoints() - (long) ceil(toDegrees(angle) / 6));
|
||||
}
|
||||
|
||||
//===================================================================================
|
||||
@@ -510,15 +496,15 @@ public class Worm {
|
||||
if (numberSteps < 0)
|
||||
throw new IllegalArgumentException(); // TODO add decent exception msg
|
||||
|
||||
long cost = (long) ceil(abs(cos(this.orientation)) + abs(4 * sin(this.orientation)));
|
||||
long cost = (long) ceil(abs(cos(getOrientation())) + abs(4 * sin(getOrientation())));
|
||||
|
||||
if (cost > this.actionPoints)
|
||||
if (cost > getActionPoints())
|
||||
throw new IllegalArgumentException(); // TODO add decent exception msg
|
||||
|
||||
double distanceX = this.radius * cos(this.orientation);
|
||||
double distanceY = this.radius * sin(this.orientation);
|
||||
this.location = Tuple.create(this.location.item1 + numberSteps * distanceX,
|
||||
this.location.item2 + numberSteps * distanceY);
|
||||
double distanceX = this.radius * cos(getOrientation());
|
||||
double distanceY = this.radius * sin(getOrientation());
|
||||
setLocation(Tuple.create(getLocation().item1 + numberSteps * distanceX,
|
||||
getLocation().item2 + numberSteps * distanceY));
|
||||
subtractActionPoints(cost);
|
||||
}
|
||||
|
||||
@@ -558,7 +544,7 @@ public class Worm {
|
||||
private boolean canTurn(double angle) {
|
||||
return 0 <= angle && angle < (2 * PI) &&
|
||||
!Double.isNaN(angle) &&
|
||||
this.actionPoints - (long) ceil(toDegrees(angle) / 6) >= 0;
|
||||
getActionPoints() - (long) ceil(toDegrees(angle) / 6) >= 0;
|
||||
}
|
||||
|
||||
//===================================================================================
|
||||
@@ -594,8 +580,8 @@ public class Worm {
|
||||
if (!canJump())
|
||||
throw new IllegalStateException();
|
||||
|
||||
this.location = Tuple.create(location.item1 + jumpDistance(this.jumpVelocity()), location.item2);
|
||||
this.actionPoints = 0;
|
||||
setLocation(Tuple.create(getLocation().item1 + jumpDistance(this.jumpVelocity()), getLocation().item2));
|
||||
setActionPoints(0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -607,10 +593,10 @@ public class Worm {
|
||||
*/
|
||||
public double jumpTime() {
|
||||
|
||||
if (this.orientation >= PI || this.actionPoints == 0)
|
||||
if (getOrientation() >= PI || getActionPoints() == 0)
|
||||
throw new IllegalStateException();
|
||||
|
||||
return (jumpDistance(jumpVelocity()) / (jumpVelocity() * cos(this.orientation)));
|
||||
return (jumpDistance(jumpVelocity()) / (jumpVelocity() * cos(getOrientation())));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -622,8 +608,8 @@ public class Worm {
|
||||
if (Double.isNaN(deltaTime) || deltaTime > this.jumpTime() || deltaTime < 0)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
return Tuple.create(this.location.item1 + this.jumpVelocity() * cos(this.orientation) * deltaTime,
|
||||
this.location.item2 + this.jumpVelocity() * sin(this.orientation) * deltaTime - 0.5 * G * pow(deltaTime, 2));
|
||||
return Tuple.create(getLocation().item1 + this.jumpVelocity() * cos(getOrientation()) * deltaTime,
|
||||
getLocation().item2 + this.jumpVelocity() * sin(getOrientation()) * deltaTime - 0.5 * G * pow(deltaTime, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -634,7 +620,7 @@ public class Worm {
|
||||
* |result == this.actionPoints > 0 && this.orientation < Math.PI
|
||||
*/
|
||||
private boolean canJump() {
|
||||
return this.actionPoints > 0 && this.orientation < PI;
|
||||
return getActionPoints() > 0 && getOrientation() < PI;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -647,7 +633,7 @@ public class Worm {
|
||||
* |(Math.pow(v, 2) * Math.sin(2 * this.orientation)) / this.G
|
||||
*/
|
||||
private double jumpDistance(double v) {
|
||||
return (pow(v, 2) * sin(2 * this.orientation)) / G;
|
||||
return (pow(v, 2) * sin(2 * getOrientation())) / G;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -661,13 +647,11 @@ public class Worm {
|
||||
*/
|
||||
private double jumpVelocity() {
|
||||
|
||||
double force = 5 * this.actionPoints + this.mass * G;
|
||||
return force / this.mass * FORCE_TIME;
|
||||
double force = 5 * getActionPoints() + getMass() * G;
|
||||
return force / getMass() * FORCE_TIME;
|
||||
}
|
||||
|
||||
|
||||
//===================================================================================
|
||||
// endregion
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user