diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/src/ch/asynk/tankontank/screens/GameScreen.java | 70 | 
1 files changed, 41 insertions, 29 deletions
| diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index ee52985..e3f6a65 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -17,7 +17,6 @@ import com.badlogic.gdx.graphics.g2d.Batch;  import com.badlogic.gdx.graphics.g2d.SpriteBatch;  import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.GridPoint2;  import com.badlogic.gdx.math.Vector2;  import com.badlogic.gdx.math.Vector3;  import com.badlogic.gdx.math.MathUtils; @@ -26,10 +25,7 @@ import com.badlogic.gdx.utils.viewport.ScreenViewport;  import ch.asynk.tankontank.TankOnTank; -import ch.asynk.tankontank.game.Hud; -import ch.asynk.tankontank.game.Map;  import ch.asynk.tankontank.game.GameCtrl; -import ch.asynk.tankontank.game.GameFactory;  public class GameScreen implements Screen  { @@ -46,14 +42,13 @@ public class GameScreen implements Screen      private final OrthographicCamera cam;      private final FitViewport mapViewport; +    private final ScreenViewport hudViewport;      private final Batch mapBatch; +    private final Batch hudBatch;      private ShapeRenderer debugShapes = null;      private final TankOnTank game; -    private GameFactory factory; -    private Map map; -    private Hud hud;      private GameCtrl ctrl;      private Vector2 dragPos = new Vector2(); @@ -64,25 +59,23 @@ public class GameScreen implements Screen      {          this.game = game; -        factory = new GameFactory(game.manager); +        ctrl = new GameCtrl(game); -        hud = new Hud(game, new ScreenViewport()); - -        map = factory.getMap(game.manager, GameFactory.MapType.MAP_A); -        virtualWidth = map.getWidth(); -        virtualHeight = map.getHeight(); +        virtualWidth = ctrl.map.getWidth(); +        virtualHeight = ctrl.map.getHeight();          cam = new OrthographicCamera(virtualWidth, virtualHeight);          cam.setToOrtho(false);          mapViewport = new FitViewport(virtualWidth, virtualHeight, cam);          mapViewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true); -        ctrl = new GameCtrl(map); +        hudViewport = new  ScreenViewport(); +        hudViewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);          mapBatch = new SpriteBatch(); +        hudBatch = new SpriteBatch();          if (DEBUG) debugShapes = new ShapeRenderer(); -        factory.fakeSetup(map);          Gdx.input.setInputProcessor(getMultiplexer());      } @@ -119,8 +112,11 @@ public class GameScreen implements Screen              {                  if (button == Input.Buttons.LEFT) {                      dragPos.set(x, y); -                    unproject(x, y, touchPos); -                    ctrl.touchDown(touchPos.x, touchPos.y); +                    unprojectToHud(x, y, touchPos); +                    if (!ctrl.hud.touchDown(touchPos.x, touchPos.y)) { +                        unprojectToMap(x, y, touchPos); +                        ctrl.touchDown(touchPos.x, touchPos.y); +                    }                  }                  return true; @@ -129,8 +125,11 @@ public class GameScreen implements Screen              public boolean touchUp(int x, int y, int pointer, int button)              {                  if (button == Input.Buttons.LEFT) { -                    unproject(x, y, touchPos); -                    ctrl.touchUp(touchPos.x, touchPos.y); +                    unprojectToHud(x, y, touchPos); +                    if (!ctrl.hud.touchUp(touchPos.x, touchPos.y)) { +                        unprojectToMap(x, y, touchPos); +                        ctrl.touchUp(touchPos.x, touchPos.y); +                    }                  }                  return true;              } @@ -147,12 +146,20 @@ public class GameScreen implements Screen          return multiplexer;      } -    private void unproject(int x, int y, Vector3 v) +    private void unprojectToMap(int x, int y, Vector3 v)      {          cam.unproject(v.set(x, y, 0), mapViewport.getScreenX(), mapViewport.getScreenY(),                  mapViewport.getScreenWidth(), mapViewport.getScreenHeight());      } +    private void unprojectToHud(int x, int y, Vector3 v) +    { +        x -= mapViewport.getLeftGutterWidth(); +        y += mapViewport.getBottomGutterHeight(); +        hudViewport.getCamera().unproject(v.set(x, y, 0), hudViewport.getScreenX(), hudViewport.getScreenY(), +                mapViewport.getScreenWidth(), mapViewport.getScreenHeight()); +    } +      private void clampCameraPos()      {          float cx = cam.viewportWidth * cam.zoom / 2f; @@ -169,24 +176,29 @@ public class GameScreen implements Screen          cam.update(); -        map.animate(delta); +        ctrl.hud.animate(delta); +        ctrl.map.animate(delta);          mapBatch.setProjectionMatrix(cam.combined);          mapBatch.begin(); -        map.draw(mapBatch); +        ctrl.map.draw(mapBatch);          mapBatch.end(); -        hud.act(delta); -        hud.draw(); -          if (DEBUG) {              Gdx.gl.glEnable(GL20.GL_BLEND);              debugShapes.setAutoShapeType(true);              debugShapes.setProjectionMatrix(cam.combined);              debugShapes.begin(); -            map.drawDebug(debugShapes); +            ctrl.map.drawDebug(debugShapes);              debugShapes.end();          } + +        Camera hudCam = hudViewport.getCamera(); +        hudCam.update(); +        hudBatch.setProjectionMatrix(hudCam.combined); +        hudBatch.begin(); +        ctrl.hud.draw(hudBatch); +        hudBatch.end();      }      @Override @@ -194,6 +206,7 @@ public class GameScreen implements Screen      {          // Gdx.app.debug("GameScreen", "resize (" + width + "," + height + ")");          mapViewport.update(width, height); +        // hudViewport.update(width, height);          maxZoomOut = Math.min((virtualWidth / cam.viewportWidth), (virtualHeight / cam.viewportHeight));          cam.zoom = MathUtils.clamp(cam.zoom, ZOOM_IN_MAX, maxZoomOut); @@ -205,12 +218,11 @@ public class GameScreen implements Screen      public void dispose()      {          // Gdx.app.debug("GameScreen", "dispose()"); -        hud.dispose(); -        map.dispose(); -        factory.dispose();          game.unloadAssets();          mapBatch.dispose(); +        hudBatch.dispose();          if (DEBUG) debugShapes.dispose(); +        ctrl.dispose();      }      @Override | 
