feat: add camera class

This commit is contained in:
2025-10-18 01:31:36 +02:00
parent eb10933f4b
commit e154a1fde9

43
src/camera.py Normal file
View File

@@ -0,0 +1,43 @@
from src.vec import Vec
class Camera:
UNIT_RATIO = 150
def __init__(self) -> None:
self.pos: Vec = Vec()
self.up: Vec = Vec(0, -1)
self.size: Vec = Vec(600, 600)
self.zoom: float = 1
def set_pos(self, pos: Vec):
self.pos = pos
def set_direction(self, up: Vec):
self.up = up.normalized
def set_size(self, size: Vec):
self.size = size
@property
def center(self) -> Vec:
return self.size / 2
def screen2world(self, screen_pos: Vec) -> Vec:
delta: Vec = screen_pos - self.center
delta /= self.zoom * self.UNIT_RATIO
dx: float = delta.x
dy: float = delta.y
v1: Vec = self.up.perp * dx
v2: Vec = self.up * dy
return self.pos + v1 + v2
def world2screen(self, world_pos: Vec) -> Vec:
delta: Vec = world_pos - self.pos
dy: float = -delta.dot(self.up)
dx: float = delta.dot(self.up.perp)
screen_delta: Vec = Vec(dx, dy) * self.zoom * self.UNIT_RATIO
screen_pos: Vec = self.center + screen_delta
return screen_pos