diff --git a/OGP1718-Worms/src/worms/model/Projectile.java b/OGP1718-Worms/src/worms/model/Projectile.java index 5022f56..86aeecd 100644 --- a/OGP1718-Worms/src/worms/model/Projectile.java +++ b/OGP1718-Worms/src/worms/model/Projectile.java @@ -70,7 +70,6 @@ public abstract class Projectile extends GameObject { public Coordinate getJumpStep(double elapsedTime) { // TODO zie naar worm hoe dit moet, implementatie moet wel anders! - // DONE? if (Double.isNaN(elapsedTime) || elapsedTime > this.getJumpTime(elapsedTime) || elapsedTime < 0) throw new IllegalArgumentException(); @@ -81,17 +80,13 @@ public abstract class Projectile extends GameObject { } private double jumpVelocity() { - // wat met de action points? - double force = 5 ;//* Worm.getActionPoints() + getMass() * G; - return force/getMass() * FORCE_TIME; + return getForce()/getMass() * FORCE_TIME; } private double getJumpTime(double jumpTimeStep) { // TODO zie naar worm hoe dit moet, implementatie moet wel anders! - //wat met parameter jumpTimeStep? - double v = jumpVelocity(); - double time = 0; + double time = jumpTimeStep; double a = getOrientation(); Coordinate loc = getLocation(); World world = getWorld(); @@ -123,31 +118,36 @@ public abstract class Projectile extends GameObject { } private boolean canJump() { - // wat met action points. - //return this.getActionPoints() > 0 && getOrientation() < PI; - return false; + return getOrientation() < PI; } - public void jump() throws IllegalStateException { + public void jump(double jumpTimeStep) throws IllegalStateException { // TODO zie naar worm hoe dit moet, implementatie moet wel anders! - // wat meegeven met getJumpTime() ? - // wat met action points? - if (!canJump()) throw new IllegalStateException(); double v = jumpVelocity(); - double t = 0;//getJumpTime(); + double t = getJumpTime(jumpTimeStep); double a = getOrientation(); - - Coordinate newLocation = Coordinate.create(getLocation().getX() + v * t * cos(a), getLocation().getY() + v * t * sin(a) - (G * t * t) / 2.0); - + Coordinate newLocation; + + + //TODO extra parameter if: als de worm die wil schieten tegen een andere worm staat + // + //In case the initial position of a projectile already hits impassable terrain or a worm, the projectile will + //jump over a distance of 0.0 m. + if (getWorld().isAdjacent(getLocation(),getRadius())) { + newLocation = Coordinate.create(getLocation().getX(), getLocation().getY()); + } + else { + newLocation = Coordinate.create(getLocation().getX() + v * t * cos(a), getLocation().getY() + v * t * sin(a) - (G * t * t) / 2.0); + } + if (! isValidLocation(newLocation)) { terminate(); return; } setLocation(newLocation); - //Worm.setActionPoints(0); } private static Coordinate calcLocation(Coordinate wormLocation, double wormOrientation, double wormRadius, double mass) {