From 97f11378f27303addd8605a50d6a014267bd58fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Sun, 14 Sep 2014 22:38:55 +0200 Subject: GameScreen tracks the touched cell, dragNdrop tiles --- core/src/ch/asynk/tankontank/actors/Tile.java | 1 + .../ch/asynk/tankontank/screens/GameScreen.java | 33 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/core/src/ch/asynk/tankontank/actors/Tile.java b/core/src/ch/asynk/tankontank/actors/Tile.java index 42882d5..dbc2da0 100644 --- a/core/src/ch/asynk/tankontank/actors/Tile.java +++ b/core/src/ch/asynk/tankontank/actors/Tile.java @@ -12,6 +12,7 @@ import com.badlogic.gdx.math.GridPoint3; public class Tile extends Image { + public static final int DRAGGED_Z_INDEX = 10; private static final float MOVE_TIME = 0.3f; public GridPoint3 cell = new GridPoint3(-1, -1, 0); diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index 5f185fe..50c46ce 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -16,6 +16,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.math.GridPoint2; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.math.MathUtils; @@ -23,6 +24,7 @@ import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport; import ch.asynk.tankontank.TankOnTank; +import ch.asynk.tankontank.actors.Tile; import ch.asynk.tankontank.actors.HexMap; public class GameScreen extends AbstractScreen @@ -46,6 +48,9 @@ public class GameScreen extends AbstractScreen private Vector3 touchPos = new Vector3(); // world coordinates private Vector2 dragPos = new Vector2(); // screen coordinates + private Tile draggedTile = null; + private GridPoint2 cell = new GridPoint2(-1, -1); // current map cell + public GameScreen(final TankOnTank game) { super(game); @@ -92,9 +97,15 @@ public class GameScreen extends AbstractScreen @Override public boolean touchDragged(int x, int y, int pointer) { - cam.translate(((dragPos.x - x) * cam.zoom * screenToViewport.x), ((y - dragPos.y) * cam.zoom * screenToViewport.y), 0); + float deltaX = ((x - dragPos.x) * cam.zoom * screenToViewport.x); + float deltaY = ((dragPos.y - y) * cam.zoom * screenToViewport.y); dragPos.set(x, y); - clampCameraPos(); + if (draggedTile == null) { + cam.translate(-deltaX, -deltaY, 0); + clampCameraPos(); + } else { + draggedTile.moveBy(deltaX, deltaY); + } return true; } @Override @@ -103,7 +114,21 @@ public class GameScreen extends AbstractScreen if (button == Input.Buttons.LEFT) { dragPos.set(x, y); cam.unproject(touchPos.set(x, y, 0)); - map.selectCell(touchPos.x, touchPos.y); + map.getCellAt(cell, touchPos.x, touchPos.y); + draggedTile = map.getTopTileAt(cell); + draggedTile.setZIndex(Tile.DRAGGED_Z_INDEX); + } + return true; + } + @Override + public boolean touchUp(int x, int y, int pointer, int button) + { + if (button == Input.Buttons.LEFT) { + cam.unproject(touchPos.set(x, y, 0)); + if (draggedTile != null) { + map.getCellAt(cell, touchPos.x, touchPos.y); + draggedTile.moveTo(cell.x, cell.y); + } } return true; } @@ -138,7 +163,7 @@ public class GameScreen extends AbstractScreen fps.setText("FPS: " + Gdx.graphics.getFramesPerSecond()); camInfo.setText("Camera: " + (int) cam.position.y + " ; " + (int) cam.position.y + " x " + String.format("%.2f", cam.zoom)); - cellInfo.setText("Cell: " + map.cell.x + " ; " + map.cell.y); + cellInfo.setText("Cell: " + cell.x + " ; " + cell.y); gameStage.act(delta); gameStage.draw(); -- cgit v1.1-2-g2b99