package common; import java.awt.BasicStroke; import java.awt.Graphics2D; import java.awt.Stroke; import java.util.logging.Logger; /** * This class describes projectile in the game */ public class Projectile extends Actor { public static Logger logger = Logger.getLogger(CLIENT_LOGGER_NAME); protected Position startPos; protected Position direction; protected int damage; protected byte owner; protected boolean isDelivered; public Projectile(Position startPos, Position direction, float startTime, float curTime, byte owner, int team) { this.startPos = new Position(startPos); // Duplicate this one so we're not following somebody else this.direction = direction; this.team = team; position = new Position(startPos); position.move(direction, (curTime - startTime) * BULLET_SPEED); this.owner = owner; isDelivered = false; height = DEFAULT_PROJECTILE_HEIGHT; width = DEFAULT_PROJECTILE_WIDTH; damage = DEFAULT_PROJECTILE_DAMAGE; } /** * Check to see if this projectile has been delivered as a packet. */ public boolean isDelivered() { return isDelivered; } /** * Make a note that this projectile has been delivered. */ public void delivered() { isDelivered = true; } public Position getStartPosition() { return startPos; } public Position getDirection() { return direction; } public boolean animate(float dTime, float currentTime) { position.move(direction, dTime * BULLET_SPEED); return false; } public void collision(Actor a) { // If we bump into anything, we vanish if (a instanceof Player) { if ((team == TEAM_A || team == TEAM_B) && team == a.getTeam() || ((Player)a).getPlayerID() == owner) return; } kill(); } public void draw(Graphics2D g, float scale) { if (!isAlive()) return; if (team == TEAM_A) g.setColor(TEAM_A_COLOR); else if (team == TEAM_B) g.setColor(TEAM_B_COLOR); else g.setColor(TEAMLESS_COLOR); Stroke oldStroke = g.getStroke(); g.setStroke(new BasicStroke(3)); g.drawLine(Math.round(getX()*scale), Math.round(getY()*scale), Math.round((getX() + getSpeedX())*scale), Math.round((getY() + getSpeedY())*scale)); g.setStroke(oldStroke); } public byte getOwner() { return owner; } public int getDamage(){ return damage; } }