class Player
{
Weapon weapon;
// ...
}
interface Weapon
{
Bullet shoot(...);
// ...
}
abstract class Bullet
{
Vector2f position;
int direction;
// ...
}
class MachineGun implements Weapon { /*...*/ }
class MachineGunBullet extends Bullet { /*...*/ }
class RocketLauncher implements Weapon { /*...*/ }
class RocketLauncherBullet extends Bullet { /*...*/ }
2) Ideally, your:
setState(GameEntity.State.idle);Should be triggered by a "mouse up" event to avoid any confusion / synchronisation problems.
The following seems also to make more sense to me:
if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON) && getState() != GameEntity.State.overheated){
if(getFire() == 0){
System.out.println("Fire!");
setFire(getFireRate());
increaseHeat(getWeaponHeatRate());
setState(GameEntity.State.shooting);
}
}else{
setState(GameEntity.State.idle);
System.out.println("no fire");
setFire(getFire() - 1);
}