diff options
author | Dmitrii Morozov <snoopdesigns@gmail.com> | 2025-01-04 13:04:44 +0100 |
---|---|---|
committer | Dmitrii Morozov <snoopdesigns@gmail.com> | 2025-01-04 13:04:44 +0100 |
commit | 6941e695e24ced7076449d27a05a1b7924c08d03 (patch) | |
tree | 3e159c7a4a2d2f044756082a52ab83ed5561a08a /core/src/main/java | |
parent | af88f7f96b64acd013c964383028311d6d310d5e (diff) |
Simple background and camera
Diffstat (limited to 'core/src/main/java')
-rw-r--r-- | core/src/main/java/org/snoopdesigns/endless/EndlessGame.java | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/core/src/main/java/org/snoopdesigns/endless/EndlessGame.java b/core/src/main/java/org/snoopdesigns/endless/EndlessGame.java index 53884dd..1453a6e 100644 --- a/core/src/main/java/org/snoopdesigns/endless/EndlessGame.java +++ b/core/src/main/java/org/snoopdesigns/endless/EndlessGame.java @@ -1,32 +1,92 @@ package org.snoopdesigns.endless; import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.OrthographicCamera; 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.utils.ScreenUtils; public class EndlessGame extends ApplicationAdapter { + private static final int WORLD_WIDTH = 100; + private static final int WORLD_HEIGHT = 100; + + private static final int DEFAULT_VIEWPORT_WIDTH = 30; + private static final int DEFAULT_VIEWPORT_HEIGHT = 30; + + private OrthographicCamera cam; private SpriteBatch batch; + private Sprite imageSprite; private Texture image; @Override public void create() { batch = new SpriteBatch(); - image = new Texture("libgdx.png"); + image = new Texture("sc_map.png"); + imageSprite = new Sprite(image); + imageSprite.setPosition(0, 0); + imageSprite.setSize(WORLD_WIDTH, WORLD_HEIGHT); + + float graphicsWidth = Gdx.graphics.getWidth(); + float graphicsHeight = Gdx.graphics.getHeight(); + + cam = new OrthographicCamera( + DEFAULT_VIEWPORT_WIDTH, + DEFAULT_VIEWPORT_HEIGHT * (graphicsHeight / graphicsWidth)); + cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0); + cam.update(); } @Override public void render() { + handleInput(); + cam.update(); + batch.setProjectionMatrix(cam.combined); + ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f); + batch.begin(); - batch.draw(image, 140, 210); + imageSprite.draw(batch); batch.end(); } @Override public void dispose() { + imageSprite.getTexture().dispose(); batch.dispose(); image.dispose(); } + + private void handleInput() { + if (Gdx.input.isKeyPressed(Input.Keys.A)) { + cam.zoom += 0.02; + } + if (Gdx.input.isKeyPressed(Input.Keys.Q)) { + cam.zoom -= 0.02; + } + if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) { + cam.translate(-3, 0, 0); + } + if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) { + cam.translate(3, 0, 0); + } + if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) { + cam.translate(0, -3, 0); + } + if (Gdx.input.isKeyPressed(Input.Keys.UP)) { + cam.translate(0, 3, 0); + } + + cam.zoom = MathUtils.clamp(cam.zoom, 0.1f, 100 / cam.viewportWidth); + + float effectiveViewportWidth = cam.viewportWidth * cam.zoom; + float effectiveViewportHeight = cam.viewportHeight * cam.zoom; + + cam.position.x = MathUtils.clamp(cam.position.x, effectiveViewportWidth / 2f, 100 - effectiveViewportWidth / 2f); + cam.position.y = MathUtils.clamp(cam.position.y, effectiveViewportHeight / 2f, 100 - effectiveViewportHeight / 2f); + } } |