39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from src.engine.entity import Entity
|
|
|
|
|
|
class Camera:
|
|
def __init__(self):
|
|
self.x = 0
|
|
self.y = 0
|
|
self.zoom = 1.
|
|
|
|
# Décalage lors du mouvement du joueur
|
|
self.player_moving_offset = 100
|
|
|
|
# Variables utilisées pour le scrolling
|
|
self.target_x = self.x
|
|
self.target_y = self.y
|
|
self.target_zoom = self.zoom
|
|
|
|
self.smoothness = 20.
|
|
|
|
self.followed_entity: Entity | None = None
|
|
|
|
def update(self):
|
|
"""Met à jour la caméra. Permet, par exemple, de faire le scrolling."""
|
|
|
|
# Si on suit une entité, on met à jour les coordonnées de suivi
|
|
if self.followed_entity is not None:
|
|
self.target_x = (self.followed_entity.x + self.followed_entity.mouvements[0] *
|
|
self.player_moving_offset / self.zoom)
|
|
self.target_y = (self.followed_entity.y + self.followed_entity.mouvements[1] *
|
|
self.player_moving_offset / self.zoom)
|
|
|
|
self.x += (self.target_x - self.x) / self.smoothness
|
|
self.y += (self.target_y - self.y) / self.smoothness
|
|
self.zoom += (self.target_zoom - self.zoom) / self.smoothness
|
|
|
|
def follow_entity(self, entity: Entity | None):
|
|
"""Active le suivit de l'entité donnée. Mettre `None` pour retirer le suivit."""
|
|
self.followed_entity = entity
|