From 0612318e688a654ddb71467c01910a84a6b02488 Mon Sep 17 00:00:00 2001 From: Dmitri Morozov Date: Thu, 8 Feb 2024 23:50:08 +0100 Subject: Fixed debug renderer, isolated engine effect in separate class --- .../endless/physics/Box2DDebugRenderer.java | 13 ++--- .../endless/world/ObjectsRenderer.java | 7 ++- .../endless/world/effects/EngineEffect.java | 64 ++++++++++++++++++++++ .../endless/world/player/PlayerShip.java | 32 ++--------- 4 files changed, 80 insertions(+), 36 deletions(-) create mode 100644 core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java diff --git a/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java b/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java index b67987c..9d7d4dd 100644 --- a/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java +++ b/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java @@ -47,14 +47,13 @@ public class Box2DDebugRenderer implements Renderer { s %.1f m/s v %.1f %.1f """, - Context.getInstance().getCameraContext().getPosition().x, - Context.getInstance().getCameraContext().getPosition().y, - Context.getInstance().getPlayerShip().getBody().getAngle(), - Context.getInstance().getPlayerShip().getBody().getLinearVelocity().len(), - Context.getInstance().getPlayerShip().getBody().getLinearVelocity().x, - Context.getInstance().getPlayerShip().getBody().getLinearVelocity().y); + body.getPosition().x, + body.getPosition().y, + body.getAngle(), + body.getLinearVelocity().len(), + body.getLinearVelocity().x, + body.getLinearVelocity().y); font.draw(batch, debugText, body.getPosition().x + 5f, body.getPosition().y - 5f); - //ont.draw(batch, debugText, 10f, 190f); }); batch.end(); } diff --git a/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java b/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java index c9792e4..3afea26 100644 --- a/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java +++ b/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java @@ -2,6 +2,7 @@ package org.snoopdesigns.endless.world; import java.util.ArrayList; import java.util.List; +import java.util.stream.IntStream; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import org.snoopdesigns.endless.context.Context; @@ -18,9 +19,9 @@ public class ObjectsRenderer implements Renderer { public void create() { batch = new SpriteBatch(); renderables.add(Context.getInstance().getPlayerShip()); - renderables.add(new SteerableEnemyShip()); - //renderables.add(new SteerableEnemyShip()); - //renderables.add(new SteerableEnemyShip()); + + IntStream.range(0, 1).forEach(i -> + renderables.add(new SteerableEnemyShip())); renderables.forEach(Renderable::create); } diff --git a/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java b/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java new file mode 100644 index 0000000..d6301db --- /dev/null +++ b/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java @@ -0,0 +1,64 @@ +package org.snoopdesigns.endless.world.effects; + +import java.util.LinkedList; +import java.util.Queue; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.ParticleEffect; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import org.snoopdesigns.endless.physics.PhysicalBody; +import org.snoopdesigns.endless.world.Renderable; + +public class EngineEffect implements Renderable { + private final Queue effects = new LinkedList<>(); + private final PhysicalBody body; + + public EngineEffect(PhysicalBody body) { + this.body = body; + } + + public void start() { + final ParticleEffect effect = new ParticleEffect(); + effect.load(Gdx.files.internal("particles.p"), Gdx.files.internal("")); + effect.setPosition( + body.getBody().getPosition().x, + body.getBody().getPosition().y); + effect.start(); + effects.add(effect); + } + + public void stop() { + effects.forEach(ParticleEffect::allowCompletion); + } + + @Override + public void create() { + } + + @Override + public void render(SpriteBatch batch) { + final float x = body.getBody().getPosition().x; + final float y = body.getBody().getPosition().y; + + effects.removeIf(ParticleEffect::isComplete); + effects.forEach(effect -> { + final Vector2 effectOffset = new Vector2(-5f, 0f).rotateRad(body.getBody().getAngle()); + effect.setPosition(x + effectOffset.x, y + effectOffset.y); + effect.getEmitters().forEach(emitter -> { + final float effectRotation = MathUtils.radDeg * body.getBody().getAngle(); + emitter.getAngle().setLow(effectRotation); + emitter.getAngle().setHigh(effectRotation); + }); + }); + + effects.forEach(effect -> + effect.draw(batch, Gdx.graphics.getDeltaTime())); + } + + @Override + public void dispose() { + + } +} diff --git a/core/src/org/snoopdesigns/endless/world/player/PlayerShip.java b/core/src/org/snoopdesigns/endless/world/player/PlayerShip.java index 1393d02..c844c24 100644 --- a/core/src/org/snoopdesigns/endless/world/player/PlayerShip.java +++ b/core/src/org/snoopdesigns/endless/world/player/PlayerShip.java @@ -1,12 +1,8 @@ package org.snoopdesigns.endless.world.player; -import java.util.LinkedList; -import java.util.Queue; - import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.ParticleEffect; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.MathUtils; @@ -18,11 +14,11 @@ import org.snoopdesigns.endless.context.Context; import org.snoopdesigns.endless.physics.PhysicalBody; import org.snoopdesigns.endless.world.Controllable; import org.snoopdesigns.endless.world.Renderable; +import org.snoopdesigns.endless.world.effects.EngineEffect; public final class PlayerShip extends PhysicalBody implements Controllable, Renderable { - - private final Queue effects = new LinkedList<>(); private Sprite sprite; + private EngineEffect effect; @Override public BodyType getBodyType() { @@ -66,6 +62,8 @@ public final class PlayerShip extends PhysicalBody implements Controllable, Rend expectedSizeInMeters / sprite.getWidth()); sprite.setScale(scale.x, scale.y); + + effect = new EngineEffect(this); } @Override @@ -80,20 +78,8 @@ public final class PlayerShip extends PhysicalBody implements Controllable, Rend sprite.setCenter(x, y); sprite.setRotation(MathUtils.radDeg * getBody().getAngle()); - effects.removeIf(ParticleEffect::isComplete); - effects.forEach(effect -> { - final Vector2 effectOffset = new Vector2(-5f, 0f).rotateRad(getBody().getAngle()); - effect.setPosition(x + effectOffset.x, y + effectOffset.y); - effect.getEmitters().forEach(emitter -> { - final float effectRotation = MathUtils.radDeg * getBody().getAngle(); - emitter.getAngle().setLow(effectRotation); - emitter.getAngle().setHigh(effectRotation); - }); - }); - sprite.draw(batch); - effects.forEach(effect -> - effect.draw(batch, Gdx.graphics.getDeltaTime())); + effect.render(batch); limitVelocity(); } @@ -105,13 +91,7 @@ public final class PlayerShip extends PhysicalBody implements Controllable, Rend @Override public boolean keyDown(int keycode) { if (keycode == Keys.SPACE) { - final ParticleEffect effect = new ParticleEffect(); - effect.load(Gdx.files.internal("particles.p"), Gdx.files.internal("")); - effect.setPosition( - getBody().getPosition().x, - getBody().getPosition().y); effect.start(); - effects.add(effect); return true; } return false; @@ -120,7 +100,7 @@ public final class PlayerShip extends PhysicalBody implements Controllable, Rend @Override public boolean keyUp(int keycode) { if (keycode == Keys.SPACE) { - effects.forEach(ParticleEffect::allowCompletion); + effect.stop(); return true; } return false; -- cgit v1.2.3