81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
import pygame as pg
|
|
import numpy as np
|
|
from math import *
|
|
from src.camera import Camera
|
|
from src.object import Object
|
|
|
|
class Renderer:
|
|
__clock: pg.time.Clock
|
|
screen: pg.Surface
|
|
fps: int
|
|
caption: str
|
|
camera: Camera
|
|
window_width: int
|
|
window_height: int
|
|
objects: list[Object]
|
|
|
|
def __init__(self, window_width: int, window_height: int):
|
|
self.__clock = pg.time.Clock()
|
|
self.screen = pg.display.set_mode((window_width, window_height))
|
|
self.window_width = window_width
|
|
self.window_height = window_height
|
|
self.fps = 60
|
|
self.caption = "window"
|
|
self.camera = Camera(self)
|
|
self.objects = []
|
|
|
|
def __quit(self):
|
|
pg.quit()
|
|
exit()
|
|
|
|
def __handle_event(self, event: pg.event.Event):
|
|
if event.type == pg.QUIT:
|
|
self.__quit()
|
|
if not self.camera.is_static:
|
|
key = pg.key.get_pressed()
|
|
if key[pg.K_w]:
|
|
self.camera.move_forward()
|
|
if key[pg.K_s]:
|
|
self.camera.move_backward()
|
|
if key[pg.K_a]:
|
|
self.camera.move_left()
|
|
if key[pg.K_d]:
|
|
self.camera.move_right()
|
|
if key[pg.K_SPACE]:
|
|
self.camera.move_up()
|
|
if key[pg.K_LSHIFT]:
|
|
self.camera.move_down()
|
|
if key[pg.K_EQUALS]:
|
|
self.camera.fov_up()
|
|
if key[pg.K_MINUS]:
|
|
self.camera.fov_down()
|
|
if key[pg.K_r]:
|
|
self.camera.pitch_down()
|
|
if key[pg.K_f]:
|
|
self.camera.pitch_up()
|
|
if key[pg.K_q]:
|
|
self.camera.yaw_down()
|
|
if key[pg.K_e]:
|
|
self.camera.yaw_up()
|
|
if key[pg.K_z]:
|
|
self.camera.roll_down()
|
|
if key[pg.K_c]:
|
|
self.camera.roll_up()
|
|
|
|
def __update(self):
|
|
self.screen.fill((255,255,255))
|
|
for o in self.objects:
|
|
o.draw()
|
|
pg.display.update()
|
|
|
|
def add_object(self, object: Object):
|
|
object.attach_renderer(self)
|
|
self.objects.append(object)
|
|
|
|
def run(self):
|
|
pg.display.set_caption(self.caption)
|
|
while True:
|
|
for event in pg.event.get():
|
|
self.__handle_event(event)
|
|
self.__update()
|
|
self.__clock.tick(self.fps) |