diff --git a/bin/tfg/AnimatedSprite.class b/bin/tfg/AnimatedSprite.class index c2cc485..16c2a12 100644 Binary files a/bin/tfg/AnimatedSprite.class and b/bin/tfg/AnimatedSprite.class differ diff --git a/bin/tfg/Camera.class b/bin/tfg/Camera.class index aefc46a..087525a 100644 Binary files a/bin/tfg/Camera.class and b/bin/tfg/Camera.class differ diff --git a/bin/tfg/Game.class b/bin/tfg/Game.class index b650aa9..d4c6755 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 39ac2b5..bc06e22 100644 Binary files a/bin/tfg/Player.class and b/bin/tfg/Player.class differ diff --git a/src/tfg/AnimatedSprite.java b/src/tfg/AnimatedSprite.java index 8fba2f4..d0fe7d2 100644 --- a/src/tfg/AnimatedSprite.java +++ b/src/tfg/AnimatedSprite.java @@ -161,4 +161,12 @@ public class AnimatedSprite { IntRect textureCoordsRect = new IntRect(topX, topY, spriteSize.x, spriteSize.y); return textureCoordsRect; } + + /** + * Get the size of the sprite as a vector. + * @return Integer vector containing the sprite size. + */ + public Vector2i getSpriteSize() { + return spriteSize; + } } diff --git a/src/tfg/Camera.java b/src/tfg/Camera.java index aa7bb87..5b6c5fc 100644 --- a/src/tfg/Camera.java +++ b/src/tfg/Camera.java @@ -3,6 +3,7 @@ package tfg; import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.View; import org.jsfml.system.Vector2f; +import org.jsfml.system.Vector2i; /** * Camera that can center on various objects. @@ -28,14 +29,18 @@ public class Camera { defaultView = (View) window.getDefaultView(); } - /** - * Center the camera on the following position. - * @param pos Position to center the camera on. - * @param step - */ - public void centerOn(Vector2f pos, float step) { + public void centerOn(AnimatedSprite s) { + /* Copy the default view. */ View newView = new View(defaultView.getCenter(), defaultView.getSize()); - newView.setCenter(pos); + Vector2f spritePos = s.getSprite().getPosition(); + Vector2i spriteSize = s.getSpriteSize(); + /* Convert the size to a float. */ + Vector2f newSpriteSize = new Vector2f(spriteSize.x, spriteSize.y); + /* Divide the size in half (for centering). */ + newSpriteSize = Vector2f.div(newSpriteSize, 2); + Vector2f cameraPos = Vector2f.add(spritePos, newSpriteSize); + cameraPos = new Vector2f(Math.round(cameraPos.x), Math.round(cameraPos.y)); + newView.setCenter(cameraPos); window.setView(newView); } @@ -45,20 +50,4 @@ public class Camera { public void centerOnDefault() { window.setView(defaultView); } - - - /** - * - * @param x0 - * @param x1 - * @param m - * @return - */ - public float Lerp(float x0, float x1, float m) { - return x0 + m * (x1-x0); - } - - public Vector2f vectorLerp(Vector2f v0, Vector2f v1, float m) { - return new Vector2f(Lerp(v0.x, v1.x, m), Lerp(v0.y, v1.y, m)); - } } diff --git a/src/tfg/Game.java b/src/tfg/Game.java index 26ae0ed..07c66f3 100644 --- a/src/tfg/Game.java +++ b/src/tfg/Game.java @@ -4,7 +4,6 @@ import org.jsfml.graphics.Color; import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.TextStyle; import org.jsfml.system.Clock; -import org.jsfml.system.Vector2f; import org.jsfml.system.Vector2i; import org.jsfml.window.Keyboard; import org.jsfml.window.Keyboard.Key; @@ -158,8 +157,7 @@ public class Game { /* The window has automatic double-buffering. */ window.clear(); /* Draw each object like layers, background to foreground. */ - Vector2f playerPos = player.getSprite().getPosition(); - camera.centerOn(playerPos, 0); + camera.centerOn(player.getAnimatedSprite()); window.draw(player.getMap()); window.draw(player); camera.centerOnDefault(); diff --git a/src/tfg/Player.java b/src/tfg/Player.java index 47c49ab..95856bd 100644 --- a/src/tfg/Player.java +++ b/src/tfg/Player.java @@ -134,8 +134,8 @@ public class Player extends Entity implements Drawable { * Get animated sprite. * @return Animated sprite. */ - public Sprite getSprite() { - return playerSprite.getSprite(); + public AnimatedSprite getAnimatedSprite() { + return playerSprite; } /**