DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
396b134
Branches
Tags
master
voxels
interactive.py
Big code cleanup and better arrow keys
dkl9
commited
396b134
at 2025-179 22:38:38
interactive.py
Blame
History
Raw
from libs import * import camera import huds def reshape(w, h): glViewport(0, 0, w, h) return (w, h) class InteractiveCamera(camera.Camera): def __init__(self, **kwargs): super().__init__(**kwargs) self.sensitivity = kwargs.get("sensitivity", 0.005) self.vaa_vel = vec([0, 0, 0]) self.speed = kwargs.get("speed", 0.05) self.hud = { "crosshair": huds.crosshair() } def set_focus(self, focus): pygame.event.set_grab(focus) pygame.mouse.set_visible(not focus) pygame.mouse.set_pos([self.viewport[0] / 2, self.viewport[1] / 2]) self.hud["crosshair"].pos[0] = 2 * (not focus) def get_focus(self): return not pygame.mouse.get_visible() def mouse_move(self, dx, dy): self.theta = (self.theta - self.sensitivity * dx) % (2 * np.pi) self.phi += self.sensitivity * dy self.phi = min(np.pi / 2, max(-np.pi / 2, self.phi)) def update_motion(self, pressed, mg=None): diffs = [0, 0, 0] for i in range(3): diffs[i] = pressed[ARROWS[2 * i]] - pressed[ARROWS[2 * i + 1]] self.vaa_vel = vec(diffs) def vaa_mat(self): l = self.looking() l[1] = 0 u = self.up() return vec([normalise(np.cross(l, u)), u, normalise(l)]) def update_pos(self): self.pos += self.speed * self.vaa_mat() @ self.vaa_vel.T def handle_event(self, ev, mg): match ev.type: case pygame.KEYUP | pygame.KEYDOWN if ev.key in ARROWS: self.update_motion(pygame.key.get_pressed(), mg) case pygame.MOUSEMOTION if self.get_focus(): self.mouse_move(ev.rel[0], -ev.rel[1]) case pygame.WINDOWSIZECHANGED | pygame.WINDOWRESIZED: self.viewport = reshape(ev.x, ev.y) def draw_hud(self, regions, perf): for ent in self.hud.values(): self.draw(ent)