|
@@ -3,35 +3,35 @@ package pathgame;
|
|
|
import me.hammerle.snuviengine.api.IGame;
|
|
|
import me.hammerle.snuviengine.api.Renderer;
|
|
|
import pathgame.algorithm.TravellingSalesAlg;
|
|
|
+import pathgame.gameplay.Camera;
|
|
|
import pathgame.gameplay.Gamestate;
|
|
|
import pathgame.gameplay.Gamestates;
|
|
|
import pathgame.gameplay.Keys;
|
|
|
-import pathgame.rendering.TileMapRenderer;
|
|
|
-import pathgame.tilemap.TileMap;
|
|
|
-import pathgame.tilemap.TileMapGenerator;
|
|
|
+import pathgame.gameplay.Level;
|
|
|
import pathgame.gameplay.Player;
|
|
|
+import pathgame.rendering.TileMapRenderer;
|
|
|
import pathgame.gameplay.menu.Menu;
|
|
|
import pathgame.rendering.HUDRenderer;
|
|
|
import pathgame.rendering.MenuRenderer;
|
|
|
import pathgame.rendering.PlayerRenderer;
|
|
|
import pathgame.rendering.TileRenderer;
|
|
|
+import pathgame.tilemap.TileMap;
|
|
|
|
|
|
public class PathGame implements IGame
|
|
|
{
|
|
|
+
|
|
|
private final Gamestate gamestate = new Gamestate();
|
|
|
|
|
|
- private final TileMapRenderer mapRenderer = new TileMapRenderer();
|
|
|
- private TileMap map = TileMapGenerator.getMap(50, 50, 15);
|
|
|
+ private final Level level = new Level();
|
|
|
|
|
|
private final PlayerRenderer playerRenderer = new PlayerRenderer();
|
|
|
- private final Player player = new Player(10, 10);
|
|
|
+ private final TileMapRenderer mapRenderer = new TileMapRenderer();
|
|
|
|
|
|
private final Menu menu = new Menu();
|
|
|
private final MenuRenderer menuRenderer = new MenuRenderer();
|
|
|
private final HUDRenderer hudRenderer = new HUDRenderer();
|
|
|
|
|
|
- private float lastScale = 1.0f;
|
|
|
- private float scale = 1.0f;
|
|
|
+ private final Camera cam = new Camera();
|
|
|
|
|
|
public PathGame()
|
|
|
{
|
|
@@ -40,40 +40,43 @@ public class PathGame implements IGame
|
|
|
@Override
|
|
|
public void tick()
|
|
|
{
|
|
|
- map.tick();
|
|
|
+ cam.tick(level);
|
|
|
+
|
|
|
+ level.getMap().tick();
|
|
|
mapRenderer.tick();
|
|
|
if(gamestate.getState() == Gamestates.GAMEPLAY)
|
|
|
{
|
|
|
- player.tick(map);
|
|
|
+ level.getPlayer().tick(level.getMap());
|
|
|
+ if(level.getPlayer().isMoving())
|
|
|
+ {
|
|
|
+ cam.reset();
|
|
|
+ }
|
|
|
}
|
|
|
- menu.tick(gamestate);
|
|
|
+ menu.tick(gamestate, level);
|
|
|
|
|
|
- lastScale = scale;
|
|
|
- if(Keys.ZOOM_IN_KEY.isDown())
|
|
|
- {
|
|
|
- scale *= 1.1f;
|
|
|
- }
|
|
|
- else if(Keys.ZOOM_OUT_KEY.isDown())
|
|
|
- {
|
|
|
- scale /= 1.1f;
|
|
|
- }
|
|
|
-
|
|
|
if(Keys.TEST_KEY.getTime() == 1)
|
|
|
{
|
|
|
- map = TileMapGenerator.getMap(50, 50, 15);
|
|
|
- System.out.println(map.getNumberOfTowns());
|
|
|
- TravellingSalesAlg.calcSalesPathLen(map);
|
|
|
+ level.nextLevel();
|
|
|
+ TravellingSalesAlg.calcSalesPathLen(level.getMap());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void renderTick(Renderer r, float lag)
|
|
|
{
|
|
|
- float interScale = lastScale + (scale - lastScale) * lag;
|
|
|
+ TileMap map = level.getMap();
|
|
|
+ Player player = level.getPlayer();
|
|
|
+
|
|
|
+ float zoomRestrictionX = r.getViewWidth() / (map.getWidth() * TileRenderer.TILE_SIZE);
|
|
|
+ float zoomRestrictionY = (r.getViewHeight() - HUDRenderer.OFFSET_Y) / (map.getHeight() * TileRenderer.TILE_SIZE);
|
|
|
+
|
|
|
+ cam.limitScale(Math.max(zoomRestrictionX, zoomRestrictionY));
|
|
|
+ float interScale = cam.getInterpolatedScale(lag);
|
|
|
+
|
|
|
mapRenderer.setScale(interScale);
|
|
|
|
|
|
- float offX = getMapOffsetX(r, lag, interScale);
|
|
|
- float offY = getMapOffsetY(r, lag, interScale);
|
|
|
+ float offX = getMapOffsetX(map, player, r, lag, interScale);
|
|
|
+ float offY = getMapOffsetY(map, player, r, lag, interScale) + HUDRenderer.OFFSET_Y;
|
|
|
|
|
|
mapRenderer.renderTick(map, r, false, offX, offY);
|
|
|
switch(gamestate.getState())
|
|
@@ -85,44 +88,46 @@ public class PathGame implements IGame
|
|
|
case MENU:
|
|
|
menuRenderer.renderTick(r, lag, menu);
|
|
|
break;
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private float getMapOffsetX(Renderer r, float lag, float interScale)
|
|
|
+ private float getMapOffsetX(TileMap map, Player player, Renderer r, float lag, float interScale)
|
|
|
{
|
|
|
float ix = (player.getLastX() + (player.getX() - player.getLastX()) * lag) * interScale * TileRenderer.TILE_SIZE;
|
|
|
float offX = (-ix + r.getViewWidth() * 0.5f) - TileRenderer.TILE_SIZE * 0.5f * interScale;
|
|
|
|
|
|
- if(offX < -mapRenderer.getWidth(map) + r.getViewWidth())
|
|
|
+ float minOffX = -mapRenderer.getWidth(map) + r.getViewWidth();
|
|
|
+ if(offX < minOffX)
|
|
|
{
|
|
|
- return -mapRenderer.getWidth(map) + r.getViewWidth();
|
|
|
+ return cam.getCamOffsetX(minOffX, minOffX, lag, interScale);
|
|
|
}
|
|
|
else if(offX > 0.0f)
|
|
|
{
|
|
|
- return 0.0f;
|
|
|
+ return cam.getCamOffsetX(0.0f, minOffX, lag, interScale);
|
|
|
}
|
|
|
- return offX;
|
|
|
+ return cam.getCamOffsetX(offX, minOffX, lag, interScale);
|
|
|
}
|
|
|
|
|
|
- private float getMapOffsetY(Renderer r, float lag, float interScale)
|
|
|
+ private float getMapOffsetY(TileMap map, Player player, Renderer r, float lag, float interScale)
|
|
|
{
|
|
|
+ float viewHeight = r.getViewHeight() - HUDRenderer.OFFSET_Y;
|
|
|
float iy = (player.getLastY() + (player.getY() - player.getLastY()) * lag) * interScale * TileRenderer.TILE_SIZE;
|
|
|
- float offY = (-iy + r.getViewHeight() * 0.5f) - TileRenderer.TILE_SIZE * 0.5f * interScale;
|
|
|
+ float offY = (-iy + viewHeight * 0.5f) - TileRenderer.TILE_SIZE * 0.5f * interScale;
|
|
|
|
|
|
- if(offY < -mapRenderer.getHeight(map) + r.getViewHeight())
|
|
|
+ float minOffY = -mapRenderer.getHeight(map) + viewHeight;
|
|
|
+ if(offY < minOffY)
|
|
|
{
|
|
|
- return -mapRenderer.getHeight(map) + r.getViewHeight();
|
|
|
+ return cam.getCamOffsetY(minOffY, minOffY, lag, interScale);
|
|
|
}
|
|
|
else if(offY > 0.0f)
|
|
|
{
|
|
|
- return 0.0f;
|
|
|
+ return cam.getCamOffsetY(0.0f, minOffY, lag, interScale);
|
|
|
}
|
|
|
- return offY;
|
|
|
+ return cam.getCamOffsetY(offY, minOffY, lag, interScale);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onStop()
|
|
|
{
|
|
|
}
|
|
|
-}
|
|
|
+}
|