Example #1
0
 def __init__(self):
     self.clock = pygame.time.Clock()
     self.renderer = Renderer()
     self.resourceManager = ResourceManager()
     self.eventManager = EventManager()
     self.fps = 60
     self.baseLogic = None
     self.networkManager = None
     self.caption = ''
     self.renderFlags = 0
     self.runGame = True
     
     #Set the global engine and event manager
     ECOM.engine = self
     ECOM.eventManager = self.eventManager
Example #2
0
class PyHopeEngineApp:
    '''The main engine.'''
    
    def __init__(self):
        self.clock = pygame.time.Clock()
        self.renderer = Renderer()
        self.resourceManager = ResourceManager()
        self.eventManager = EventManager()
        self.fps = 60
        self.baseLogic = None
        self.networkManager = None
        self.caption = ''
        self.renderFlags = 0
        self.runGame = True
        
        #Set the global engine and event manager
        ECOM.engine = self
        ECOM.eventManager = self.eventManager

    def run(self):
        '''Main loop of the engine'''
        self.initGame()
        
        while self.runGame:
            elapsedTime = self.clock.get_time()
            self.handlePygameEvents()
            self.eventManager.update()
            
            if self.networkManager is not None:
                self.networkManager.update()
            
            self.baseLogic.update(elapsedTime)
            
            self.renderer.clearSurface(ECOM.Colors.BLACK)
            for view in self.baseLogic.gameViewList:
                view.render()
            
            if ECOM.Debug.PHYSICS:
                self.baseLogic.physics.debugDraw()
            
            pygame.display.update()
            self.clock.tick(self.fps)
    
    def initGame(self):
        '''Initialize the renderer and game'''
        self.renderer.initMainSurface(self.caption, self.renderFlags)
        self.createLogicAndView()
        ECOM.actorManager = self.baseLogic.actorManager
                   
    def createLogicAndView(self):
        raise NotImplementedError("createLogicAndView not implemented.")
        
    def handlePygameEvents(self):
        '''Handles events created through pygame'''
        inputEvents = [pyLocals.KEYDOWN, pyLocals.KEYUP, pyLocals.MOUSEMOTION, 
                       pyLocals.MOUSEBUTTONUP, pyLocals.MOUSEBUTTONDOWN]
        for event in pygame.event.get():
            if event.type == pyLocals.QUIT:
                self.terminate()
            elif event.type in inputEvents:
                if event.type == pyLocals.KEYDOWN:
                    if event.key == pyLocals.K_ESCAPE:
                        self.terminate()
                for view in self.baseLogic.gameViewList:
                    view.onPygameEvent(event)

    def setupClient(self):
        '''Sets up a client network manager'''
        self.networkManager = ClientManager()
        self.networkManager.init()
    
    def setupServer(self):
        '''Sets up a server network manager'''
        self.networkManager = ServerManager()
        self.networkManager.init()
        
    def createNetworkEventForwarder(self):
        '''Creates an event forwarder for clients and server to communicate'''
        self.networkEventForwarder = NetworkEventForwarder()

    def cleanUp(self):
        if self.networkManager is not None:
            self.networkManager.cleanUp()
        
        if self.baseLogic is not None:
            self.baseLogic.cleanUp()
    
    def terminate(self):
        self.cleanUp()
        pygame.quit()
        sys.exit()