|
@@ -1,77 +1,90 @@
|
|
|
package pathgame;
|
|
|
|
|
|
import me.hammerle.snuviengine.api.IGame;
|
|
|
-import me.hammerle.snuviengine.api.KeyBinding;
|
|
|
-import me.hammerle.snuviengine.api.KeyHandler;
|
|
|
import me.hammerle.snuviengine.api.Renderer;
|
|
|
-import org.lwjgl.glfw.GLFW;
|
|
|
+import pathgame.gameplay.Keys;
|
|
|
import pathgame.rendering.TileMapRenderer;
|
|
|
import pathgame.tilemap.TileMap;
|
|
|
import pathgame.utils.TestUtils;
|
|
|
+import pathgame.gameplay.Player;
|
|
|
+import pathgame.rendering.PlayerRenderer;
|
|
|
+import pathgame.rendering.TileRenderer;
|
|
|
|
|
|
public class PathGame implements IGame
|
|
|
{
|
|
|
private final TileMapRenderer mapRenderer = new TileMapRenderer();
|
|
|
- private final TileMap map = TestUtils.getTestMap(25, 15);
|
|
|
-
|
|
|
- private final static KeyBinding ZOOM_IN = KeyHandler.register(GLFW.GLFW_KEY_UP);
|
|
|
- private final static KeyBinding ZOOM_OUT = KeyHandler.register(GLFW.GLFW_KEY_DOWN);
|
|
|
-
|
|
|
- private final static KeyBinding UP = KeyHandler.register(GLFW.GLFW_KEY_W);
|
|
|
- private final static KeyBinding DOWN = KeyHandler.register(GLFW.GLFW_KEY_S);
|
|
|
- private final static KeyBinding LEFT = KeyHandler.register(GLFW.GLFW_KEY_A);
|
|
|
- private final static KeyBinding RIGHT = KeyHandler.register(GLFW.GLFW_KEY_D);
|
|
|
+ private final TileMap map = TestUtils.getTestMap(33, 25);
|
|
|
+
|
|
|
+ private final PlayerRenderer playerRenderer = new PlayerRenderer();
|
|
|
+ private final Player player = new Player();
|
|
|
|
|
|
- private float x = 0.0f;
|
|
|
- private float y = 0.0f;
|
|
|
+ private float lastScale = 1.0f;
|
|
|
+ private float scale = 1.0f;
|
|
|
|
|
|
public PathGame()
|
|
|
{
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@Override
|
|
|
public void tick()
|
|
|
{
|
|
|
mapRenderer.tick();
|
|
|
+ player.tick(map);
|
|
|
|
|
|
- if(ZOOM_IN.isDown())
|
|
|
+ lastScale = scale;
|
|
|
+ if(Keys.ZOOM_IN_KEY.isDown())
|
|
|
{
|
|
|
- mapRenderer.setScale(mapRenderer.getScale() * 1.05f);
|
|
|
+ scale *= 1.1f;
|
|
|
}
|
|
|
- if(ZOOM_OUT.isDown())
|
|
|
+ else if(Keys.ZOOM_OUT_KEY.isDown())
|
|
|
{
|
|
|
- mapRenderer.setScale(mapRenderer.getScale() / 1.05f);
|
|
|
+ scale /= 1.1f;
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void renderTick(Renderer r, float lag)
|
|
|
+ {
|
|
|
+ float interScale = lastScale + (scale - lastScale) * lag;
|
|
|
+ mapRenderer.setScale(interScale);
|
|
|
|
|
|
- if(UP.isDown())
|
|
|
+ float offX = getMapOffsetX(r, lag, interScale);
|
|
|
+ float offY = getMapOffsetY(r, lag, interScale);
|
|
|
+
|
|
|
+ mapRenderer.renderTick(map, r, false, offX, offY);
|
|
|
+ playerRenderer.renderTick(map, mapRenderer, r, player, lag, offX, offY);
|
|
|
+ }
|
|
|
+
|
|
|
+ private float getMapOffsetX(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())
|
|
|
{
|
|
|
- y -= 20;
|
|
|
+ return -mapRenderer.getWidth(map) + r.getViewWidth();
|
|
|
}
|
|
|
- if(DOWN.isDown())
|
|
|
+ else if(offX > 0.0f)
|
|
|
{
|
|
|
- y += 20;
|
|
|
+ return 0.0f;
|
|
|
}
|
|
|
- if(LEFT.isDown())
|
|
|
+ return offX;
|
|
|
+ }
|
|
|
+
|
|
|
+ private float getMapOffsetY(Renderer r, float lag, float interScale)
|
|
|
+ {
|
|
|
+ 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;
|
|
|
+
|
|
|
+ if(offY < -mapRenderer.getHeight(map) + r.getViewHeight())
|
|
|
{
|
|
|
- x -= 20;
|
|
|
+ return -mapRenderer.getHeight(map) + r.getViewHeight();
|
|
|
}
|
|
|
- if(RIGHT.isDown())
|
|
|
+ else if(offY > 0.0f)
|
|
|
{
|
|
|
- x += 20;
|
|
|
+ return 0.0f;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void renderTick(Renderer r, float lag)
|
|
|
- {
|
|
|
- mapRenderer.renderTick(map, r, false, x, y);
|
|
|
-
|
|
|
- r.translateTo(0.0f, 0.0f);
|
|
|
- r.updateMatrix();
|
|
|
- r.setTextureEnabled(false);
|
|
|
- r.setColorEnabled(true);
|
|
|
- r.getColorRenderer().drawRectangle(0, 0, mapRenderer.getWidth(map), 10, 0xFF0000FF);
|
|
|
- r.getColorRenderer().drawRectangle(0, 0, 10, mapRenderer.getHeight(map), 0xFF0000FF);
|
|
|
+ return offY;
|
|
|
}
|
|
|
|
|
|
@Override
|