diff options
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 109 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/screens/GameScreen.java | 8 | 
2 files changed, 34 insertions, 83 deletions
| diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 5a5f5b0..a66962e 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -1,5 +1,7 @@  package ch.asynk.tankontank.game; +import java.util.Vector; +  import com.badlogic.gdx.graphics.Texture;  import com.badlogic.gdx.graphics.g2d.TextureAtlas;  import com.badlogic.gdx.math.Vector2; @@ -17,9 +19,9 @@ public abstract class Map extends Board      private Pawn currentPawn;      private GridPoint2 currentHex = new GridPoint2(-1, -1); -    private GridPoint2 lineHex = new GridPoint2(-1, -1); -    private Vector2 line0 = new Vector2(0, 0); -    private Vector2 line1 = new Vector2(0, 0); + +    private final Vector<GridPoint2> possibleMoves = new Vector<GridPoint2>(20); +    private final Vector<GridPoint2> possibleTargets = new Vector<GridPoint2>(10);      protected abstract void setup(); @@ -43,100 +45,55 @@ public abstract class Map extends Board      public void touchDown(float x, float y)      { +        if (currentHex.x != -1) +            enableOverlayOn(currentHex.x, currentHex.y, Hex.BLUE, false);          getHexAt(currentHex, x, y);          if (currentHex.x != -1) { +            enableOverlayOn(currentHex.x, currentHex.y, Hex.BLUE, true);              currentPawn = removeTopPawnFrom(currentHex); -            if (currentPawn != null) pawnsToDraw.add(currentPawn); -            line0 = getTileCenter(currentHex.x, currentHex.y); +            if (currentPawn != null) { +                enablePossibleMoves(false); +                enablePossibleTargets(false); +                pawnsToDraw.add(currentPawn); +            }          }      }      public void touchUp(float x, float y)      { +        if (currentHex.x != -1) +            enableOverlayOn(currentHex.x, currentHex.y, Hex.BLUE, false);          getHexAt(currentHex, x, y);          if (currentPawn != null) { +            enableOverlayOn(currentHex.x, currentHex.y, Hex.BLUE, true);              pawnsToDraw.remove(currentPawn); -            movePawnTo(currentPawn, currentHex); -            currentPawn = null; -        } else { -            debugMap(); +            if (currentHex.x != -1) { +                movePawnTo(currentPawn, currentHex); +                showPossibleActions(currentPawn); +            } else { +                resetPawnMoves(currentPawn); +            }          }      } -    public void showMoves(float x, float y) +    public void showPossibleActions(Pawn pawn)      { -        for(GridPoint2 hex : areaPoints) -            enableOverlayOn(hex.x, hex.y, Hex.GREEN, false); +        possibleMovesFrom(pawn, currentHex.x, currentHex.y, possibleMoves); +        enablePossibleMoves(true); -        getHexAt(currentHex, x, y); -        Pawn pawn = getTopPawnAt(currentHex); -        if (pawn == null) return; -        for(GridPoint2 hex : reachableFrom(pawn, currentHex.x, currentHex.y)) -            enableOverlayOn(hex.x, hex.y, Hex.GREEN, true); -        for(GridPoint2 hex : openToAttackFrom(pawn, currentHex.x, currentHex.y)) -            enableOverlayOn(hex.x, hex.y, Hex.RED, true); +        possibleTargetsFrom(pawn, currentHex.x, currentHex.y, possibleTargets); +        enablePossibleTargets(true);      } -    public void lineOfSight(float x, float y) +    public void enablePossibleMoves(boolean enable)      { -        getHexAt(lineHex, x, y); -        line1 = getTileCenter(lineHex.x, lineHex.y); - -        for(GridPoint2 hex : areaPoints) -            enableOverlayOn(hex.x, hex.y, Hex.RED, false); - -        for(GridPoint2 hex : lineOfSight(currentHex.x, currentHex.y, lineHex.x, lineHex.y)) -            enableOverlayOn(hex.x, hex.y, Hex.RED, true); +        for(GridPoint2 hex : possibleMoves) +            enableOverlayOn(hex.x, hex.y, Hex.GREEN, enable);      } -    @Override -    public void drawDebug(ShapeRenderer debugShapes) +    public void enablePossibleTargets(boolean enable)      { -        super.drawDebug(debugShapes); -        debugShapes.line(line0.x, line0.y, line1.x, line1.y); -    } - -    private void debugMap() -    { -        int o = Hex.FOG; -        if (hexOn && (t == Hex.Terrain.CLEAR)) { -            hexOn = false; -        } else { -            hexOn = true; -            if (roadsOn) { -                roadsOn = false; -                t = Hex.Terrain.OFFMAP; -            } else if (t == Hex.Terrain.CLEAR) { -                o = Hex.GREEN; -                t = Hex.Terrain.WOODS; -            } else if (t == Hex.Terrain.WOODS) { -                o = Hex.BLUE; -                t = Hex.Terrain.HILLS; -            } else if (t == Hex.Terrain.HILLS) { -                o = Hex.RED; -                t = Hex.Terrain.TOWN; -            } else if (t == Hex.Terrain.TOWN) { -                o = Hex.FOG; -                roadsOn = true; -            } else if (t == Hex.Terrain.OFFMAP) { -                o = Hex.FOG; -                t = Hex.Terrain.CLEAR; -            } -        } - -        for (int j = 0; j < cfg.rows; j++) { -            int colOffset = ((j +1) / 2); -            for (int i = colOffset; i < (cfg.cols + colOffset); i++) { -                Hex hex = getHex(i,j); -                disableOverlaysOn(i, j); -                if (hexOn) { -                    if (roadsOn) { -                        if (hex.roads != 0) -                            enableOverlayOn(i, j, o, true); -                    } else if (hex.terrain == t) -                        enableOverlayOn(i, j, o, true); -                } -            } -        } +        for(GridPoint2 hex : possibleTargets) +            enableOverlayOn(hex.x, hex.y, Hex.RED, enable);      }  } diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index 0dbb4a9..b2222d6 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -138,7 +138,7 @@ public class GameScreen implements Screen                  float deltaX = ((x - dragPos.x) * cam.zoom * screenToViewport.x);                  float deltaY = ((dragPos.y - y) * cam.zoom * screenToViewport.y);                  dragPos.set(x, y); -                if(map.drag(deltaX, deltaY)) { +                if (map.drag(deltaX, deltaY)) {                      cam.unproject(touchPos.set(x, y, 0));                      map.getHexAt(cell, touchPos.x, touchPos.y);                  } else { @@ -154,12 +154,6 @@ public class GameScreen implements Screen                      dragPos.set(x, y);                      cam.unproject(touchPos.set(x, y, 0));                      map.touchDown(touchPos.x, touchPos.y); -                } else if (button == Input.Buttons.RIGHT) { -                    cam.unproject(touchPos.set(x, y, 0)); -                    map.showMoves(touchPos.x, touchPos.y); -                } else { -                    cam.unproject(touchPos.set(x, y, 0)); -                    map.lineOfSight(touchPos.x, touchPos.y);                  }                  return true;              } | 
