Пример #1
0
class Scene(object):
    __gameEngine = None
    __cameraPosition = LPoint3f(38, -80, 65)
    __cameraDirection = LPoint3f(0, -25, 0)
    __objects = []
    __gui = None
    __background = None
    __gameState = None

    def __init__(self, base, gameEngine, gameState):
        self.__base = base
        self.__gameEngine = gameEngine
        self.setCamera()
        self.__base.taskMgr.add(self.updateTask, "updateTask")
        self.__gameEngine.accept('a', self.switchColliderDisplay)
        self.__gameEngine.accept('r', self.restart)
        self.__gameEngine.accept('escape', self.backToMenu)
        self.__gameState = gameState
        self.__gui = GUI(self.__gameEngine, self.__base, self.__gameState)
        self.__background = ParallaxBackground(self.__gameEngine, self.__base)

    def setCamera(self):
        self.__base.disableMouse()
        self.__base.camera.setPos(self.__cameraPosition)
        self.__base.camera.setHpr(self.__cameraDirection)

    def showMenu(self):
        self.__gui.showMenu()
        pass

    def loadGame(self, isPreviousStatePause):
        if not isPreviousStatePause:
            self.destroyObjects()
            self.__objects.append(Board(self.__gameEngine, self.__base))
            self.__objects.append(Paddle(self.__gameEngine, self.__base, self.__background))
            self.__objects.append(Ball(self.__gameEngine, self.__base, self))
            self.__objects.append(LevelBlocks(self.__gameEngine, self.__base))
            self.__objects[3].loadLevelBlocks()
            self.drawObjects()

    def pauseGame(self):
        pass

    def destroyObjects(self):
        for obj in self.__objects:
            obj.destroy()
        del self.__objects[:]

    def drawObjects(self):
        for obj in self.__objects:
            obj.draw()

    def updateTask(self, task):
        elapsedTime = self.__gameEngine.getTime()
        self.__gui.update(elapsedTime)
        for obj in self.__objects:
            obj.update(elapsedTime)
        return task.cont

    def switchColliderDisplay(self):
        global collshow
        collshow=not collshow
        if collshow:
            self.__base.cTrav.showCollisions(self.__base.render)
            l=self.__base.render.findAllMatches("**/+CollisionNode")
            for cn in l: cn.show()
        else:
            self.__base.cTrav.hideCollisions()
            l=self.__base.render.findAllMatches("**/+CollisionNode")
            for cn in l: cn.hide()

    def restart(self):
        self.destroyObjects()
        self.__gui.hideGameOver()
        self.loadGame(False)

    def ballLost(self):
        self.__gui.showGameOver()

    def backToMenu(self):
        self.destroyObjects()
        self.__gui.backToMenu()