/**
*
*/
package slimpleslickgame;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.geom.Vector2f;
/**
* @author nille
*
*/
public class Gun {
private HashMap<Integer, Bullet> bullets;
private int bulletID;
private int level;
private float speed = 10;
private int firerate;
private int damage;
private int coolDown = 0;
public Gun(){
this.firerate = 20;
this.damage = 10;
this.level = 1;
bullets = new HashMap<Integer, Bullet>();
bulletID = 0;
}
public boolean shoot(Vector2f fromPosition){
if(coolDown <= 0){
bullets.put(bulletID, new Bullet(fromPosition));
bulletID++;
coolDown = 10000/firerate;
return true;
}
return false;
}
public void render(Graphics graphics){
for(Bullet b: bullets.values()){
b.render(graphics);
}
}
public void update(int delta){
if(coolDown > 0){
coolDown -= delta;
}
for(Bullet b: bullets.values()){
b.update(delta);
}
}
public int getbulletID(){
return bulletID;
}
public void delete(int id){
bullets.remove(id);
}
public int bulletIntersectsCreep(Shape creep){
for(Entry<Integer, Bullet> bullet : bullets.entrySet()){
if(creep.intersects(bullet.getValue().getShape())){
this.delete(bullet.getKey());
return bullet.getKey();
}
}
return -1;
}
/**
* When upgrading weapon.
*/
public void upgrade(){
this.damage = this.level * 10;
this.firerate += 5;
}
public List<Integer> getOutOfBoundsBullets() {
ArrayList<Integer> bids = new ArrayList<Integer>();
for(Entry<Integer, Bullet> bullet : bullets.entrySet()){
if(bullet.getValue().isOutOfBounds()){
bids.add(bullet.getKey());
}
}
return bids;
}
}