package com.rebelkeithy.ftl.projectile; import java.util.HashMap; import java.util.Map; import com.rebelkeithy.ftl.FTLGame; import com.rebelkeithy.ftl.ship.Ship; public class Projectile extends Shot { private String target; private String source; private String room; private int shieldPiercing = 0; private Map<String, Integer> damages; public double distance; public double speed; private boolean canDodge = true; private boolean dodged = false; private boolean dead = false; private boolean pastShields; public Projectile(String target, String room, String source, double distance, double speed) { this.target = target; this.room = room; this.source = source; this.distance = distance; this.speed = speed; damages = new HashMap<String, Integer>(); pastShields = false; } public void addDamage(String name, int amount) { damages.put(name, amount); } public void update(double dt) { distance -= dt*speed; //System.out.println(Clock.instance().time() + ": distance " + distance); if(distance < 500 && !pastShields) { Ship targetShip = FTLGame.instance().getShip(target); if(targetShip.getShieldLvl() > shieldPiercing) targetShip.hitShields(this); pastShields = true; //System.out.println("proj " + distance); } if(distance <= 0 && !dodged) { Ship targetShip = FTLGame.instance().getShip(target); targetShip.getRoom(room).hit(this); } if(distance < -100) { this.kill(); } } public int getShieldPiercing() { return shieldPiercing; } public void setShieldPiercing(int shieldPiercing) { this.shieldPiercing = shieldPiercing; } public int getDamage(String name) { if(damages.containsKey(name)) { return damages.get(name); } return 0; } public Map<String, Integer> getDamages() { return damages; } public boolean causesDamage(String name) { return damages.containsKey(name); } public boolean canDodge() { return canDodge; } public void dodge() { dodged = true; } public String getSource() { return source; } public void kill() { dead = true; } public boolean isDead() { return dead; } }