class MainLoop: def __init__(self): try: os.environ['SDL_VIDEO_WINDOW_POS'] = str(44) + "," + str(44) self.commandQueue_l = [] self.projectionMatrix = None self.configs = Configs() self.globalStates = GlobalStates() self.commander = Commander(self) self.globalStates.winWidth_i = self.configs.initScreenSizeWidth_i self.globalStates.winHeight_i = self.configs.initScreenSizeHeight_i p.init() winSize_t = ( self.globalStates.winWidth_i, self.globalStates.winHeight_i ) if self.configs.fullScreen_b: p.display.set_mode(winSize_t, pl.DOUBLEBUF | pl.OPENGL | pl.FULLSCREEN) else: p.display.set_mode(winSize_t, pl.DOUBLEBUF | pl.OPENGL | pl.RESIZABLE) self.player = Player() self.camera = Camera("main_camera", self.player, (0.0, 1.6, 0.0)) self.controller = Controller(self, self.player) self.resourceManager = ResourceManager(self.globalStates) self.resourceManager.runProcesses() self.resourceManager.requestLevelLoad("entry", 5.0) self.console = self.resourceManager.overlayUiMan.consoleWin self.fMan = FrameManager( False, self.resourceManager.overlayUiMan.frameDisplay.update, 0 ) self.renderDude = RenderingDude(self.player, self.resourceManager, self.camera, self.configs) self.logicalDude = LogicalDude(self.resourceManager, self.player, self.commandQueue_l, self.globalStates) self.globalStates.menuPopUp_b = True self.controller.enableMouseControl(False) self.initGL() except: self.terminate() raise @staticmethod def initGL(): gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) def terminate(self) -> None: try: self.resourceManager.terminate() except: pass p.quit() def run(self) -> None: while True: self.fMan.update() ######## User input ######## self.controller.update() ######## Game logic ######## self.logicalDude.update() self.commander.update() ######## Resource ######## self.resourceManager.update() ######## Render ######## gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT) gl.glClearBufferfv(gl.GL_COLOR, 0, (0.0, 0.0, 0.0)) gl.glEnable(gl.GL_CULL_FACE) gl.glEnable(gl.GL_DEPTH_TEST) self.renderDude.renderShadow(self.globalStates.winWidth_i, self.globalStates.winHeight_i) self.renderDude.render( self.projectionMatrix, self.camera.getViewMatrix() ) p.display.flip() def onResize(self) -> None: w = self.globalStates.winWidth_i h = self.globalStates.winHeight_i gl.glViewport(0, 0, w, h) self.projectionMatrix = mm.getPerspectiveMat4(90.0, w / h, 0.1, 100.0) self.resourceManager.resize()