package marathon.tycho; import java.util.*; import java.awt.*; import java.awt.geom.Point2D; public class Wave { protected Point2D.Double origin; protected long lifetime; protected double velocity; protected double angle; protected double distanceTraveled; protected int direction; protected boolean markedForDeletion; protected boolean markedIgnore; protected EnemyRobot creator; public Wave(Point2D.Double origin, long lifetime, double bulletPower, double angle, int direction) { this.origin = origin; this.lifetime = lifetime - 1; velocity = Helper.bulletVelocity(bulletPower); distanceTraveled = velocity; this.direction = direction; this.angle = angle; markedForDeletion = false; markedIgnore = false; } public Wave(EnemyRobot creator, Point2D.Double origin, long lifetime, double bulletPower, double angle, int direction) { this(origin, lifetime, bulletPower, angle, direction); this.creator = creator; } public EnemyRobot getEnemy() { return creator; } public void update(long time) { if(!markedIgnore) distanceTraveled = (time - lifetime) * velocity; } public boolean didBreak(Point2D.Double target) { return (distanceTraveled > target.distance(origin) + 50); } public boolean didHit(Point2D.Double target, double bulletPower) { return (Math.abs(distanceTraveled - target.distance(origin)) < 50) && (Math.round(Helper.bulletVelocity(bulletPower)) == Math.round(velocity)); } public boolean intercepted(Point2D.Double source, int tickCount) { return (source.distance(origin) < distanceTraveled + (tickCount * velocity) + velocity); } public double distanceFrom(Point2D.Double target) { return target.distance(origin) - distanceTraveled; } public double getVelocity() { return velocity; } public double getDistanceTraveled() { return distanceTraveled; } public Point2D.Double getOrigin() { return origin; } public double getAngle() { return angle; } public int getDirection() { return direction; } public void markForDeletion() { markedForDeletion = true; } public boolean isMarkedForDeletion() { return markedForDeletion; } public void markIgnore() { markedIgnore = true; } public boolean isMarkedIgnore() { return markedIgnore; } }