diff options
author | Dmitrii Morozov <snoopdesigns@gmail.com> | 2025-01-04 12:41:47 +0100 |
---|---|---|
committer | Dmitrii Morozov <snoopdesigns@gmail.com> | 2025-01-04 12:41:47 +0100 |
commit | af88f7f96b64acd013c964383028311d6d310d5e (patch) | |
tree | 4a92f7cd4637c32ff4e3673798a2ea13e0f17467 /core/src/org | |
parent | 1e17c39d9a9fda793abb03fee9db2c7ad8f595fa (diff) |
Start from scratch
Diffstat (limited to 'core/src/org')
27 files changed, 0 insertions, 1267 deletions
diff --git a/core/src/org/snoopdesigns/endless/EndlessGame.java b/core/src/org/snoopdesigns/endless/EndlessGame.java deleted file mode 100644 index fc72c66..0000000 --- a/core/src/org/snoopdesigns/endless/EndlessGame.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.snoopdesigns.endless; - -import java.util.List; - -import com.badlogic.gdx.ApplicationAdapter; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.InputMultiplexer; -import com.badlogic.gdx.utils.ScreenUtils; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.context.OnInit; -import org.snoopdesigns.endless.physics.Box2DDebugRenderer; -import org.snoopdesigns.endless.physics.Box2DRenderer; -import org.snoopdesigns.endless.physics.camera.CameraRenderer; -import org.snoopdesigns.endless.renderer.CursorRenderer; -import org.snoopdesigns.endless.renderer.DebugRenderer; -import org.snoopdesigns.endless.renderer.Renderer; -import org.snoopdesigns.endless.utils.ExitControllable; -import org.snoopdesigns.endless.world.ObjectsRenderer; -import org.snoopdesigns.endless.world.bg.BackgroundRenderer; - -public class EndlessGame extends ApplicationAdapter { - - private final List<Renderer> renderers = List.of( - new BackgroundRenderer(), - new Box2DRenderer(), - new CameraRenderer(), - new Box2DDebugRenderer(), - new ObjectsRenderer(), - new CursorRenderer(), - new DebugRenderer() - ); - - private final List<OnInit> intializers = List.of( - new Context() - ); - - @Override - public void create () { - intializers.forEach(OnInit::create); - - final InputMultiplexer inputMultiplexer = new InputMultiplexer(); - renderers.forEach(inputMultiplexer::addProcessor); - inputMultiplexer.addProcessor(Context.getInstance().getPlayerShip()); - inputMultiplexer.addProcessor(new ExitControllable()); - Gdx.input.setInputProcessor(inputMultiplexer); - - renderers.forEach(Renderer::create); - } - - @Override - public void render () { - ScreenUtils.clear(0, 0, 0, 1); - renderers.forEach(Renderer::render); - } - - @Override - public void resize(int width, int height) { - renderers.forEach(renderer -> - renderer.resize(width, height)); - } - - @Override - public void dispose() { - renderers.forEach(Renderer::dispose); - } -} diff --git a/core/src/org/snoopdesigns/endless/config/Config.java b/core/src/org/snoopdesigns/endless/config/Config.java deleted file mode 100644 index 31b9d0e..0000000 --- a/core/src/org/snoopdesigns/endless/config/Config.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.snoopdesigns.endless.config; - -public final class Config { - private static int screenWidth = 1900; - private static int screenHeight = 1200; - - private Config() { - } - - public static int getScreenWidth() { - return screenWidth; - } - - public static int getScreenHeight() { - return screenHeight; - } -} diff --git a/core/src/org/snoopdesigns/endless/context/Context.java b/core/src/org/snoopdesigns/endless/context/Context.java deleted file mode 100644 index 4081c87..0000000 --- a/core/src/org/snoopdesigns/endless/context/Context.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.snoopdesigns.endless.context; - -import org.snoopdesigns.endless.physics.WorldContext; -import org.snoopdesigns.endless.physics.camera.CameraContext; -import org.snoopdesigns.endless.world.player.PlayerShip; - -public final class Context implements OnInit { - private static Context INSTANCE; - - private CameraContext cameraContext; - private WorldContext worldContext; - private PlayerShip playerShip; - - @Override - public void create() { - INSTANCE = new Context(); - INSTANCE.cameraContext = new CameraContext(); - INSTANCE.worldContext = new WorldContext(); - INSTANCE.playerShip = new PlayerShip(); - } - - public static Context getInstance() { - return INSTANCE; - } - - public CameraContext getCameraContext() { - return cameraContext; - } - - public WorldContext getWorldContext() { - return worldContext; - } - - public PlayerShip getPlayerShip() { - return playerShip; - } -} diff --git a/core/src/org/snoopdesigns/endless/context/OnInit.java b/core/src/org/snoopdesigns/endless/context/OnInit.java deleted file mode 100644 index 7b5678a..0000000 --- a/core/src/org/snoopdesigns/endless/context/OnInit.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.snoopdesigns.endless.context; - -public interface OnInit { - void create(); -} diff --git a/core/src/org/snoopdesigns/endless/input/DefaultInputProcessor.java b/core/src/org/snoopdesigns/endless/input/DefaultInputProcessor.java deleted file mode 100644 index ca3f301..0000000 --- a/core/src/org/snoopdesigns/endless/input/DefaultInputProcessor.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.snoopdesigns.endless.input; - -import com.badlogic.gdx.InputProcessor; - -public interface DefaultInputProcessor extends InputProcessor { - - @Override - default boolean keyDown(int keycode) { - return false; - } - - @Override - default boolean keyUp(int keycode) { - return false; - } - - @Override - default boolean keyTyped(char character) { - return false; - } - - @Override - default boolean touchDown(int screenX, int screenY, int pointer, int button) { - return false; - } - - @Override - default boolean touchUp(int screenX, int screenY, int pointer, int button) { - return false; - } - - @Override - default boolean touchCancelled(int screenX, int screenY, int pointer, int button) { - return false; - } - - @Override - default boolean touchDragged(int screenX, int screenY, int pointer) { - return false; - } - - @Override - default boolean mouseMoved(int screenX, int screenY) { - return false; - } - - @Override - default boolean scrolled(float amountX, float amountY) { - return false; - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java b/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java deleted file mode 100644 index 9d7d4dd..0000000 --- a/core/src/org/snoopdesigns/endless/physics/Box2DDebugRenderer.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.utils.Array; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.renderer.Renderer; - -public class Box2DDebugRenderer implements Renderer { - - private com.badlogic.gdx.physics.box2d.Box2DDebugRenderer debugRenderer; - private BitmapFont font; - private SpriteBatch batch; - - @Override - public void create() { - debugRenderer = new com.badlogic.gdx.physics.box2d.Box2DDebugRenderer(); - debugRenderer.setDrawBodies(true); - debugRenderer.setDrawVelocities(true); - debugRenderer.setDrawAABBs(true); - - font = new BitmapFont(Gdx.files.internal("calibri.fnt"), false); - font.setColor(Color.CYAN); - font.getData().setScale(0.15f); - - batch = new SpriteBatch(); - } - - @Override - public void render() { - debugRenderer.render( - Context.getInstance().getWorldContext().getWorld(), - Context.getInstance().getCameraContext().getCameraProjection()); - - final Array<Body> bodies = new Array<>(); - Context.getInstance().getWorldContext().getWorld().getBodies(bodies); - - batch.setProjectionMatrix(Context.getInstance().getCameraContext().getCameraProjection()); - batch.begin(); - bodies.forEach(body -> { - final String debugText = String.format(""" - p %.1f %.1f - a %.1f - s %.1f m/s - v %.1f %.1f - """, - 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); - }); - batch.end(); - } - - @Override - public void dispose() { - batch.dispose(); - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/Box2DLocation.java b/core/src/org/snoopdesigns/endless/physics/Box2DLocation.java deleted file mode 100644 index 338b595..0000000 --- a/core/src/org/snoopdesigns/endless/physics/Box2DLocation.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.ai.utils.Location; -import com.badlogic.gdx.math.Vector2; - -public class Box2DLocation implements Location<Vector2> { - Vector2 position; - float orientation; - - public Box2DLocation () { - this.position = new Vector2(); - this.orientation = 0; - } - - @Override - public Vector2 getPosition () { - return position; - } - - @Override - public float getOrientation () { - return orientation; - } - - @Override - public void setOrientation (float orientation) { - this.orientation = orientation; - } - - @Override - public Location<Vector2> newLocation () { - return new Box2DLocation(); - } - - @Override - public float vectorToAngle (Vector2 vector) { - return (float)Math.atan2(-vector.x, vector.y); - } - - @Override - public Vector2 angleToVector (Vector2 outVector, float angle) { - outVector.x = -(float)Math.sin(angle); - outVector.y = (float)Math.cos(angle); - return outVector; - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/Box2DRenderer.java b/core/src/org/snoopdesigns/endless/physics/Box2DRenderer.java deleted file mode 100644 index 641e397..0000000 --- a/core/src/org/snoopdesigns/endless/physics/Box2DRenderer.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.physics.box2d.Box2D; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.renderer.Renderer; - -public class Box2DRenderer implements Renderer { - - @Override - public void create() { - Box2D.init(); - } - - @Override - public void render() { - Context.getInstance().getWorldContext().getWorld().step(1/60f, 6, 2); - } - - @Override - public void dispose() { - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/PhysicalBody.java b/core/src/org/snoopdesigns/endless/physics/PhysicalBody.java deleted file mode 100644 index 31204a9..0000000 --- a/core/src/org/snoopdesigns/endless/physics/PhysicalBody.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.MassData; -import org.snoopdesigns.endless.context.Context; - -public abstract class PhysicalBody { - - Body body; - - public abstract BodyType getBodyType(); - public abstract FixtureDef getFixture(); - public abstract float getMass(); - public abstract float getLinearDamping(); - public abstract float getMaxVelocity(); - public Vector2 getInitialPosition() { - return new Vector2(0, 0); - } - - public void initBody() { - final BodyDef bodyDef = new BodyDef(); - bodyDef.type = getBodyType(); - bodyDef.position.set(getInitialPosition()); - body = Context.getInstance().getWorldContext().getWorld().createBody(bodyDef); - body.createFixture(getFixture()); - - final MassData massData = new MassData(); - massData.mass = getMass(); - getBody().setMassData(massData); - - getBody().setLinearDamping(getLinearDamping()); - } - - public void limitVelocity() { - if (getBody().getLinearVelocity().len() > getMaxVelocity()) { - getBody().setLinearVelocity(getBody().getLinearVelocity().limit(getMaxVelocity())); - } - } - - public Body getBody() { - return body; - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/SteerablePhysicalBody.java b/core/src/org/snoopdesigns/endless/physics/SteerablePhysicalBody.java deleted file mode 100644 index 9e9a85c..0000000 --- a/core/src/org/snoopdesigns/endless/physics/SteerablePhysicalBody.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.ai.steer.Steerable; -import com.badlogic.gdx.ai.utils.Location; -import com.badlogic.gdx.math.Vector2; - -public abstract class SteerablePhysicalBody extends PhysicalBody implements Steerable<Vector2> { - - public abstract float getMaxSpeed(); - public abstract float getMaxAcceleration(); - public abstract float getMaxRotationSpeed(); - public abstract float getMaxRotationAcceleration(); - - @Override - public Vector2 getLinearVelocity() { - return getBody().getLinearVelocity(); - } - - @Override - public float getAngularVelocity() { - return getBody().getAngularVelocity(); - } - - @Override - public float getBoundingRadius() { - return 0.001f; - } - - @Override - public boolean isTagged() { - return false; - } - - @Override - public void setTagged(boolean tagged) { - } - - @Override - public float getZeroLinearSpeedThreshold() { - return 0.1f; - } - - @Override - public void setZeroLinearSpeedThreshold(float value) { - } - - @Override - public float getMaxLinearSpeed() { - return getMaxSpeed(); - } - - @Override - public void setMaxLinearSpeed(float maxLinearSpeed) { - } - - @Override - public float getMaxLinearAcceleration() { - return getMaxAcceleration(); - } - - @Override - public void setMaxLinearAcceleration(float maxLinearAcceleration) { - } - - @Override - public float getMaxAngularSpeed() { - return getMaxRotationSpeed(); - } - - @Override - public void setMaxAngularSpeed(float maxAngularSpeed) { - } - - @Override - public float getMaxAngularAcceleration() { - return getMaxRotationAcceleration(); - } - - @Override - public void setMaxAngularAcceleration(float maxAngularAcceleration) { - } - - @Override - public Vector2 getPosition() { - return getBody().getPosition(); - } - - @Override - public float getOrientation() { - return getBody().getAngle(); - } - - @Override - public void setOrientation(float orientation) { - getBody().setTransform(getPosition(), orientation); - } - - @Override - public float vectorToAngle(Vector2 vector) { - return vector.angleRad(); - } - - @Override - public Vector2 angleToVector(Vector2 outVector, float angle) { - final var tmpVector = new Vector2(1, 0).rotateRad(angle); - outVector.x = tmpVector.x; - outVector.y = tmpVector.y; - return outVector; - } - - @Override - public Location<Vector2> newLocation() { - return new Box2DLocation(); - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/WorldContext.java b/core/src/org/snoopdesigns/endless/physics/WorldContext.java deleted file mode 100644 index 5f10ba8..0000000 --- a/core/src/org/snoopdesigns/endless/physics/WorldContext.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.snoopdesigns.endless.physics; - -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.World; - -public class WorldContext { - - private final World world; - - public WorldContext() { - this.world = new World(new Vector2(0, 0), true); - } - - public World getWorld() { - return world; - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/camera/CameraContext.java b/core/src/org/snoopdesigns/endless/physics/camera/CameraContext.java deleted file mode 100644 index 635813c..0000000 --- a/core/src/org/snoopdesigns/endless/physics/camera/CameraContext.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.snoopdesigns.endless.physics.camera; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.math.Matrix4; -import com.badlogic.gdx.math.Vector2; - -public final class CameraContext { - - private static final float DEFAULT_WORLD_WIDTH = 300.0f; - - private final Vector2 position; - private final Vector2 viewport; - private float zoom; - private Matrix4 cameraProjection; - - public CameraContext() { - final float w = Gdx.graphics.getWidth(); - final float h = Gdx.graphics.getHeight(); - - this.position = new Vector2(0, 0); - this.zoom = 1.0f; - this.viewport = new Vector2(DEFAULT_WORLD_WIDTH, DEFAULT_WORLD_WIDTH * (h / w)); - } - - public Matrix4 getCameraProjection() { - return cameraProjection; - } - - public void setCameraProjection(Matrix4 cameraProjection) { - this.cameraProjection = cameraProjection; - } - - public Vector2 getPosition() { - return position; - } - - public float getZoom() { - return zoom; - } - - public void setZoom(float zoom) { - this.zoom = zoom; - } - - public Vector2 getViewport() { - return viewport; - } -} diff --git a/core/src/org/snoopdesigns/endless/physics/camera/CameraRenderer.java b/core/src/org/snoopdesigns/endless/physics/camera/CameraRenderer.java deleted file mode 100644 index 165240a..0000000 --- a/core/src/org/snoopdesigns/endless/physics/camera/CameraRenderer.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.snoopdesigns.endless.physics.camera; - -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.utils.viewport.ExtendViewport; -import com.badlogic.gdx.utils.viewport.Viewport; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.renderer.Renderer; - -public class CameraRenderer implements Renderer { - - private static final float DEFAULT_WORLD_WIDTH = 300.0f; - private static final float DEFAULT_WORLD_HEIGHT = 300.0f; - - private OrthographicCamera camera; - private Viewport viewport; - - @Override - public void create() { - camera = new OrthographicCamera(); - camera.zoom = Context.getInstance().getCameraContext().getZoom(); - viewport = new ExtendViewport( - Context.getInstance().getCameraContext().getViewport().x, - Context.getInstance().getCameraContext().getViewport().y, - camera); - camera.update(); - Context.getInstance().getCameraContext().setCameraProjection(camera.combined); - } - - @Override - public void render() { - final Vector2 cameraPosition = Context.getInstance().getCameraContext().getPosition(); - camera.position.set(cameraPosition.x, cameraPosition.y, 0); - camera.update(); - } - - @Override - public void dispose() { - } - - @Override - public void resize(int width, int height) { - viewport.update(width, height); - Context.getInstance().getCameraContext().getViewport().set( - camera.viewportWidth, - camera.viewportHeight); - } - - @Override - public boolean scrolled(float amountX, float amountY) { - camera.zoom += amountY / 10f; - Context.getInstance().getCameraContext().setZoom(camera.zoom); - return true; - } -} diff --git a/core/src/org/snoopdesigns/endless/renderer/CursorRenderer.java b/core/src/org/snoopdesigns/endless/renderer/CursorRenderer.java deleted file mode 100644 index 05b12f9..0000000 --- a/core/src/org/snoopdesigns/endless/renderer/CursorRenderer.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.snoopdesigns.endless.renderer; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Cursor; -import com.badlogic.gdx.graphics.Pixmap; - -public class CursorRenderer implements Renderer { - - private Pixmap crosshair; - - @Override - public void create() { - crosshair = new Pixmap(Gdx.files.internal("crosshair.png")); - final Cursor cursor = Gdx.graphics.newCursor(crosshair, - crosshair.getWidth() / 2, - crosshair.getHeight() / 2); - Gdx.graphics.setCursor(cursor); - } - - @Override - public void render() { - - } - - @Override - public void dispose() { - crosshair.dispose(); - } -} diff --git a/core/src/org/snoopdesigns/endless/renderer/DebugRenderer.java b/core/src/org/snoopdesigns/endless/renderer/DebugRenderer.java deleted file mode 100644 index cbf8a07..0000000 --- a/core/src/org/snoopdesigns/endless/renderer/DebugRenderer.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.snoopdesigns.endless.renderer; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import org.snoopdesigns.endless.context.Context; - -public class DebugRenderer implements Renderer { - - private BitmapFont font; - private SpriteBatch batch; - - @Override - public void create() { - font = new BitmapFont(Gdx.files.internal("calibri.fnt"), false); - font.setColor(Color.GREEN); - font.getData().setScale(0.7f); - batch = new SpriteBatch(); - } - - @Override - public void render() { - batch.begin(); - final String debugText = String.format(""" - window size %d x %d - viewport %.1f %.1f - zoom %.1f - position %.1f %.1f - angle %.1f - speed %.1f m/s - velocity %.1f %.1f - """, - Gdx.graphics.getWidth(), - Gdx.graphics.getHeight(), - Context.getInstance().getCameraContext().getViewport().x, - Context.getInstance().getCameraContext().getViewport().y, - Context.getInstance().getCameraContext().getZoom(), - 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); - font.draw(batch, debugText, 10f, 190f); - batch.end(); - } - - @Override - public void dispose() { - font.dispose(); - batch.dispose(); - } -} diff --git a/core/src/org/snoopdesigns/endless/renderer/Renderer.java b/core/src/org/snoopdesigns/endless/renderer/Renderer.java deleted file mode 100644 index a98e36a..0000000 --- a/core/src/org/snoopdesigns/endless/renderer/Renderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.snoopdesigns.endless.renderer; - -import org.snoopdesigns.endless.input.DefaultInputProcessor; - -public interface Renderer extends DefaultInputProcessor { - void create(); - void render(); - void dispose(); - default void resize(int width, int height) { - } -} diff --git a/core/src/org/snoopdesigns/endless/utils/ExitControllable.java b/core/src/org/snoopdesigns/endless/utils/ExitControllable.java deleted file mode 100644 index 12469a6..0000000 --- a/core/src/org/snoopdesigns/endless/utils/ExitControllable.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.snoopdesigns.endless.utils; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Keys; -import org.snoopdesigns.endless.world.Controllable; - -public class ExitControllable implements Controllable { - - @Override - public boolean keyDown(int keycode) { - if (keycode == Keys.ESCAPE) { - Gdx.app.exit(); - System.exit(1); - } - return true; - } -} diff --git a/core/src/org/snoopdesigns/endless/world/Controllable.java b/core/src/org/snoopdesigns/endless/world/Controllable.java deleted file mode 100644 index 77f1181..0000000 --- a/core/src/org/snoopdesigns/endless/world/Controllable.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.snoopdesigns.endless.world; - -import org.snoopdesigns.endless.input.DefaultInputProcessor; - -public interface Controllable extends DefaultInputProcessor { - -} diff --git a/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java b/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java deleted file mode 100644 index 3055532..0000000 --- a/core/src/org/snoopdesigns/endless/world/ObjectsRenderer.java +++ /dev/null @@ -1,42 +0,0 @@ -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; -import org.snoopdesigns.endless.renderer.Renderer; -import org.snoopdesigns.endless.world.ship.SteerableEnemyShip; - -public class ObjectsRenderer implements Renderer { - - private final List<Renderable> renderables = new ArrayList<>(); - - private SpriteBatch batch; - - @Override - public void create() { - batch = new SpriteBatch(); - renderables.add(Context.getInstance().getPlayerShip()); - - IntStream.range(0, 3).forEach(i -> - renderables.add(new SteerableEnemyShip())); - - renderables.forEach(Renderable::create); - } - - @Override - public void render() { - batch.setProjectionMatrix(Context.getInstance().getCameraContext().getCameraProjection()); - batch.begin(); - renderables.forEach(renderable -> renderable.render(batch)); - batch.end(); - } - - @Override - public void dispose() { - batch.dispose(); - renderables.forEach(Renderable::dispose); - } -} diff --git a/core/src/org/snoopdesigns/endless/world/Renderable.java b/core/src/org/snoopdesigns/endless/world/Renderable.java deleted file mode 100644 index e5ba159..0000000 --- a/core/src/org/snoopdesigns/endless/world/Renderable.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.snoopdesigns.endless.world; - -import com.badlogic.gdx.graphics.g2d.SpriteBatch; - -public interface Renderable { - void create(); - void render(final SpriteBatch batch); - void dispose(); -} diff --git a/core/src/org/snoopdesigns/endless/world/bg/BackgroundRenderer.java b/core/src/org/snoopdesigns/endless/world/bg/BackgroundRenderer.java deleted file mode 100644 index 094a827..0000000 --- a/core/src/org/snoopdesigns/endless/world/bg/BackgroundRenderer.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.snoopdesigns.endless.world.bg; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.renderer.Renderer; - -public class BackgroundRenderer implements Renderer { - - private SpriteBatch batch; - private Sprite bgSprite; - - @Override - public void create() { - batch = new SpriteBatch(); - bgSprite = new Sprite(new Texture(Gdx.files.internal("bg.png"))); - bgSprite.setCenter(0, 0); - bgSprite.setSize(1000, 1000); - } - - @Override - public void render() { - batch.setProjectionMatrix(Context.getInstance().getCameraContext().getCameraProjection()); - batch.begin(); - bgSprite.draw(batch); - batch.end(); - } - - @Override - public void dispose() { - batch.dispose(); - } -} diff --git a/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java b/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java deleted file mode 100644 index d6301db..0000000 --- a/core/src/org/snoopdesigns/endless/world/effects/EngineEffect.java +++ /dev/null @@ -1,64 +0,0 @@ -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<ParticleEffect> 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 deleted file mode 100644 index c844c24..0000000 --- a/core/src/org/snoopdesigns/endless/world/player/PlayerShip.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.snoopdesigns.endless.world.player; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Keys; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.FixtureDef; -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 Sprite sprite; - private EngineEffect effect; - - @Override - public BodyType getBodyType() { - return BodyType.DynamicBody; - } - - @Override - public FixtureDef getFixture() { - final CircleShape circle = new CircleShape(); - circle.setRadius(5f); - final FixtureDef fixtureDef = new FixtureDef(); - fixtureDef.shape = circle; - return fixtureDef; - } - - @Override - public float getMass() { - return 10000; // 10 tons - } - - @Override - public float getLinearDamping() { - return 1.5f; - } - - @Override - public float getMaxVelocity() { - return 100f; // meters per second - } - - @Override - public void create() { - initBody(); - - final Texture texture = new Texture(Gdx.files.internal("ship.png")); - sprite = new Sprite(texture); - - final float expectedSizeInMeters = 15f; - final Vector2 scale = new Vector2( - expectedSizeInMeters / sprite.getHeight(), - expectedSizeInMeters / sprite.getWidth()); - - sprite.setScale(scale.x, scale.y); - - effect = new EngineEffect(this); - } - - @Override - public void render(SpriteBatch batch) { - handleInput(); - handleMousePosition(); - - final float x = getBody().getPosition().x; - final float y = getBody().getPosition().y; - Context.getInstance().getCameraContext().getPosition().set(x, y); - - sprite.setCenter(x, y); - sprite.setRotation(MathUtils.radDeg * getBody().getAngle()); - - sprite.draw(batch); - effect.render(batch); - - limitVelocity(); - } - - @Override - public void dispose() { - } - - @Override - public boolean keyDown(int keycode) { - if (keycode == Keys.SPACE) { - effect.start(); - return true; - } - return false; - } - - @Override - public boolean keyUp(int keycode) { - if (keycode == Keys.SPACE) { - effect.stop(); - return true; - } - return false; - } - - private void speedUp() { - final float force = getBody().getMass() * 200; // force 200x times more than self mass - final Vector2 impulse = new Vector2(force, 0).rotateRad(getBody().getAngle()); - getBody().applyForceToCenter(impulse, true); - } - - private void handleInput() { - if (Gdx.input.isKeyPressed(Keys.SPACE)) { - speedUp(); - } - } - - private void handleMousePosition() { - final float screenX = Gdx.input.getX(); - final float screenY = Gdx.input.getY(); - final float screenCenterX = (float) Gdx.graphics.getWidth() / 2; - final float screenCenterY = (float) Gdx.graphics.getHeight() / 2; - final float effectiveViewportWidth = Context.getInstance().getCameraContext().getViewport().x * - Context.getInstance().getCameraContext().getZoom(); - final float effectiveViewportHeight = Context.getInstance().getCameraContext().getViewport().y * - Context.getInstance().getCameraContext().getZoom(); - - final float directionX = (screenX - screenCenterX) * (effectiveViewportWidth / Gdx.graphics.getWidth()); - final float directionY = ((Gdx.graphics.getHeight() - screenY) - screenCenterY) * (effectiveViewportHeight / Gdx.graphics.getHeight()); - - final Vector2 direction = new Vector2(directionX, directionY); - float rotationRad = direction.angleRad(); - - float c = 10; //speed of rotation - getBody().setAngularVelocity(c * (angleDifference(rotationRad, getBody().getAngle()))); - } - - public static float angleDifference(float angle1, float angle2) { - float diff = (angle1 - angle2) % (MathUtils.PI * 2); - return diff < -1 * MathUtils.PI ? diff + 2 * MathUtils.PI : diff; - } -} diff --git a/core/src/org/snoopdesigns/endless/world/ship/SteerableEnemyShip.java b/core/src/org/snoopdesigns/endless/world/ship/SteerableEnemyShip.java deleted file mode 100644 index e8d429c..0000000 --- a/core/src/org/snoopdesigns/endless/world/ship/SteerableEnemyShip.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.snoopdesigns.endless.world.ship; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import org.snoopdesigns.endless.physics.SteerablePhysicalBody; -import org.snoopdesigns.endless.world.Renderable; -import org.snoopdesigns.endless.world.effects.EngineEffect; -import org.snoopdesigns.endless.world.steering.ChaseSteering; -import org.snoopdesigns.endless.world.steering.Steering; -import org.snoopdesigns.endless.world.steering.SteeringApplicator; - -public class SteerableEnemyShip extends SteerablePhysicalBody implements Renderable { - - private Sprite sprite; - private EngineEffect engineEffect; - private Steering steering; - - @Override - public BodyType getBodyType() { - return BodyType.DynamicBody; - } - - @Override - public FixtureDef getFixture() { - final CircleShape circle = new CircleShape(); - circle.setRadius(7f); - final FixtureDef fixtureDef = new FixtureDef(); - fixtureDef.shape = circle; - return fixtureDef; - } - - @Override - public Vector2 getInitialPosition() { - return new Vector2(MathUtils.random(150), MathUtils.random(150)); - } - - @Override - public void create() { - initBody(); - - final Texture texture = new Texture(Gdx.files.internal("ship.png")); - sprite = new Sprite(texture); - final float expectedSizeInMeters = 15f; - final Vector2 scale = new Vector2( - expectedSizeInMeters / sprite.getHeight(), - expectedSizeInMeters / sprite.getWidth()); - sprite.setScale(scale.x, scale.y); - sprite.setRotation(MathUtils.radDeg * getBody().getAngle()); - - engineEffect = new EngineEffect(this); - steering = new ChaseSteering(this, 120f, 90f, new SteeringApplicator() { - - private boolean speedUp = false; - - @Override - public void applyAngularVelocity(float angular) { - getBody().setAngularVelocity(angular); - } - - @Override - public void applyLinearVelocity(Vector2 linear) { - speedUp(linear); - if (!speedUp) { - engineEffect.start(); - } - speedUp = true; - } - - @Override - public void stopLinearVelocity() { - engineEffect.stop(); - speedUp = false; - } - }); - } - @Override - public void render(SpriteBatch batch) { - steering.calculate(); - - sprite.setCenter(getBody().getPosition().x, getBody().getPosition().y); - sprite.setRotation(MathUtils.radDeg * getBody().getAngle()); - sprite.draw(batch); - - engineEffect.render(batch); - - // TODO - limitVelocity(); - } - - @Override - public void dispose() { - } - - private void speedUp(final Vector2 force) { - final float forceToApply = getBody().getMass() * 200; // force 200x times more than self mass - final Vector2 impulse = new Vector2(forceToApply, 0).rotateRad(getBody().getAngle()); - getBody().applyForceToCenter(impulse, true); - } - - @Override - public float getMass() { - return 10000; - } - - @Override - public float getLinearDamping() { - return 1.5f; - } - - @Override - public float getMaxVelocity() { - return getMaxSpeed(); - } - - @Override - public float getMaxSpeed() { - return 90f; - } - - @Override - public float getMaxAcceleration() { - return 50000f; - } - - @Override - public float getMaxRotationSpeed() { - return 5f; - } - - @Override - public float getMaxRotationAcceleration() { - return 5f; - } -} diff --git a/core/src/org/snoopdesigns/endless/world/steering/ChaseSteering.java b/core/src/org/snoopdesigns/endless/world/steering/ChaseSteering.java deleted file mode 100644 index 3ac3ac7..0000000 --- a/core/src/org/snoopdesigns/endless/world/steering/ChaseSteering.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.snoopdesigns.endless.world.steering; - -import java.util.List; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.ai.steer.SteeringAcceleration; -import com.badlogic.gdx.ai.steer.SteeringBehavior; -import com.badlogic.gdx.ai.steer.behaviors.Arrive; -import com.badlogic.gdx.ai.steer.behaviors.BlendedSteering; -import com.badlogic.gdx.ai.steer.behaviors.Face; -import com.badlogic.gdx.ai.utils.Location; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Vector2; -import org.snoopdesigns.endless.context.Context; -import org.snoopdesigns.endless.physics.Box2DLocation; -import org.snoopdesigns.endless.physics.SteerablePhysicalBody; - -public class ChaseSteering implements Steering { - - private final SteeringAcceleration<Vector2> steeringOutput = new SteeringAcceleration<>(new Vector2()); - private final BlendedSteering<Vector2> steeringCombination; - private final Location<Vector2> positionTarget; - private final Location<Vector2> faceTarget; - private final SteeringApplicator steeringApplicator; - private final SteerablePhysicalBody steerablePhysicalBody; - private final Vector2 lastVelocity = new Vector2(0f, 0f); - private final float maxDistance; - private final float minDistance; - private float targetDirection; - - public ChaseSteering(final SteerablePhysicalBody steerablePhysicalBody, - final float maxDistance, - final float minDistance, - final SteeringApplicator steeringApplicator) { - this.steerablePhysicalBody = steerablePhysicalBody; - this.maxDistance = maxDistance; - this.minDistance = minDistance; - this.steeringApplicator = steeringApplicator; - - positionTarget = new Box2DLocation(); - faceTarget = new Box2DLocation(); - - steeringCombination = new BlendedSteering<>(steerablePhysicalBody); - getSteeringBehaviours().forEach(steeringBehaviour -> - steeringCombination.add(steeringBehaviour, 0.5f)); - - targetDirection = MathUtils.random(MathUtils.PI2); - } - - @Override - public void calculate() { - final Vector2 targetDisplacement = new Vector2(maxDistance, 0f).rotateRad(targetDirection); - final float distanceToPlayer = new Vector2( - steerablePhysicalBody.getBody().getPosition().x - - Context.getInstance().getPlayerShip().getBody().getPosition().x, - steerablePhysicalBody.getBody().getPosition().y - - Context.getInstance().getPlayerShip().getBody().getPosition().y) - .len(); - if (distanceToPlayer > maxDistance + 10f) { - // Rotate target rotation point only of player is far away - targetDirection += Gdx.graphics.getDeltaTime() / 1f; - } - final Vector2 displacement = targetDisplacement.limit(Math.max(0, (distanceToPlayer - minDistance))); - final Vector2 targetPos = new Vector2( - Context.getInstance().getPlayerShip().getBody().getPosition().x + displacement.x, - Context.getInstance().getPlayerShip().getBody().getPosition().y + displacement.y); - - positionTarget.getPosition().set(targetPos); - faceTarget.getPosition().set(positionTarget.getPosition()); - - steeringCombination.calculateSteering(steeringOutput); - if (distanceToPlayer <= minDistance) { // do not move, if close to player, only rotate - steeringOutput.linear.setZero(); - } - - applySteering(); - } - - private void applySteering() { - // Update position and linear velocity. - if (steeringOutput.angular != 0) { - // this method internally scales the torque by deltaTime - steeringApplicator.applyAngularVelocity(steeringOutput.angular); - } - - if (!steeringOutput.linear.isZero()) { - if (steeringOutput.linear.len() >= lastVelocity.len() - 10) { - steeringApplicator.applyLinearVelocity(steeringOutput.linear); - } else { - steeringApplicator.stopLinearVelocity(); - } - lastVelocity.x = steeringOutput.linear.x; - lastVelocity.y = steeringOutput.linear.y; - } else { - steeringApplicator.stopLinearVelocity(); - } - } - - private List<SteeringBehavior<Vector2>> getSteeringBehaviours() { - return List.of( - new Face<>(steerablePhysicalBody, faceTarget), - new Arrive<>(steerablePhysicalBody, positionTarget) - .setTimeToTarget(0.1f) - .setArrivalTolerance(10f) - .setDecelerationRadius(100f) - ); - } -} diff --git a/core/src/org/snoopdesigns/endless/world/steering/Steering.java b/core/src/org/snoopdesigns/endless/world/steering/Steering.java deleted file mode 100644 index c13b575..0000000 --- a/core/src/org/snoopdesigns/endless/world/steering/Steering.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.snoopdesigns.endless.world.steering; - -public interface Steering { - void calculate(); -} diff --git a/core/src/org/snoopdesigns/endless/world/steering/SteeringApplicator.java b/core/src/org/snoopdesigns/endless/world/steering/SteeringApplicator.java deleted file mode 100644 index d683465..0000000 --- a/core/src/org/snoopdesigns/endless/world/steering/SteeringApplicator.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.snoopdesigns.endless.world.steering; - -import com.badlogic.gdx.math.Vector2; - -public interface SteeringApplicator { - void applyAngularVelocity(float angular); - void applyLinearVelocity(Vector2 linear); - void stopLinearVelocity(); -} |