package rts.core.engine.layers.entities.projectiles; import org.newdawn.slick.Animation; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.SlickException; import org.newdawn.slick.SpriteSheet; import rts.core.engine.Engine; import rts.core.engine.GameSound; import rts.core.engine.Utils; import rts.core.engine.layers.Layer; import rts.core.engine.layers.entities.ActiveEntity; import rts.core.engine.layers.entities.BasicEntity; import rts.core.engine.layers.entities.EData; import rts.utils.ResourceManager; public class Flame extends BasicEntity { private Animation flame; private float ang; public Flame(Engine engine, ActiveEntity owner, ActiveEntity target) { super(engine, Layer.EARTH_MARINE_ENT); this.ang = Utils.ANGLES[owner.getDirection()]; this.x = owner.getX() + ((float) Math.sin(Math.toRadians(ang)) * 25); this.y = owner.getY() + ((float) -Math.cos(Math.toRadians(ang)) * 25); this.flame = new Animation(); this.flame.setLooping(false); SpriteSheet ss = ResourceManager.getSpriteSheet("flamelauncher"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { flame.addFrame(ss.getSprite(i, j), 50); } } if (target.getPlayerId() == -1) { target.removeLife(EData.BULLET_POWER[owner.getType()][target.getType()]); engine.getNetworkManager().sendUpdateNPEntity(target.getState()); } else { if (!engine.isPlayerEntity(owner.getPlayerId())) { target.removeLife(EData.BULLET_POWER[owner.getType()][target.getType()]); } } GameSound.fl(); } @Override public void render(GameContainer container, Graphics g) throws SlickException { g.rotate(x + 10, y + 15, ang); g.drawAnimation(flame, x, y); g.rotate(x + 10, y + 15, -ang); } @Override public void update(GameContainer container, int delta) throws SlickException { if (flame.isStopped()) { engine.removeEntity(this); } } }