[Fix] Render issue and update camera.

This commit is contained in:
Ritchie Cunningham 2022-03-08 22:34:49 +00:00
parent 4b2803c7b9
commit 4f08f51ae3
8 changed files with 23 additions and 28 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -161,4 +161,12 @@ public class AnimatedSprite {
IntRect textureCoordsRect = new IntRect(topX, topY, spriteSize.x, spriteSize.y); IntRect textureCoordsRect = new IntRect(topX, topY, spriteSize.x, spriteSize.y);
return textureCoordsRect; return textureCoordsRect;
} }
/**
* Get the size of the sprite as a vector.
* @return Integer vector containing the sprite size.
*/
public Vector2i getSpriteSize() {
return spriteSize;
}
} }

View File

@ -3,6 +3,7 @@ package tfg;
import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.RenderWindow;
import org.jsfml.graphics.View; import org.jsfml.graphics.View;
import org.jsfml.system.Vector2f; import org.jsfml.system.Vector2f;
import org.jsfml.system.Vector2i;
/** /**
* Camera that can center on various objects. * Camera that can center on various objects.
@ -28,14 +29,18 @@ public class Camera {
defaultView = (View) window.getDefaultView(); defaultView = (View) window.getDefaultView();
} }
/** public void centerOn(AnimatedSprite s) {
* Center the camera on the following position. /* Copy the default view. */
* @param pos Position to center the camera on.
* @param step
*/
public void centerOn(Vector2f pos, float step) {
View newView = new View(defaultView.getCenter(), defaultView.getSize()); 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); window.setView(newView);
} }
@ -45,20 +50,4 @@ public class Camera {
public void centerOnDefault() { public void centerOnDefault() {
window.setView(defaultView); 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));
}
} }

View File

@ -4,7 +4,6 @@ import org.jsfml.graphics.Color;
import org.jsfml.graphics.RenderWindow; import org.jsfml.graphics.RenderWindow;
import org.jsfml.graphics.TextStyle; import org.jsfml.graphics.TextStyle;
import org.jsfml.system.Clock; import org.jsfml.system.Clock;
import org.jsfml.system.Vector2f;
import org.jsfml.system.Vector2i; import org.jsfml.system.Vector2i;
import org.jsfml.window.Keyboard; import org.jsfml.window.Keyboard;
import org.jsfml.window.Keyboard.Key; import org.jsfml.window.Keyboard.Key;
@ -158,8 +157,7 @@ public class Game {
/* The window has automatic double-buffering. */ /* The window has automatic double-buffering. */
window.clear(); window.clear();
/* Draw each object like layers, background to foreground. */ /* Draw each object like layers, background to foreground. */
Vector2f playerPos = player.getSprite().getPosition(); camera.centerOn(player.getAnimatedSprite());
camera.centerOn(playerPos, 0);
window.draw(player.getMap()); window.draw(player.getMap());
window.draw(player); window.draw(player);
camera.centerOnDefault(); camera.centerOnDefault();

View File

@ -134,8 +134,8 @@ public class Player extends Entity implements Drawable {
* Get animated sprite. * Get animated sprite.
* @return Animated sprite. * @return Animated sprite.
*/ */
public Sprite getSprite() { public AnimatedSprite getAnimatedSprite() {
return playerSprite.getSprite(); return playerSprite;
} }
/** /**