Player Camera - UQcsse3200/2024-studio-2 GitHub Wiki
Overview
The player camera follows the player character during game play, ensuring that they are focused in the center of the screen. The camera can be zoomed in or out by scrolling the mouse wheel up or down, respectively. This allows for players to choose the magnification level which best suits their game play.
CameraComponent
The camera is attached to the Player
entity using the CameraComponent
class. This class has an update
method which changes the position of the camera to equal to equal the center position of the player's character sprite.
@Override
public void update() {
Vector2 position = entity.getCenterPosition();
if (!lastPosition.epsilonEquals(entity.getCenterPosition())) {
camera.position.set(position, 0f);
lastPosition = position;
camera.update();
}
}
An example showing how the game camera follows the player is shown below.
CameraZoomComponent
The camera zoom is handled by a separate component called a CameraZoomComponent
. This component listens for a cameraZoom
event which is triggered whenever the player scrolls the mouse wheel. Upon firing, the zoom
method is called in the component class which is responsible for zooming the camera in or out using the resize
method in the camera component.
public void zoom(float amountX, float amountY) {
Camera camera = cameraComponent.getCamera();
// Calculate new dimensions for camera viewport
int screenWidth = Gdx.graphics.getWidth();
int screenHeight = Gdx.graphics.getHeight();
float gameWidth = camera.viewportWidth;
gameWidth = gameWidth + ZOOM_AMOUNT * amountY;
// Ensure that camera doesn't exceed zoom amount
gameWidth = Math.clamp(gameWidth, minZoom, maxZoom);
cameraComponent.resize(screenWidth, screenHeight, gameWidth);
}
For this reason, a CameraZoomComponent
can only be attached to an entity which also has a CameraComponent
.
There are three main parameters in the zoom
methods:
ZOOM_AMOUNT
: the amount by which to zoom in or outminZoom
: the maximum amount that the camera can zoom inmaxZoom
: the maximum amount that the camera can zoom out
An example showing how the camera zoom responds to user input is shown below.
Planned Features
One planned feature for the camera is to make it behave differently when a player reaches the world border. Currently the player can also see unrendered map because the camera always focuses the player in the center of the screen. It would improve game play experience to make the camera "detach" when the player character reaches a world border so as to not show unrendered terrain, and "reattach" when the player moves away.