From 6a544086e152bf36e87b42ab0eb6e1f59e5ee4f2 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 26 Feb 2020 19:46:54 +0100 Subject: [PATCH] Legger til nye visningsfunksjoner --- .../inf112/fiasko/roborally/GameLauncher.java | 126 ++++++++++++++++-- 1 file changed, 114 insertions(+), 12 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/GameLauncher.java b/src/main/java/inf112/fiasko/roborally/GameLauncher.java index c95c235..5ab714e 100644 --- a/src/main/java/inf112/fiasko/roborally/GameLauncher.java +++ b/src/main/java/inf112/fiasko/roborally/GameLauncher.java @@ -3,11 +3,14 @@ package inf112.fiasko.roborally; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Vector3; import inf112.fiasko.roborally.game.Game; import inf112.fiasko.roborally.game.IDrawableGame; import inf112.fiasko.roborally.objects.IDrawableObject; @@ -18,7 +21,7 @@ import java.util.List; /** * This class renders a game using libgdx */ -public class GameLauncher extends ApplicationAdapter { +public class GameLauncher extends ApplicationAdapter implements InputProcessor { private OrthographicCamera camera; private SpriteBatch batch; private IDrawableGame game; @@ -30,6 +33,9 @@ public class GameLauncher extends ApplicationAdapter { private float cameraZoom = 1; private int cameraX = 0; private int cameraY = 0; + private Vector2 lastTouch; + private final int viewPortWidth = 12 * tileDimensions; + private final int viewPortHeight = 12 * tileDimensions; @Override public void create() { @@ -39,11 +45,13 @@ public class GameLauncher extends ApplicationAdapter { game = new Game(); camera = new OrthographicCamera(); - camera.setToOrtho(false, game.getWidth() * tileDimensions, - game.getHeight() * tileDimensions); + camera.setToOrtho(false, viewPortWidth, viewPortHeight); + camera.position.set(viewPortWidth/2f, viewPortHeight/2f, 0); batch = new SpriteBatch(); /*MyTextInputListener listener = new MyTextInputListener(); Gdx.input.getTextInput(listener, "Input name", "", "Name");*/ + Gdx.input.setInputProcessor(this); + lastTouch = new Vector2(); } /** @@ -56,6 +64,8 @@ public class GameLauncher extends ApplicationAdapter { batch.setProjectionMatrix(camera.combined); batch.begin(); camera.translate(cameraX, cameraY); + cameraX = 0; + cameraY = 0; camera.zoom = cameraZoom; //Draws all elements the game wants to draw List elementsToDraw = IOUtil.getDrawableObjectsFromGame(game, tileDimensions, tileDimensions); @@ -69,15 +79,6 @@ public class GameLauncher extends ApplicationAdapter { object.flipX(), object.flipY()); } batch.end(); - if (Gdx.input.isKeyJustPressed(Input.Keys.CONTROL_LEFT) && Gdx.input.isKeyJustPressed(Input.Keys.PLUS) && cameraZoom > 0) { - cameraZoom -= 0.1; - } - if (Gdx.input.isKeyJustPressed(Input.Keys.CONTROL_LEFT) && Gdx.input.isKeyJustPressed(Input.Keys.MINUS) && cameraZoom < 2) { - cameraZoom += 0.1; - } - if (Gdx.input.isKeyJustPressed(Input.Keys.RIGHT)) { - cameraX += 1; - } } @Override @@ -87,6 +88,107 @@ public class GameLauncher extends ApplicationAdapter { batch.dispose(); } + @Override + public boolean keyDown(int keycode) { + return false; + } + + @Override + public boolean keyUp(int keycode) { + switch (keycode) { + case Input.Keys.PLUS: + if (Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT)) { + cameraZoom -= 0.1; + return true; + } + case Input.Keys.MINUS: + if (Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT)) { + cameraZoom += 0.1; + return true; + } + } + return false; + } + + @Override + public boolean keyTyped(char character) { + if (character == 'r') { + //camera.rotate(-90); + camera.rotateAround( + new Vector3(viewPortWidth/2f, viewPortHeight/2f, 0), + new Vector3(0, 0, 1), 90); + return true; + } else if (character == 'q') { + camera.up.x = 0; + camera.up.y = 1; + cameraZoom = 1; + System.out.print((game.getHeight() * tileDimensions) - viewPortHeight/2f); + camera.position.set(viewPortWidth/2f, viewPortHeight/2f, 0); + } + return false; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + lastTouch = new Vector2(screenX, screenY); + return true; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + lastTouch = new Vector2(screenX, screenY); + return true; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + Vector2 newTouch = new Vector2(screenX, screenY); + Vector2 diff = newTouch.cpy().sub(lastTouch); + lastTouch = newTouch; + int[] change = translateToDirection(diff.x, diff.y); + cameraX = change[0]; + cameraY = change[1]; + return true; + } + + /** + * Translates x and y coordinates according to the camera's direction + * @param x The x coordinate to translate + * @param y The y coordinate to translate + * @return A list containing the translated coordinates of x and y + */ + private int[] translateToDirection(float x, float y) { + int outX = 0; + int outY = 0; + if (Math.round(camera.up.x) == 0 && Math.round(camera.up.y) == 1) { + outX = (int)-x; + outY = (int)y; + } else if (Math.round(camera.up.x) == 0 && Math.round(camera.up.y) == -1) { + outX = (int)x; + outY = (int)-y; + } else if (Math.round(camera.up.x) == -1 && Math.round(camera.up.y) == 0) { + outX = (int)-y; + outY = (int)-x; + } else if (Math.round(camera.up.x) == 1 && Math.round(camera.up.y) == 0) { + outX = (int)y; + outY = (int)x; + } + return new int[]{outX, outY}; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + return false; + } + + @Override + public boolean scrolled(int amount) { + if (amount < 0 && cameraZoom > 0 || amount > 0 && cameraZoom < 2) { + cameraZoom += amount / 10.0; + } + return true; + } + /*public static class MyTextInputListener implements Input.TextInputListener { @Override public void input (String text) {