diff --git a/bin/tfg/Camera.class b/bin/tfg/Camera.class new file mode 100644 index 0000000..4034950 Binary files /dev/null and b/bin/tfg/Camera.class differ diff --git a/bin/tfg/Game.class b/bin/tfg/Game.class index ab17ed3..096f174 100644 Binary files a/bin/tfg/Game.class and b/bin/tfg/Game.class differ diff --git a/bin/tfg/Player.class b/bin/tfg/Player.class index d2cf8cf..378b102 100644 Binary files a/bin/tfg/Player.class and b/bin/tfg/Player.class differ diff --git a/src/tfg/Camera.java b/src/tfg/Camera.java new file mode 100644 index 0000000..0b735af --- /dev/null +++ b/src/tfg/Camera.java @@ -0,0 +1,35 @@ +package tfg; + +import org.jsfml.graphics.RenderWindow; +import org.jsfml.graphics.View; +import org.jsfml.system.Vector2f; + +public class Camera { + public int[] currentPos = {0, 0}; + private static RenderWindow window; + + public Camera(RenderWindow newWindow) { + window = newWindow; + } + + public static void SetWindow(RenderWindow newWindow) { + window = newWindow; + } + + public static void MoveTo(Vector2f toLoc, float step) { + View defaultView = (View) window.getDefaultView(); + View view = new View(vectorLerp(defaultView.getCenter(), + toLoc, step), defaultView.getSize()); + window.setView(view); + } + + public static float Lerp(float x0, float x1, float m) { + return x0 + m * (x1-x0); + } + + public static Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { + return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m)); + } + + public static void Rotate() {} +} diff --git a/src/tfg/Game.java b/src/tfg/Game.java index aba84fa..78af144 100644 --- a/src/tfg/Game.java +++ b/src/tfg/Game.java @@ -11,8 +11,6 @@ import org.jsfml.window.Keyboard.Key; import org.jsfml.window.VideoMode; import org.jsfml.window.event.Event; -import java.util.Collections; - /** * TFG Game's main class. * @author Ritchie Cunningham @@ -22,6 +20,7 @@ public class Game { private final String renderWindowTitle = "TFG Game"; private final Vector2i renderWindowDimensions = new Vector2i(640, 480); private Player player; + private Camera camera; private boolean renderWindowFocused = true; private Font pixel = new Font(); private int fps; @@ -47,6 +46,7 @@ public class Game { player = new Player(); player.changeMap(new Map(10, 10, Tile.SAND)); + camera = new Camera(renderWindow); } /** @@ -116,6 +116,7 @@ public class Game { public void handleLogic() { player.update(); + Camera.MoveTo(player.getPosition(), 0.5f); } public void handleDrawing() { diff --git a/src/tfg/Player.java b/src/tfg/Player.java index 5bf3907..6865f91 100644 --- a/src/tfg/Player.java +++ b/src/tfg/Player.java @@ -71,6 +71,10 @@ public class Player implements Drawable { playerLoc = new Location(0, 0); } + public Vector2f getPosition() { + return playerSprite.getPosition(); + } + public IntRect getTextureCoords() { IntRect textureCoordsRect = new IntRect(0,0,0,0); @@ -147,7 +151,7 @@ public class Player implements Drawable { playerSprite.setPosition( new Vector2f(tempPosition.x*playerSize.x, (tempPosition.y*playerSize.x)-(playerSize.y-playerSize.x))); - + playerSprite.setTextureRect(getTextureCoords()); RenderStates newStates = new RenderStates(playerSpritesheetTexture); playerSprite.draw(target, newStates);