Esempio n. 1
0
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()