Beispiel #1
0
 def set_view(self, view='front', num=0):
     views = {
         'front': (Vec3(90, 0, 0), Vec3(90, 0, 0)),
         'back': (Vec3(-90, 0, 0), Vec3(-90, 0, 0)),
         'left': (Vec3(0, 0, 0), Vec3(0, 0, 0)),
         'right': (Vec3(180, 0, 0), Vec3(180, 0, 0)),
         'top': (Vec3(90, 0, 0), Vec3(90, 90, 0)),
         'bottom': (Vec3(90, 0, 0), Vec3(90, -90, 0))
     }
     if view in views:
         if self.node.get_hpr(render).almost_equal(
                 views[view][0]) and self.gimbal.get_hpr(
                     render).almost_equal(views[view][1]):
             return
         else:
             if num > 3:
                 self.node.set_hpr(render, views[view][0])
                 self.gimbal.set_hpr(render, views[view][1])
                 self.node.set_pos(render, (0, 0, 0))
                 return
             Sequence(
                 Parallel(
                     LerpHprInterval(self.gimbal,
                                     0.21,
                                     views[view][1],
                                     other=render),
                     LerpHprInterval(self.node,
                                     0.21,
                                     views[view][0],
                                     other=render),
                     LerpPosInterval(self.node,
                                     0.21,
                                     Vec3(0, 0, 0),
                                     other=render)),
                 Func(self.set_view, view, 1 + num)).start()
Beispiel #2
0
 def sync_bld(self):
     self.gfx_np = loader.loadModel(self.path)
     self.gfx_np.flattenLight()
     self.gfx_np.reparentTo(self.parent)
     self.gfx_np.set_h(180)
     self.gfx_np.set_scale(1.5)
     self.gfx_np.set_pos(0, 0, 1.5)
     self.ival = LerpHprInterval(self.gfx_np, 3, (180, 0, 360), (180, 0, 0))
     self.ival.loop()
    def push(self):
        """Camera push caused by a kick/explosion."""
        if self._move_int is not None:
            self._move_int.pause()

        if self._turn_int is not None:
            self._turn_int.pause()

        self._move_int = Sequence()

        self._target.setZ(base.cam.getZ() -
                          random.uniform(-0.02, 0.02))  # noqa: F821
        self._target.setX(base.cam.getX() +
                          random.uniform(-0.03, 0.03))  # noqa: F821
        self._target.setY(base.cam.getY() +
                          random.uniform(-0.03, 0.03))  # noqa: F821

        self._move_int.append(
            Parallel(
                LerpPosInterval(
                    base.cam,
                    0.15,
                    self._target,
                    bakeInStart=False,  # noqa: F821
                ),
                LerpHprInterval(
                    self._np,
                    0.15,
                    (
                        self._np.getH() + random.uniform(-1, 1),
                        self._np.getP() + random.uniform(-2, 2),
                        self._np.getR() + random.uniform(-3, 3),
                    ),
                ),
            ))
        self._target.setX(base.cam.getX())  # noqa: F821
        self._target.setY(base.cam.getY())  # noqa: F821
        self._target.setZ(base.cam.getZ())  # noqa: F821

        self._move_int.append(
            Parallel(
                LerpPosInterval(
                    base.cam,  # noqa: F821
                    0.5,
                    self._target,
                    bakeInStart=False,
                    blendType="easeOut",
                ),
                LerpHprInterval(
                    self._np,
                    0.5,
                    (self._np.getH(), 0, self._np.getR()),
                    blendType="easeOut",
                ),
            ))
        self._move_int.start()
Beispiel #4
0
    def setDrawbridgesLerpR(self, r):
        angle = 0
        if r == 1:
            angle = -70

        for drawbridge in self.drawbridges:
            if drawbridge.getR() == angle:
                return None

            ival = LerpHprInterval(drawbridge, 4.0, Vec3(drawbridge.getH(), drawbridge.getP(), angle))
            ival.start()
 def setDrawbridgesLerpR(self, r):
     angle = 0
     if r == 1:
         angle = -70
     for drawbridge in self.drawbridges:
         if drawbridge.getR() == angle:
             return
         ival = LerpHprInterval(
             drawbridge, 4.0,
             Vec3(drawbridge.getH(), drawbridge.getP(), angle))
         ival.start()
    def _turn(self, h, r):
        """Turn camera with a single interval (on key press).

        Args:
            h (int): Translation for camera heading, angle.
            r (int): Translation for camera rolling, angle.
        """
        if self._turn_int is not None and self._turn_int.isPlaying():
            return

        self._turn_int = LerpHprInterval(self._np, 4,
                                         (self._np.getH() + h, 0, r))
        self._turn_int.start()
Beispiel #7
0
class PandaHandler(DirectObject):

    def __init__(self):
        DirectObject.__init__(self)
        # base.disableMouse()
        # base.cam.setPos(0, -28, 6)
        self.testModel = loader.loadModel('panda')
        self.testModel.reparentTo(render)
        # print self.testModel.getPos()
        self.rotateInterval = LerpHprInterval(self.testModel, 3, Point3(360, 0, 0))
        self.rotateInterval.loop()

        self.screenTexture = Texture()
        self.screenTexture.setMinfilter(Texture.FTLinear)
        base.win.addRenderTexture(self.screenTexture, GraphicsOutput.RTMCopyRam)
Beispiel #8
0
 def think(self, curTic, curT, unwalkables):
     self.TX = self.nextTX
     self.TY = self.nextTY
     self.lastDirection = self.direction
     self.direction = self.__chooseNewWalkDirection(unwalkables)
     self.nextTX, self.nextTY = self.__applyDirection(self.direction, self.TX, self.TY)
     self.occupiedTiles = [(self.TX, self.TY), (self.nextTX, self.nextTY)]
     if curTic == self.lastTicBeforeRender:
         fromCoords = self.maze.tile2world(self.TX, self.TY)
         toCoords = self.maze.tile2world(self.nextTX, self.nextTY)
         self.fromPos.set(fromCoords[0], fromCoords[1], self.SUIT_Z)
         self.toPos.set(toCoords[0], toCoords[1], self.SUIT_Z)
         self.moveIval = LerpPosInterval(self.suit, self.cellWalkDuration, self.toPos, startPos=self.fromPos, name=self.uniqueName(self.MOVE_IVAL_NAME))
         if self.direction != self.lastDirection:
             self.fromH = self.directionHs[self.lastDirection]
             toH = self.directionHs[self.direction]
             if self.fromH == 270 and toH == 0:
                 self.fromH = -90
             elif self.fromH == 0 and toH == 270:
                 self.fromH = 360
             self.fromHpr.set(self.fromH, 0, 0)
             self.toHpr.set(toH, 0, 0)
             turnIval = LerpHprInterval(self.suit, self.turnDuration, self.toHpr, startHpr=self.fromHpr, name=self.uniqueName('turnMazeSuit'))
             self.moveIval = Parallel(self.moveIval, turnIval, name=self.uniqueName(self.MOVE_IVAL_NAME))
         else:
             self.suit.setH(self.directionHs[self.direction])
         moveStartT = float(self.nextThinkTic) / float(self.ticFreq)
         self.moveIval.start(curT - (moveStartT + self.gameStartTime))
     self.nextThinkTic += self.ticPeriod
Beispiel #9
0
    def init_game(self):
        configs.IN_MENU = False
        interval = LerpHprInterval(self.cameraPivot, 1, (0,10,0), (0,0,0))
        interval2 = LerpPosInterval(self.cameraPivot, 1, (0,0,-0.05), (0,0,0))
        interval.start()
        interval2.start()
        for entity_id, entity in configs.ENTITIES.items():
            if entity['CATEGORY'] == 'button':
                entity['BUTTON'].destroy()
                try:
                    entity['R_NODE'].removeNode()
                except: 
                    print "nothing to remove"
                try:
                    entity['L_NODE'].removeNode()
                except: 
                    print "nothing to remove"
            del(configs.ENTITIES[entity_id])
        used_positions = []
        for p in range(25):
            position = (random.uniform(-1.6, 1.6), 0, random.uniform(-0.8, 0.8))
            heading = random.randint(0,360)
            empty_space = False
            while empty_space == False:
                empty_space = True
                for other_position in used_positions:
                    distance = pow(pow((other_position[0] - position[0]),2) + pow((other_position[2] - position[2]),2),0.5)
                    if distance < 0.25:
                        empty_space = False
                        position = (random.uniform(-1.6, 1.6), 0, random.uniform(-0.8, 0.8))

            btn_left = configs.BUTTONS_MAP[p][0]
            btn_right = configs.BUTTONS_MAP[p][1]
            if (btn_right == '' or btn_left == '') and configs.ARDUINO_PLAYER_ON[p] == 0:
                continue
            used_positions += [position]
            init_player(self, btn_left, btn_right, p, pos=position, heading=heading)
        
        configs.BONUS_START_TIME[2] = globalClock.getFrameTime()

        if used_positions == []:
            self.init_menu()
        else:
            self.countDown = taskMgr.add(countDown, "countDown", extraArgs=[self, 5], appendTask=True) 
            self.gameTask = taskMgr.add(self.gameLoop, "gameLoop") 
Beispiel #10
0
    def __init__(self):

        ShowBase.__init__(self)

        model = self.loader.loadModel("/e/models/ralph/ralph.egg")
        model.reparentTo(self.render)
        model.setPos(0, 0, 0)

        posItvl = LerpPosInterval(model,
                                  1,
                                  pos = (1, 0, 0),
                                  )
        hprItvl = LerpHprInterval(model,
                                  1,
                                  hpr = (50, 50, 50))

        posItvl.loop()
        hprItvl.loop()

        self.trackball.node().setPos(0, 10, -2)
Beispiel #11
0
 def __process_player_info(self, data_lst, sender):
     from racing.car.car import NetworkCar
     pos = (data_lst[1], data_lst[2], data_lst[3])
     hpr = (data_lst[4], data_lst[5], data_lst[6])
     velocity = (data_lst[7], data_lst[8], data_lst[9])
     self.server_info[sender] = (pos, hpr, velocity)
     car_name = eng.car_mapping[sender]
     for car in [car for car in game.cars if car.__class__ == NetworkCar]:
         if car_name in car.path:
             LerpPosInterval(car.gfx.nodepath, .2, pos).start()
             LerpHprInterval(car.gfx.nodepath, .2, hpr).start()
Beispiel #12
0
 def __process_game_packet(data_lst):
     from racing.car.car import NetworkCar
     for i in range(1, len(data_lst), 10):
         car_name = data_lst[i]
         car_pos = (data_lst[i + 1], data_lst[i + 2], data_lst[i + 3])
         car_hpr = (data_lst[i + 4], data_lst[i + 5], data_lst[i + 6])
         cars = self.mdt.logic.cars
         netcars = [car for car in cars if car.__class__ == NetworkCar]
         for car in netcars:
             if car_name in car.path:
                 LerpPosInterval(car.gfx.nodepath, .2, car_pos).start()
                 LerpHprInterval(car.gfx.nodepath, .2, car_hpr).start()
Beispiel #13
0
class RocketGfx(Gfx):

    def __init__(self, mdt, parent, path):
        self.gfx_np = None
        self.parent = parent
        self.path = path
        Gfx.__init__(self, mdt)

    def sync_bld(self):
        self.gfx_np = loader.loadModel(self.path)
        self.gfx_np.flattenLight()
        self.gfx_np.reparentTo(self.parent)
        self.gfx_np.set_h(180)
        self.gfx_np.set_scale(1.5)
        self.gfx_np.set_pos(0, 0, 1.5)
        self.ival = LerpHprInterval(self.gfx_np, 3, (180, 0, 360), (180, 0, 0))
        self.ival.loop()

    def destroy(self):
        self.gfx_np = self.gfx_np.remove_node()
        self.parent = self.ival = self.ival.finish()
        Gfx.destroy(self)
    def move_to(self, angle, callback=lambda: None):
        """Gradually moves the pivot HPR until it is at the specified angles.  Optionally calls the specified
        callback when the movement is finished.

        Parameters
        ----------
        angle:  tuple of float
                The final rotation after the movement is complete.

        callback:  function
                   A callback function, called after the movement is complete.
        """

        move = LerpHprInterval(self.pivot, 0.2, Point3(angle[0], angle[1], angle[2]))
        sequence = Sequence(
                        move,
                        Func(callback),
        )
        sequence.start()
Beispiel #15
0
    def animateArrival(self):
        zoomOutInterval = self.camera.posInterval(2,
                                                  Point3(0, -20, 0),
                                                  startPos=Point3(0, -1000, 0),
                                                  blendType='easeOut')
        spinInterval = LerpHprInterval(self.monitorNP, 2,
                                       Point3(0, 0, 0),
                                       startHpr=Point3(0, 90, 90),
                                       blendType='easeOut')

        def backgroundColor(color):
            self.win.setClearColor(color)

        colorInterval = LerpFunc(backgroundColor,
                                 duration=3,
                                 fromData=self.win.getClearColor(),
                                 toData=Vec4(0.5, 0.5, 0.8, 1),
                                 blendType='easeIn')

        dropKeyboardInterval = LerpPosInterval(self.keyboardNP, 2,
                                               Point3(0, -5, -2.5),
                                               startPos=Point3(0, -5, 10),
                                               blendType='easeOut')

        parallel = Parallel(zoomOutInterval, spinInterval, colorInterval)
        sequence = Sequence(parallel, dropKeyboardInterval)

        sequence.setDoneEvent('arrivalFinished')

        def arrivalFinished():
            self.activateConsole()

        self.accept('arrivalFinished', arrivalFinished)

        sequence.start()

        # for the impatient...
        def cancelStartupSequence():
            sequence.finish()

        self.acceptOnce('enter', cancelStartupSequence)
        self.acceptOnce('esc', cancelStartupSequence)
Beispiel #16
0
 def __init__(self):
     super().__init__()
     self.set_background_color(Vec4(0, 0, 0, 1))
     self.accept('a', self.add_capsule)
     self.accept('b', self.add_cube)
     self.accept('c', self.add_cone)
     self.accept('p', self.add_prism)
     self.accept('d', self.add_dome)
     self.accept('s', self.add_sphere)
     self.accept('t', self.add_tree)
     self.accept('f1', self.toggle_wireframe)
     self.accept('escape', sys.exit, [0])
     dl = DirectionalLight('sun')
     dl.set_color_temperature(8000)
     dl_np = self.render.attach_new_node(dl)
     al = AmbientLight('moon')
     al.set_color(Vec4(0.2, 0.2, 0.2, 1))
     al_np = self.render.attach_new_node(al)
     self.render.set_light(dl_np)
     self.render.set_light(al_np)
     self.render.set_shader_auto(True)
     LerpHprInterval(dl_np, 5, (360, 0, 0)).loop()
Beispiel #17
0
    def animateArrival(self):
        """
        Cheesy animation introducing viewer to the DESK and TYPEWRITER
        :return:
        """
        camMoveInterval = LerpPosInterval(self.base.camera, 2,
                                          self.cameraTarget)
        camHprInterval = LerpHprInterval(self.base.camera, 2,
                                         self.cameraHprTarget)

        dropKeyboardInterval = LerpPosInterval(self.typewriterNP,
                                               2,
                                               self.typewriterTarget,
                                               startPos=self.typewriterStart,
                                               blendType='easeOut')

        sequence = Parallel(camMoveInterval, camHprInterval,
                            dropKeyboardInterval)

        sequence.setDoneEvent('arrivalFinished')

        def arrivalFinished():
            self.activateTypewriter()
            self.base.ignore('enter')
            self.base.ignore('esc')

        self.base.accept('arrivalFinished', arrivalFinished)

        sequence.start()

        # for the impatient...
        def cancelStartupSequence():
            sequence.finish()

        self.base.acceptOnce('enter', cancelStartupSequence)
        self.base.acceptOnce('esc', cancelStartupSequence)
class CameraController:
    """Object to configure camera and its controls."""
    def __init__(self):
        self._np = None  # the main camera node
        self._target = Vec3(2, 0, MAX_Z)  # the current movement final pos
        self._move_int = None  # current move interval
        self._turn_int = None  # current rotation interval
        self._with_mouse_move = None  # camera is on move by mouse
        self._with_mouse_move_x = None

        # camera position before toggling centered view
        self._last_pos = None
        self._last_hpr = None
        self._last_np_pos = None
        self._last_np_hpr = None
        self._is_centered = False

        base.camLens.setNear(0.25)  # noqa: F821
        base.camLens.setFar(8)  # noqa: F821

    def _disable_ctrl_keys(self):
        """Ignore all the camera control keys."""
        for key in (
                "arrow_up",
                "arrow_down",
                "arrow_left",
                "arrow_right",
                "arrow_up-up",
                "arrow_down-up",
                "arrow_left-up",
                "arrow_right-up",
                "alt-arrow_left",
                "alt-arrow_right",
                "alt-arrow_up",
                "alt-arrow_down",
                "+",
                "-",
                "+-up",
                "--up",
                "wheel_up",
                "wheel_down",
                "mouse2",
                "mouse2-up",
        ):
            base.ignore(key)  # noqa: F821

    def _move(self, x, y, time):
        """Start camera movement with an interval (on key press).

        Args:
            x (float): Translation along x axis.
            y (float): Translation along y axis.
            time (float): Interval length.
        """
        if self._move_int is not None:
            self._move_int.pause()

        if x:
            # if camera moves forward, consider Z coordinate
            # to calibrate move limits when zoomed
            if x == 1:
                x -= MAX_Z - base.cam.getZ()  # noqa: F821

            self._target.setX(x)
        else:
            self._target.setY(y)

        self._move_int = LerpPosInterval(
            base.cam,
            time,
            self._target,
            other=self._np  # noqa: F821
        )
        self._move_int.start()

    def _move_with_mouse(self, task):
        """Implement moving camera with mouse.

        If mouse pointer touches a screen edge, move
        the camera in this direction.
        """
        if not base.mouseWatcherNode.hasMouse():  # noqa: F821
            return task.again

        x = base.mouseWatcherNode.getMouseX()  # noqa: F821
        if abs(x) > 0.98:
            self._with_mouse_move = True
            self._move(*(MAX_RIGHT_MOVE if x > 0 else MAX_LEFT_MOVE))
            self._with_mouse_move_x = False
            return task.again

        z = base.mouseWatcherNode.getMouseY()  # noqa: F821
        if abs(z) > 0.98:
            self._with_mouse_move = True
            self._move(*MAX_UP_MOVE if z > 0 else MAX_DOWN_MOVE)
            self._with_mouse_move_x = True
            return task.again

        if self._with_mouse_move:
            self._stop(self._with_mouse_move_x)
            self._with_mouse_move = False

        return task.again

    def _rotate_camera_with_mouse(self, x, z, task):
        """Rotate the main camera according to the mouse movement.

        Args:
            x (float): The original mouse X position.
            z (float): The original mouse Y position.
        """
        if not base.mouseWatcherNode.hasMouse():  # noqa: F821
            return

        new_x = base.mouseWatcherNode.getMouseX()  # noqa: F821
        new_z = base.mouseWatcherNode.getMouseY()  # noqa: F821

        if new_x - x <= -0.125:
            self._np.setH(self._np.getH() - 1.5)
        elif new_x - x >= 0.125:
            self._np.setH(self._np.getH() + 1.5)
        elif new_z - z <= -0.125:
            r = self._np.getR()
            if r < 20:
                self._np.setR(r + 1.5)
        elif new_z - z >= 0.125:
            r = self._np.getR()
            if r > -30:
                self._np.setR(r - 1.5)

        return task.again

    def _set_move_keys(self):
        """Set camera move and rotate keys."""
        # key pressed - start movement
        base.accept("arrow_up", self._move, MAX_UP_MOVE)  # noqa: F821
        base.accept("arrow_down", self._move, MAX_DOWN_MOVE)  # noqa: F821
        base.accept("arrow_left", self._move, MAX_LEFT_MOVE)  # noqa: F821
        base.accept("arrow_right", self._move, MAX_RIGHT_MOVE)  # noqa: F821

        # key released - stop
        base.accept("arrow_up-up", self._stop, [True])  # noqa: F821
        base.accept("arrow_down-up", self._stop, [True])  # noqa: F821
        base.accept("arrow_left-up", self._stop, [False])  # noqa: F821
        base.accept("arrow_right-up", self._stop, [False])  # noqa: F821

        # key pressed - start turning
        base.accept("alt-arrow_left", self._turn, [-360, 0])  # noqa: F821
        base.accept("alt-arrow_right", self._turn, [360, 0])  # noqa: F821
        base.accept("alt-arrow_up", self._turn, [0, -60])  # noqa: F821
        base.accept("alt-arrow_down", self._turn, [0, 25])  # noqa: F821

        # camera zooming controls
        base.accept("+", self._zoom, [0.7, 1.2, 1.75])  # noqa: F821
        base.accept("-", self._zoom, [2, 3, 1.75])  # noqa: F821
        base.accept("+-up", self._stop, [False, True, True])  # noqa: F821
        base.accept("--up", self._stop, [False, True, True])  # noqa: F821

        base.accept("wheel_up", self._zoom_with_mouse, [-0.25])  # noqa: F821
        base.accept("wheel_down", self._zoom_with_mouse, [0.25])  # noqa: F821

        base.accept("mouse2", self._turn_camera_with_mouse)  # noqa: F821
        base.accept(  # noqa: F821
            "mouse2-up",
            taskMgr.remove,  # noqa: F821
            extraArgs=["rotate_camera_with_mouse"],
        )

    def _stop(self, stop_x, stop_zoom=False, is_hard=False):
        """Stop moving and rotating camera (on key release).

        Args:
            stop_x (bool):
                True - movement along x axis should be stopped.
                False - movement along y axis should be stopped.
            stop_zoom (bool):
                True if camera stopped zoom movement.
            is_hard (bool):
                If False, camera will be stopped with an deceleration
                interval. If True, stopping will be immediate.
        """
        if self._move_int is not None:
            self._move_int.pause()

        if self._turn_int is not None:
            self._turn_int.pause()

        if stop_zoom:
            self._target = base.cam.getPos()  # noqa: F821
        elif stop_x:
            self._target.setX(base.cam.getX())  # noqa: F821
        else:
            self._target.setY(base.cam.getY())  # noqa: F821

        if not is_hard:
            self._move_int = LerpPosInterval(
                base.cam,
                0.75,
                self._target,
                other=self._np  # noqa: F821
            )
            self._move_int.start()

    def _toggle_centered_view(self):
        """Set camera onto default position.

        Centered position is optimal for characters manipulations.
        Press repeating returns camera to the previous position.
        """
        if not self._is_centered:
            self._stop(False, is_hard=True)

            self._last_pos = base.cam.getPos()  # noqa: F821
            self._last_hpr = base.cam.getHpr()  # noqa: F821
            self._last_np_hpr = self._np.getHpr()

            base.cam.wrtReparentTo(base.train.model)  # noqa: F821
            base.cam.setPosHpr(0, 0, 1.8, 90, -90, 0)  # noqa: F821
            self._np.setHpr(0)

            self._disable_ctrl_keys()
            taskMgr.remove("move_camera_with_mouse")  # noqa: F821
        else:
            base.cam.wrtReparentTo(self._np)  # noqa: F821
            self._set_move_keys()

            base.cam.setPosHpr(*self._last_pos, *self._last_hpr)  # noqa: F821
            self._np.setHpr(*self._last_np_hpr)

            taskMgr.doMethodLater(  # noqa: F821
                0.1,
                self._move_with_mouse,
                "move_camera_with_mouse",
                appendTask=True)

        self._is_centered = not self._is_centered

    def _turn(self, h, r):
        """Turn camera with a single interval (on key press).

        Args:
            h (int): Translation for camera heading, angle.
            r (int): Translation for camera rolling, angle.
        """
        if self._turn_int is not None and self._turn_int.isPlaying():
            return

        self._turn_int = LerpHprInterval(self._np, 4,
                                         (self._np.getH() + h, 0, r))
        self._turn_int.start()

    def _turn_camera_with_mouse(self):
        """Start the main camera movement by mouse."""
        if not base.mouseWatcherNode.hasMouse():  # noqa: F821
            return

        taskMgr.doMethodLater(  # noqa: F821
            0.01,
            self._rotate_camera_with_mouse,
            "rotate_camera_with_mouse",
            extraArgs=[
                base.mouseWatcherNode.getMouseX(),  # noqa: F821
                base.mouseWatcherNode.getMouseY(),  # noqa: F821
            ],
            appendTask=True,
        )

    def _zoom(self, x, z, zoom_time):
        """Zoom camera.

        Args:
            x (float): Translation along x axis.
            z (float): Translation along z axis.
            zoom_time (float): Time to zoom.
        """
        if self._move_int is not None:
            self._move_int.pause()

        self._target.setX(x)
        self._target.setZ(z)

        self._move_int = LerpPosInterval(
            base.cam,
            zoom_time,
            self._target,
            other=self._np  # noqa: F821
        )
        self._move_int.start()

    def _zoom_with_mouse(self, shift):
        """Zoom camera with mouse.

        Args:
            shift (float): Direction and coefficient of move.
        """
        x, _, z = base.cam.getPos()  # noqa: F821

        new_x = x + shift
        new_z = z + shift

        if 2 >= new_x >= 0.7:
            x = new_x
        if 3 >= new_z >= 1.2:
            z = new_z

        self._zoom(x, z, 0.2)

    def enable_ctrl_keys(self):
        """Enable all the camera control keys."""
        self._set_move_keys()
        base.accept("c", self._toggle_centered_view)  # noqa: F821
        taskMgr.doMethodLater(  # noqa: F821
            0.1,
            self._move_with_mouse,
            "move_camera_with_mouse",
            appendTask=True)

    def push(self):
        """Camera push caused by a kick/explosion."""
        if self._move_int is not None:
            self._move_int.pause()

        if self._turn_int is not None:
            self._turn_int.pause()

        self._move_int = Sequence()

        self._target.setZ(base.cam.getZ() -
                          random.uniform(-0.02, 0.02))  # noqa: F821
        self._target.setX(base.cam.getX() +
                          random.uniform(-0.03, 0.03))  # noqa: F821
        self._target.setY(base.cam.getY() +
                          random.uniform(-0.03, 0.03))  # noqa: F821

        self._move_int.append(
            Parallel(
                LerpPosInterval(
                    base.cam,
                    0.15,
                    self._target,
                    bakeInStart=False,  # noqa: F821
                ),
                LerpHprInterval(
                    self._np,
                    0.15,
                    (
                        self._np.getH() + random.uniform(-1, 1),
                        self._np.getP() + random.uniform(-2, 2),
                        self._np.getR() + random.uniform(-3, 3),
                    ),
                ),
            ))
        self._target.setX(base.cam.getX())  # noqa: F821
        self._target.setY(base.cam.getY())  # noqa: F821
        self._target.setZ(base.cam.getZ())  # noqa: F821

        self._move_int.append(
            Parallel(
                LerpPosInterval(
                    base.cam,  # noqa: F821
                    0.5,
                    self._target,
                    bakeInStart=False,
                    blendType="easeOut",
                ),
                LerpHprInterval(
                    self._np,
                    0.5,
                    (self._np.getH(), 0, self._np.getR()),
                    blendType="easeOut",
                ),
            ))
        self._move_int.start()

    def set_controls(self, train):
        """Configure the main camera and its controls.

        Args:
            train (train.Train): The Train object.
        """
        base.disableMouse()  # noqa: F821

        self._np = train.node.attachNewNode("camera_node")
        base.cam.reparentTo(self._np)  # noqa: F821
        base.cam.setPos(self._target)  # noqa: F821
        base.cam.lookAt(train.model)  # noqa: F821

        self._set_move_keys()
        base.accept("c", self._toggle_centered_view)  # noqa: F821
        taskMgr.doMethodLater(  # noqa: F821
            0.1,
            self._move_with_mouse,
            "move_camera_with_mouse",
            appendTask=True)

    def set_hangar_pos(self, hangar):
        """Set camera to hangar position.

        Args:
            hangar (panda3d.core.NodePath): Hangar model.
        """
        self._disable_ctrl_keys()
        self._stop(True, is_hard=True)
        base.ignore("c")  # noqa: F821

        self._last_pos = base.cam.getPos()  # noqa: F821
        self._last_hpr = base.cam.getHpr()  # noqa: F821
        self._last_np_pos = self._np.getPos()
        self._last_np_hpr = self._np.getHpr()

        base.cam.setPos(0)  # noqa: F821
        base.cam.setHpr(0)  # noqa: F821

        self._np.reparentTo(hangar)
        self._np.setPosHpr(-0.35, 1.36, 0.12, -163, 5, 0)

    def unset_hangar_pos(self):
        """Return camera back to normal position."""
        base.cam.setPosHpr(*self._last_pos, *self._last_hpr)  # noqa: F821

        self._np.reparentTo(base.train.node)  # noqa: F821
        self._np.setPosHpr(*self._last_np_pos, *self._last_np_hpr)
Beispiel #19
0
    def __init__(self):
        builtins.app=self
        builtins.Config = Config
        #basic stuff
        self.base = ShowBase.ShowBase()
        self.base.disableMouse()
        self.base.set_background_color(0, 0, 0)
        # listen to window events
        self.accept("window-event", self._on_window_event)

        #set some shader inputs
        screen_size = Vec2(base.win.get_x_size(), base.win.get_y_size())
        render.set_shader_input('screen_size', screen_size)
        render.set_shader_input("camera_pos", base.cam.get_pos(render))

        with loading():
            #make the gui
            self.gui=UI('gui/anonymous.ttf',
                       'gui/moonhouse.ttf',
                       'gui/monosb.ttf' )
            self.gui.load_from_file('gui/gui.json')
            self.gui.show_hide('main_menu')

            #load the music
            self.music=loader.load_music('music/starflash.ogg')
            self.music.set_loop(True)

            #load sounds
            self.sfx={}
            self.sfx['up']=loader.load_sfx('sounds/up.ogg')
            self.sfx['down']=loader.load_sfx('sounds/down.ogg')
            self.sfx['yay']=loader.load_sfx('sounds/yay.ogg')

            #set volume
            self.music_volume=Config.getfloat('audio', 'music-volume')
            self.sound_volume=Config.getfloat('audio', 'sound-volume')
            base.musicManager.setVolume(self.music_volume)
            base.sfxManagerList[0].setVolume(self.sound_volume)
            self.gui['sound-volume1']['value']=self.sound_volume
            self.gui['music-volume1']['value']=self.music_volume
            self.gui['sound-volume2']['value']=self.sound_volume
            self.gui['music-volume2']['value']=self.music_volume

            #setup key binds for the camera
            self.key_binds={}
            self.key_binds['rotate']=Config.get('keys', 'camera-rotate')
            self.key_binds['pan']=Config.get('keys', 'camera-pan')
            self.key_binds['zoom_in']=Config.get('keys', 'camera-zoom-in')
            self.key_binds['zoom_out']=Config.get('keys', 'camera-zoom-out')
            self.key_binds['left']=Config.get('keys', 'camera-left')
            self.key_binds['right']=Config.get('keys', 'camera-right')
            self.key_binds['forward']=Config.get('keys', 'camera-forward')
            self.key_binds['back']=Config.get('keys', 'camera-back')
            cam_speed=Config.getfloat('control', 'camera-speed')
            cam_zoom_speed=Config.getfloat('control', 'zoom-speed')
            self.cam_driver=CameraControler(pos=(0,0,0), offset=(0, 20, 0),
                                            speed=cam_speed, zoom_speed=cam_zoom_speed)
            self.cam_driver.bind_keys(**self.key_binds)

            #setup clicking on 3d objects
            self.ray_trav = CollisionTraverser()
            self.ray_handler = CollisionHandlerQueue()
            picker_np = base.camera.attach_new_node(CollisionNode('mouseRay'))
            self.mouse_ray = CollisionRay()
            picker_np.node().add_solid(self.mouse_ray)
            self.ray_trav.add_collider(picker_np, self.ray_handler)

            #skybox
            self.skybox=loader.load_model('models/stars')
            self.skybox.reparent_to(render)
            self.skybox.set_scale(0.8)
            self.skybox.set_bin('background', 0)
            self.skybox.set_depth_write(0)
            self.skybox.set_light_off()
            self.skybox.set_transparency(TransparencyAttrib.M_none)

            self.stars0=self.make_stars(number=1000, size=8, color_variation=0.5, sigma=2.0, spread=10)
            self.stars1=self.make_stars(number=800, size=8, texture='tex/star2.png', sigma=3.0, spread=20)
            self.stars2=self.make_stars(number=300, size=24, spread=50)
            self.stars3=self.make_stars(number=100, size=32, color_variation=0.4, spread=100)
            self.stars4=self.make_stars(number=100, size=56, color_variation=0.2, spread=150)
            self.stars5=self.make_stars(number=10, size=120, color_variation=0.1, spread=100)

            LerpHprInterval(nodePath=self.stars0,duration=2000.0, hpr=(360,360,360), startHpr=(0,0,0)).loop()
            LerpHprInterval(nodePath=self.stars1,duration=2400.0, hpr=(360,360,360), startHpr=(0,0,0)).loop()
            LerpHprInterval(nodePath=self.stars2,duration=2700.0, hpr=(360,360,360), startHpr=(0,0,0)).loop()
            LerpHprInterval(nodePath=self.stars3,duration=3100.0, hpr=(360,360,360), startHpr=(0,0,0)).loop()
            LerpHprInterval(nodePath=self.stars4,duration=3700.0, hpr=(360,360,360), startHpr=(0,0,0)).loop()

            self.accept('mouse1', self.on_click)
            self.accept('mouse3', self.on_click, [True])
            self.time=0
            taskMgr.add(self.update, 'update_tsk')
            self.clock_tsk=taskMgr.doMethodLater(1.0, self.clock, 'clock_tsk')

        #everything is loaded, show it and start the music
        self.gui.fade_screen(0.5, base.get_background_color())
        self.music.play()
Beispiel #20
0
    def __init__(self):
        # Our standard title and instructions text
        self.title = OnscreenText(text="Panda3D: Tutorial - Music Box",
                                  parent=base.a2dBottomCenter,
                                  pos=(0, 0.08), scale=0.08,
                                  fg=(1, 1, 1, 1), shadow=(0, 0, 0, .5))
        self.escapeText = OnscreenText(text="ESC: Quit", parent=base.a2dTopLeft,
                                       fg=(1, 1, 1, 1), pos=(0.06, -0.1),
                                       align=TextNode.ALeft, scale=.05)

        # Set up the key input
        self.accept('escape', sys.exit)

        # Fix the camera position
        base.disableMouse()

        # Loading sounds is done in a similar way to loading other things
        # Loading the main music box song
        self.musicBoxSound = loader.loadMusic('music/musicbox.ogg')
        self.musicBoxSound.setVolume(.5)  # Volume is a percentage from 0 to 1
        # 0 means loop forever, 1 (default) means
        # play once. 2 or higher means play that many times
        self.musicBoxSound.setLoopCount(0)

        # Set up a simple light.
        self.plight = PointLight("light")
        self.plight.setColor((0.7, 0.7, 0.5, 1))
        light_path = base.render.attachNewNode(self.plight)
        light_path.setPos(0, 0, 20)
        base.render.setLight(light_path)

        alight = AmbientLight("ambient")
        alight.setColor((0.3, 0.3, 0.4, 1))
        base.render.setLight(base.render.attachNewNode(alight))

        # Enable per-pixel lighting
        base.render.setShaderAuto()

        # Sound objects do not have a pause function, just play and stop. So we will
        # Use this variable to keep track of where the sound is at when it was stoped
        # to impliment pausing
        self.musicTime = 0

        # Loading the open/close effect
        # loadSFX and loadMusic are identical. They are often used for organization
        #(loadMusic is used for background music, loadSfx is used for other effects)
        self.lidSfx = loader.loadSfx('music/openclose.ogg')
        # The open/close file has both effects in it. Fortunatly we can use intervals
        # to easily define parts of a sound file to play
        self.lidOpenSfx = SoundInterval(self.lidSfx, duration=2, startTime=0)
        self.lidCloseSfx = SoundInterval(self.lidSfx, startTime=5)

        # For this tutorial, it seemed appropriate to have on screen controls.
        # The following code creates them.
        # This is a label for a slider
        self.sliderText = OnscreenText("Volume", pos=(-0.1, 0.87), scale=.07,
                                       fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1))
        # The slider itself. It calls self.setMusicBoxVolume when changed
        self.slider = DirectSlider(pos=(-0.1, 0, .75), scale=0.8, value=.50,
                                   command=self.setMusicBoxVolume)
        # A button that calls self.toggleMusicBox when pressed
        self.button = DirectButton(pos=(.9, 0, .75), text="Open",
                                   scale=.1, pad=(.2, .2),
                                   rolloverSound=None, clickSound=None,
                                   command=self.toggleMusicBox)

        # A variable to represent the state of the simulation. It starts closed
        self.boxOpen = False

        # Here we load and set up the music box. It was modeled in a complex way, so
        # setting it up will be complicated
        self.musicBox = loader.loadModel('models/MusicBox')
        self.musicBox.setPos(0, 60, -9)
        self.musicBox.reparentTo(render)
        # Just like the scene graph contains hierarchies of nodes, so can
        # models. You can get the NodePath for the node using the find
        # function, and then you can animate the model by moving its parts
        # To see the hierarchy of a model, use, the ls function
        # self.musicBox.ls() prints out the entire hierarchy of the model

        # Finding pieces of the model
        self.Lid = self.musicBox.find('**/lid')
        self.Panda = self.musicBox.find('**/turningthing')

        # This model was made with the hinge in the wrong place
        # this is here so we have something to turn
        self.HingeNode = self.musicBox.find(
            '**/box').attachNewNode('nHingeNode')
        self.HingeNode.setPos(.8659, 6.5, 5.4)
        # WRT - ie with respect to. Reparents the object without changing
        # its position, size, or orientation
        self.Lid.wrtReparentTo(self.HingeNode)
        self.HingeNode.setHpr(0, 90, 0)

        # This sets up an interval to play the close sound and actually close the box
        # at the same time.
        self.lidClose = Parallel(
            self.lidCloseSfx,
            LerpHprInterval(self.HingeNode, 2.0, (0, 90, 0), blendType='easeInOut'))

        # Same thing for opening the box
        self.lidOpen = Parallel(
            self.lidOpenSfx,
            LerpHprInterval(self.HingeNode, 2.0, (0, 0, 0), blendType='easeInOut'))

        # The interval for turning the panda
        self.PandaTurn = self.Panda.hprInterval(7, (360, 0, 0))
        # Do a quick loop and pause to set it as a looping interval so it can be
        # started with resume and loop properly
        self.PandaTurn.loop()
        self.PandaTurn.pause()
Beispiel #21
0
    def loadPlaceGeom(self, zoneId):
        self.notify.info('loadPlaceGeom: %s' % zoneId)
        zoneId = zoneId - zoneId % 100
        if zoneId == ToontownGlobals.SellbotHQ:
            self.geom = loader.loadModel(self.cogHQExteriorModelPath)
            factoryExteriorPOV = loader.loadModel(
                'phase_9/models/cogHQ/SellbotFactoryExterior')
            factoryExteriorPOV.reparentTo(self.geom)
            factoryExteriorPOV.setPosHpr(400.62, -139.52, 15.22, 272.73, 0, 0)
            factoryExteriorPOV.setScale(0.5)
            dgLinkTunnel = self.geom.find('**/Tunnel1')
            dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot')
            factoryLinkTunnel = self.geom.find('**/Tunnel2')
            factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot')
            cogSignModel = loader.loadModel(
                'phase_4/models/props/sign_sellBotHeadHQ')
            cogSign = cogSignModel.find('**/sign_sellBotHeadHQ').copyTo(
                NodePath())
            cogSign.flattenStrong()
            cogSignModel.removeNode()
            cogSignSF = 23
            dgSign = cogSign.copyTo(dgLinkTunnel)
            dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF,
                                  cogSignSF, cogSignSF * aspectSF)
            dgSign.node().setEffect(DecalEffect.make())
            dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[-1],
                                            font=ToontownGlobals.getSuitFont(),
                                            pos=(0, -0.3),
                                            scale=TTLocalizer.SCHQLdgText,
                                            mayChange=False,
                                            parent=dgSign)
            dgText.setDepthWrite(0)
            dgText.flattenStrong()
            factorySign = cogSign.copyTo(factoryLinkTunnel)
            factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0,
                                       cogSignSF, cogSignSF,
                                       cogSignSF * aspectSF)
            factorySign.node().setEffect(DecalEffect.make())
            factoryTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Sellbot,
                font=ToontownGlobals.getSuitFont(),
                pos=TTLocalizer.SellbotFactoryPosPart1,
                scale=TTLocalizer.SellbotFactoryScalePart1,
                mayChange=False,
                parent=factorySign)
            factoryTypeText.setDepthWrite(0)
            factoryTypeText.flattenStrong()
            factoryText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=TTLocalizer.SellbotFactoryPosPart2,
                scale=TTLocalizer.SellbotFactoryScalePart2,
                mayChange=False,
                parent=factorySign)
            factoryText.setDepthWrite(0)
            factoryText.flattenStrong()
            doors = self.geom.find('**/doors')
            door0 = doors.find('**/door_0')
            door1 = doors.find('**/door_1')
            door2 = doors.find('**/door_2')
            door3 = doors.find('**/door_3')
            for door in [door0, door1, door2, door3]:
                doorFrame = door.find('**/doorDoubleFlat/+GeomNode')
                door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame)
                door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame)
                doorTrigger = door.find('**/door_trigger*')
                doorTrigger.setY(doorTrigger.getY() - 1.5)
                doorFrame.node().setEffect(DecalEffect.make())
                doorFrame.flattenStrong()
                door.flattenMedium()

            self.botcam1 = Actor(
                'phase_9/models/char/BotCam-zero.bam',
                {'botcamneutral': 'phase_9/models/char/BotCam-neutral.bam'})
            self.bossroom = Actor('phase_9/models/cogHQ/BossRoomPOV.bam')
            self.botcam1.reparentTo(self.geom)
            self.botcam1.setPos(-0.01, -39.3, 24)
            self.botcam1.loop('botcamneutral')
            self.bossroom.reparentTo(self.geom)
            self.bossroom.setPos(42, 25, 298)
            self.bossroom.setScale(0.1)
            self.spotLights = self.geom.find('**/SpotLights')
            self.spot1Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot1'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot1'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot2Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot2'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot2'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot3Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot3'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot3'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot4Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot4'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot4'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot5Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot5'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot5'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot6Sequence = Sequence(
                LerpHprInterval(self.spotLights.find('**/Spot6'),
                                7,
                                Vec3(0, 1, 10),
                                startHpr=Vec3(0, 1, -5)),
                LerpHprInterval(self.spotLights.find('**/Spot6'),
                                7,
                                Vec3(0, 1, -5),
                                startHpr=Vec3(0, 1, 10)))
            self.spot1Sequence.loop()
            self.spot2Sequence.loop()
            self.spot3Sequence.loop()
            self.spot4Sequence.loop()
            self.spot5Sequence.loop()
            self.spot6Sequence.loop()
            cogSign.removeNode()
            self.geom.flattenMedium()
        elif zoneId == ToontownGlobals.SellbotFactoryExt:
            self.geom = loader.loadModel(self.factoryExteriorModelPath)
            factoryLinkTunnel = self.geom.find('**/tunnel_group2')
            factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot')
            factoryLinkTunnel.find('**/tunnel_sphere').setName(
                'tunnel_trigger')
            junkyardPOV = loader.loadModel(
                'phase_9/models/cogHQ/SellbotHQExterior')
            junkyardPOV.reparentTo(self.geom)
            junkyardPOV.setPos(-200, -635, 0)
            junkyardPOV.setH(-275)
            junkyardPOV.setScale(0.5)
            cogSignModel = loader.loadModel(
                'phase_4/models/props/sign_sellBotHeadHQ')
            cogSign = cogSignModel.find('**/sign_sellBotHeadHQ').copyTo(
                NodePath())
            cogSign.flattenStrong()
            cogSignModel.removeNode()
            cogSignSF = 23
            elevatorSignSF = 15
            hqSign = cogSign.copyTo(factoryLinkTunnel)
            hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF,
                                  cogSignSF, cogSignSF * aspectSF)
            hqSign.node().setEffect(DecalEffect.make())
            hqTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Sellbot,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=0.075,
                mayChange=False,
                parent=hqSign)
            hqTypeText.setDepthWrite(0)
            hqTypeText.flattenStrong()
            hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters,
                                            font=ToontownGlobals.getSuitFont(),
                                            pos=(0, -0.34),
                                            scale=0.1,
                                            mayChange=False,
                                            parent=hqSign)
            hqText.setDepthWrite(0)
            hqText.flattenStrong()
            frontDoor = self.geom.find('**/doorway1')
            fdSign = cogSign.copyTo(frontDoor)
            fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0,
                                  elevatorSignSF, elevatorSignSF,
                                  elevatorSignSF * aspectSF)
            fdSign.node().setEffect(DecalEffect.make())
            fdTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=TTLocalizer.SCHQLfdTypeText,
                mayChange=False,
                parent=fdSign)
            fdTypeText.setDepthWrite(0)
            fdTypeText.flattenStrong()
            fdText = DirectGui.OnscreenText(
                text=TTLocalizer.SellbotFrontEntrance,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.34),
                scale=TTLocalizer.SCHQLdgText,
                mayChange=False,
                parent=fdSign)
            fdText.setDepthWrite(0)
            fdText.flattenStrong()
            sideDoor = self.geom.find('**/doorway2')
            sdSign = cogSign.copyTo(sideDoor)
            sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0,
                                  elevatorSignSF, elevatorSignSF,
                                  elevatorSignSF * aspectSF)
            sdSign.node().setEffect(DecalEffect.make())
            sdTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=0.075,
                mayChange=False,
                parent=sdSign)
            sdTypeText.setDepthWrite(0)
            sdTypeText.flattenStrong()
            sdText = DirectGui.OnscreenText(
                text=TTLocalizer.SellbotSideEntrance,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.34),
                scale=0.1,
                mayChange=False,
                parent=sdSign)
            sdText.setDepthWrite(0)
            sdText.flattenStrong()
            cogSign.removeNode()
            self.geom.flattenMedium()
        elif zoneId == ToontownGlobals.SellbotLobby:
            if base.config.GetBool('want-qa-regression', 0):
                self.notify.info('QA-REGRESSION: COGHQ: Visit SellbotLobby')
            self.geom = loader.loadModel(self.cogHQLobbyModelPath)
            front = self.geom.find('**/frontWall')
            front.node().setEffect(DecalEffect.make())
            door = self.geom.find('**/door_0')
            parent = door.getParent()
            door.wrtReparentTo(front)
            doorFrame = door.find('**/doorDoubleFlat/+GeomNode')
            door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame)
            door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame)
            doorFrame.node().setEffect(DecalEffect.make())
            door.find('**/leftDoor').wrtReparentTo(parent)
            door.find('**/rightDoor').wrtReparentTo(parent)
            self.geom.flattenStrong()
        else:
            self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId)
        CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
Beispiel #22
0
    def __init__(self):
        #try:
        #if(co == 0):
        ShowBase.__init__(self)
        #	co += 1
        self.disableMouse()
        base.setBackgroundColor(0, 0, 1)
        #camera.setPosHpr(45, -45, 45, 45, -45, 45)
        self.accept("escape", sys.exit)  # Escape quits

        # Disable default mouse-based camera control.  This is a method on the
        # ShowBase class from which we inherit.
        #self.disableMouse()
        camera.setPosHpr(-10, -50, 10, -10, -7, 0)
        #camera.setPosHpr(-50, 40, 0, 270, 0, 0)
        #base.setBackgroundColor(0,1,0)
        #base
        net = loader.loadModel("models/drawnNet")
        net.setColor(1, 1, 0)
        net.setScale(2.5, 2.5, 1.5)
        net.setPosHpr(0, 53, -2, 0, -10, 0)
        net.reparentTo(render)

        global targetY
        targetY = 40

        postR = loader.loadModel("models/box")
        postR.setColor(0.75, 0, 0.25)
        postR.setScale(0.03, 0.03, 1)
        LidR = postR.find('**/lid')
        PandaR = postR.find('**/turningthing')
        HingeNodeR = postR.find('**/box').attachNewNode('nHingeNode')
        HingeNodeR.setPos(.8659, 6.5, 5.4)
        LidR.wrtReparentTo(HingeNodeR)
        HingeNodeR.setHpr(0, 90, 0)
        lidCloseR = Parallel(
            LerpHprInterval(HingeNodeR, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        postR.setPosHpr(18, 55.5, -2, 0, 0, 0)
        postR.reparentTo(render)

        postGR = loader.loadModel("models/box")
        postGR.setColor(0.75, 0, 0.25)
        postGR.setScale(0.03, 0.03, 1)
        lidGR = postGR.find('**/lid')
        PandaGR = postGR.find('**/turningthing')
        HingeNodeGR = postGR.find('**/box').attachNewNode('nHingeNode')
        HingeNodeGR.setPos(.8659, 6.5, 5.4)
        #lidGR.wrtReparentTo(HingeNodeR)
        HingeNodeGR.setHpr(0, 90, 0)
        lidCloseGR = Parallel(
            LerpHprInterval(HingeNodeGR,
                            2.0, (0, 90, 0),
                            blendType='easeInOut'))
        postGR.setPosHpr(18, 58.5, -4, 90, 0, 90)
        postGR.reparentTo(render)

        postL = loader.loadModel("models/box")
        postL.setColor(0.75, 0, 0.25)
        postL.setScale(0.03, 0.03, 2)
        LidL = postL.find('**/lid')
        PandaL = postL.find('**/turningthing')
        HingeNodeL = postL.find('**/box').attachNewNode('nHingeNode')
        HingeNodeL.setPos(.8659, 6.5, 5.4)
        LidL.wrtReparentTo(HingeNodeL)
        HingeNodeL.setHpr(0, 90, 0)
        lidCloseL = Parallel(
            LerpHprInterval(HingeNodeL, 2.0, (90, 0, 0),
                            blendType='easeInOut'))
        postL.setPosHpr(-18, 55.5, -1, 0, 0, 0)
        postL.reparentTo(render)

        postGL = loader.loadModel("models/box")
        postGL.setColor(0.75, 0, 0.25)
        postGL.setScale(0.03, 0.03, 1)
        lidGL = postGL.find('**/lid')
        PandaGL = postGL.find('**/turningthing')
        HingeNodeGL = postGL.find('**/box').attachNewNode('nHingeNode')
        HingeNodeGL.setPos(.8659, 6.5, 5.4)
        #lidGR.wrtReparentTo(HingeNodeR)
        HingeNodeGL.setHpr(0, 90, 0)
        lidCloseGL = Parallel(
            LerpHprInterval(HingeNodeGL,
                            2.0, (0, 90, 0),
                            blendType='easeInOut'))
        postGL.setPosHpr(-18, 58.5, -4.5, 90, 0, 90)
        postGL.reparentTo(render)
        #camera.setPosHpr(20, 45, 0, 90, 0, 0)

        postT = loader.loadModel("models/box")
        postT.setColor(0.75, 0, 0.25)
        postT.setScale(1.70, 0.03, 0.03)
        LidT = postL.find('**/lid')
        PandaT = postT.find('**/turningthing')
        HingeNodeT = postT.find('**/box').attachNewNode('nHingeNode')
        HingeNodeT.setPos(.8659, 6.5, 5.4)
        LidT.wrtReparentTo(HingeNodeT)
        HingeNodeT.setHpr(0, 90, 0)
        lidCloseT = Parallel(
            LerpHprInterval(HingeNodeT, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        postT.setPosHpr(0, 55.5, 9.8, 0, 0, 0)
        postT.reparentTo(render)

        global ball
        ballRoot = render.attachNewNode("ballRoot")
        ball = loader.loadModel("models/ball")
        ball.reparentTo(ballRoot)
        #ball.setColor(0.5, 0, 1)
        ball.setScale(6, 6, 6)
        ball.setPosHpr(0, -12, -3, 0, -20, 0)
        #self.kick.setPos(0, 40, 0)
        ballTex = loader.loadTexture("pictures/ball.jpg")
        ball.setTexture(ballTex)
        ball.reparentTo(render)
        ballSphere = ball.find("**/ball")
        ballSphere.node().setFromCollideMask(BitMask32.bit(0))
        ballSphere.node().setIntoCollideMask(BitMask32.allOff())

        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor((.55, .55, .55, 1))
        directionalLight = DirectionalLight("directionalLight")
        directionalLight.setDirection(LVector3(0, 0, -1))
        directionalLight.setColor((0.375, 0.375, 0.375, 1))
        directionalLight.setSpecularColor((1, 1, 1, 1))

        ballRoot.setLight(render.attachNewNode(ambientLight))
        ballRoot.setLight(render.attachNewNode(directionalLight))
        m = Material()
        m.setSpecular((1, 1, 1, 1))
        m.setShininess(96)
        ball.setMaterial(m, 1)

        cs = CollisionSphere(0, 0, 0, 0.41)
        cNodePath = ball.attachNewNode(CollisionNode('cnode'))
        cNodePath.node().addSolid(cs)
        #cNodePath.show()
        #0, 53, -2
        cW = CollisionPolygon(Point3(-1, 40, -4), Point3(-1, 40, 8),
                              Point3(1, 40, 8), Point3(1, 40, -4))
        cwNodePath = net.attachNewNode(CollisionNode('cwnode'))
        cwNodePath.node().addSolid(cW)
        #cwNodePath.show()

        #queue = CollisionHandlerQueue()
        #traverser.addCollider(cs, queue)
        #traverser.traverse(render)

        ground = loader.loadModel("models/square")
        ground.setPosHpr(0, 35, -5, 0, 0, 0)
        ground.setScale(120, 120, 120)
        #ground.setColor(0.2, 1, 0)
        grass = loader.loadTexture("pictures/grass_1.jpg")
        ground.setTexture(grass)
        ground.reparentTo(render)

        wall = loader.loadModel("models/square")
        wall.setPosHpr(5, 100, 18, 0, 90, 0)
        wall.setScale(90, 50, 75)
        #camera.setPos(0, -150, 0)
        #wall.setColor(0.5, 0.5, 0.5)
        crowd = loader.loadTexture("pictures/crowd.png")
        wall.setTexture(crowd)
        wall.reparentTo(render)

        rightWall = loader.loadModel("models/square")
        rightWall.setPosHpr(48, 45, 0, -90, 90, 0)
        rightWall.setScale(100, 100, 100)
        rightWall.setColor(0.75, 0.75, 0.75)
        rightWall.reparentTo(render)

        global angle
        angle = loader.loadModel("models/box")
        angle.setColor(0.25, 0.25, 0.25)
        angle.setScale(1.0, 0.25, 0.03)
        LidA = angle.find('**/lid')
        PandaA = angle.find('**/turningthing')
        HingeNodeA = angle.find('**/box').attachNewNode('nHingeNode')
        HingeNodeA.setPos(.8659, 6.5, 5.4)
        LidA.wrtReparentTo(HingeNodeA)
        HingeNodeA.setHpr(0, 90, 0)
        lidCloseA = Parallel(
            LerpHprInterval(HingeNodeA, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        angle.setPosHpr(0, 10.5, -3, 0, 90, 0)
        #bar = loader.loadTexture("pictures/bar.png")
        #angle.setTexture(bar)
        angle.reparentTo(render)

        global angleD
        angleD = loader.loadModel("models/box")
        angleD.setColor(0, 0, 1)
        angleD.setScale(0.1, 0.25, 0.03)
        LidD = angleD.find('**/lid')
        PandaD = angleD.find('**/turningthing')
        HingeNodeD = angleD.find('**/box').attachNewNode('nHingeNode')
        HingeNodeD.setPos(.8659, 6.5, 5.4)
        LidD.wrtReparentTo(HingeNodeD)
        HingeNodeD.setHpr(0, 90, 0)
        lidCloseD = Parallel(
            LerpHprInterval(HingeNodeD, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        angleD.setPosHpr(0, 10.4, -3, 0, 90, 0)
        angleD.reparentTo(render)

        global power
        power = loader.loadModel("models/box")
        power.setColor(0.25, 0.25, 0.25)
        power.setScale(0.12, 2.2, 0.03)
        LidP = power.find('**/lid')
        PandaP = power.find('**/turningthing')
        HingeNodeP = power.find('**/box').attachNewNode('nHingeNode')
        HingeNodeP.setPos(.8659, 6.5, 5.4)
        LidP.wrtReparentTo(HingeNodeP)
        HingeNodeP.setHpr(0, 90, 0)
        lidCloseP = Parallel(
            LerpHprInterval(HingeNodeP, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        power.setPosHpr(-18, 10.5, -3, 0, 90, 0)

        global powerD
        powerD = loader.loadModel("models/box")
        powerD.setColor(1, 0, 0)
        powerD.setScale(0.12, 0.05, 0.03)
        LidD = power.find('**/lid')
        PandaD = power.find('**/turningthing')
        HingeNodeD = power.find('**/box').attachNewNode('nHingeNode')
        HingeNodeD.setPos(.8659, 6.5, 5.4)
        LidD.wrtReparentTo(HingeNodeD)
        HingeNodeD.setHpr(0, 90, 0)
        lidCloseD = Parallel(
            LerpHprInterval(HingeNodeD, 2.0, (0, 90, 0),
                            blendType='easeInOut'))
        powerD.setPosHpr(-18, 10, -4.5, 0, 50, 0)

        global bishop
        bishop = loader.loadModel("models/bishop")
        bs = loader.loadTexture("pictures/bishop.png")
        bishop.setTexture(bs)
        bishop.setScale(10, 10, 10)
        #bishop.setColor(0, 0.4, 1)
        bishop.setPosHpr(0, 42, -5, 90, 0, 0)
        bishop.reparentTo(render)

        global bArmL
        bArmL = loader.loadModel("models/bishop")
        bArmL.setScale(2, 2, 4)
        bishop.setTexture(bs)
        #bArmL.setColor(0, 0.4, 1)
        bArmL.setPos(-1, 55, 6)
        #bArmL.reparentTo(render)

        global bArmR
        bArmR = loader.loadModel("models/bishop")
        bArmR.setScale(2, 2, 4)
        bishop.setTexture(bs)
        #bArmR.setColor(0, 0.4, 1)
        bArmR.setPos(1, 55, 6)
        #bArmR.reparentTo(render)

        global start
        start = loader.loadModel("models/square")
        start.setPosHpr(5, -25, 18, 0, 90, 0)
        start.setScale(90, 50, 75)
        #camera.setPos(0, -150, 0)
        start.setColor(0.5, 0.5, 0.5)
        #crowd = loader.loadTexture("pictures/crowd.png")
        #start.setTexture(crowd)
        start.reparentTo(render)

        title = TextNode('title')
        title.setText("Welcome to Penalty Kick!")
        global textNodePath
        textNodePath = aspect2d.attachNewNode(title)
        textNodePath.setScale(0.25)
        title.setWordwrap(8)
        title.setCardColor(0, 0, 0, 0)
        title.setCardAsMargin(0, 0, 0, 0)
        title.setCardDecal(True)
        textNodePath.setPos(-0.75, 0, 0.5)
        self.instructions = \
               OnscreenText(text="Press any key to begin",
                           parent=base.a2dBottomRight, align=TextNode.ARight,
                           pos=(-1, +0.08), fg=(1, 1, 1, 1), scale=.06,
                           shadow=(0, 0, 0, 0.5))
        #self.accept('ball-into-net', ballCollideHandler)
        base.buttonThrowers[0].node().setKeystrokeEvent('keystroke')
        self.accept('keystroke', self.next)
class LegendaryFishingGameGUI:
    
    def __init__(self, gameObject = None):
        base.loadingScreen.beginStep('LegendaryGameGUI', 4, 20)
        self.gameObject = gameObject
        self.guiImage = loader.loadModel('models/minigames/pir_m_gam_fsh_legendaryGui')
        self.UICompoments = { }
        self.uiBaseNode = NodePath('baseNode')
        self.uiBaseNode.reparentTo(aspect2d)
        self.uiBaseNode.show()
        self.leftBaseNode = NodePath('leftBaseNode')
        self.leftBaseNode.reparentTo(base.a2dLeftCenter)
        self.leftBaseNode.show()
        self.fishActor = None
        self.actorAnim = { }
        self.scaleSize = {
            InventoryType.Collection_Set11_Part1: 0.059999999999999998,
            InventoryType.Collection_Set11_Part2: 0.055,
            InventoryType.Collection_Set11_Part3: 0.12,
            InventoryType.Collection_Set11_Part4: 0.086999999999999994,
            InventoryType.Collection_Set11_Part5: 0.080000000000000002 }
        self.meterFrame = DirectFrame(parent = self.leftBaseNode, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.0, 0.0), frameColor = (1.0, 1.0, 1.0, 0.0), relief = None, state = DGG.DISABLED, pos = (1.0, 0.0, -0.45000000000000001), hpr = (0, 0, 0), scale = (1.3, 0.0, 1.3), image = self.guiImage.find('**/pir_t_gui_fsh_meter'), image_scale = (0.20000000000000001, 0.0, 0.80000000000000004), image_pos = (0, 0, 0), text = '', textMayChange = 1, text_scale = PiratesGuiGlobals.TextScaleTitleLarge, text_pos = (-0.55000000000000004, 0.10000000000000001), text_shadow = PiratesGuiGlobals.TextShadow)
        self.UICompoments['meterFrame'] = self.meterFrame
        self.fishingRod = DirectFrame(parent = self.meterFrame, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.0, 0.0), relief = None, state = DGG.DISABLED, pos = FishingGlobals.fishingRodScreenPosition, image = self.guiImage.find('**/pir_t_gui_fsh_fullRod'), image_scale = (1.0, 0.0, 0.125), image_pos = (0.20000000000000001, 0, 0))
        self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)
        self.UICompoments['fishingRod'] = self.fishingRod
        base.loadingScreen.tick()
        self.fishingHandleBaseFrame = DirectFrame(parent = self.uiBaseNode, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.5, 1.5), frameColor = (1.0, 1.0, 1.0, 0.0), relief = None, state = DGG.DISABLED, pos = (0.0, 0.0, 0.0), hpr = (0, 0, 0), scale = (0.71999999999999997, 0.0, 0.71999999999999997), image = self.guiImage.find('**/pir_t_gui_fsh_partialRod'), image_scale = (3.7999999999999998, 0.0, 1.8999999999999999), image_pos = (0, 0, 0), image_hpr = (0.0, 0.0, 0))
        self.fishingHandleBaseFrame.hide()
        self.UICompoments['fishingHandleBaseFrame'] = self.fishingHandleBaseFrame
        self.fishingHandle = DirectFrame(parent = self.fishingHandleBaseFrame, frameSize = (-0.080000000000000002, 0.080000000000000002, -0.20000000000000001, 0.20000000000000001), relief = None, state = DGG.DISABLED, pos = (-0.10000000000000001, 0.0, -0.050000000000000003), hpr = (0, 0, 0), image = self.guiImage.find('**/pir_t_gui_fsh_handleArm'), image_scale = (1.0, 0.0, 1.0), image_pos = (-0.042000000000000003, 0, -0.115), image_hpr = (0.0, 0.0, 0))
        self.UICompoments['fishingHandle'] = self.fishingHandle
        self.arrowImage = DirectFrame(parent = self.fishingHandleBaseFrame, frameSize = (-0.40000000000000002, 0.40000000000000002, -0.40000000000000002, 0.40000000000000002), relief = None, state = DGG.DISABLED, pos = (0.0, 0.0, 0.0), hpr = (0, 0, 0), scale = (1.2, 0.0, 1.2), image = self.guiImage.find('**/pir_t_gui_fsh_arrow'), image_scale = (1.0, 0.0, 1.0), image_pos = (0.0, 0, 0.0), image_hpr = (0.0, 0.0, 0.0))
        self.arrowImage.hide()
        self.UICompoments['arrowImage'] = self.arrowImage
        btnGeom = (self.guiImage.find('**/pir_t_gui_fsh_handle'), self.guiImage.find('**/pir_t_gui_fsh_handle'), self.guiImage.find('**/pir_t_gui_fsh_handleOn'))
        self.fishingHandleButton = GuiButton(pos = (-0.29999999999999999, 0, -0.55000000000000004), hpr = (0, 0, 0), scale = 0.45000000000000001, image = btnGeom, image_pos = (0, 0, 0), image_scale = 1.0, sortOrder = 2)
        self.fishingHandleButton.bind(DGG.B1PRESS, self.handleButtonClicked)
        self.fishingHandleButton.reparentTo(self.fishingHandle)
        self.UICompoments['fishingHandleButton'] = self.fishingHandleButton
        self.fishingHandleBaseFrame.setTransparency(TransparencyAttrib.MAlpha)
        self.meterFrame.setTransparency(TransparencyAttrib.MAlpha)
        self.lineOneTransitTextNode = TextNode('lineOneTransitText')
        self.lineOneTransitTextNode.setFont(PiratesGlobals.getPirateFont())
        self.lineOneTransitTextNode.setText('')
        self.lineOneTransitTextNode.setAlign(TextNode.ACenter)
        self.lineOneTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
        self.lineOneTransitTextNodePath = NodePath(self.lineOneTransitTextNode)
        self.lineOneTransitTextNodePath.setPos(0.0, 0.0, -0.80000000000000004)
        self.lineOneTransitTextNodePath.setScale(0.34999999999999998, 0.34999999999999998, 0.34999999999999998)
        self.lineOneTransitTextNodePath.reparentTo(self.uiBaseNode)
        self.lineOneTransitTextNodePath.hide()
        self.UICompoments['lineOneTransitText'] = self.lineOneTransitTextNodePath
        self.lineTwoTransitTextNode = TextNode('lineTwoTransitText')
        self.lineTwoTransitTextNode.setFont(PiratesGlobals.getPirateFont())
        self.lineTwoTransitTextNode.setText('')
        self.lineTwoTransitTextNode.setAlign(TextNode.ACenter)
        self.lineTwoTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
        self.lineTwoTransitTextNodePath = NodePath(self.lineTwoTransitTextNode)
        self.lineTwoTransitTextNodePath.setPos(-0.40000000000000002, 0.0, -0.94999999999999996)
        self.lineTwoTransitTextNodePath.setScale(0.12, 0.12, 0.12)
        self.lineTwoTransitTextNodePath.reparentTo(self.uiBaseNode)
        self.lineTwoTransitTextNodePath.hide()
        self.UICompoments['lineTwoTransitText'] = self.lineTwoTransitTextNodePath
        base.loadingScreen.tick()
        self.test_guiImage = loader.loadModel('models/gui/toplevel_gui')
        self.buttonIcon = (self.test_guiImage.find('**/treasure_chest_closed'), self.test_guiImage.find('**/treasure_chest_closed'), self.test_guiImage.find('**/treasure_chest_closed_over'))
        self.winImagePanel = GuiPanel.GuiPanel('', 2.6000000000000001, 1.8999999999999999, True)
        self.winImagePanel.setPos(-1.3, 0.0, -0.94999999999999996)
        self.winImagePanel.reparentTo(self.uiBaseNode)
        self.winImagePanel.background = OnscreenImage(parent = self.winImagePanel, scale = (2.3999999999999999, 0, 1.8), image = self.guiImage.find('**/pir_t_gui_fsh_posterBackground'), hpr = (0, 0, 0), pos = (1.3, 0, 0.94999999999999996))
        self.winImagePanel.setBin('gui-popup', -4)
        self.winTitleTextNode = TextNode('winTitleTextNode')
        self.winTitleTextNode.setText('Congratulations!')
        self.winTitleTextNode.setAlign(TextNode.ACenter)
        self.winTitleTextNode.setFont(PiratesGlobals.getPirateFont())
        self.winTitleTextNode.setTextColor(0.23000000000000001, 0.089999999999999997, 0.029999999999999999, 1.0)
        self.winTitleTextNodePath = NodePath(self.winTitleTextNode)
        self.winTitleTextNodePath.setPos(1.3500000000000001, 0.0, 1.6699999999999999)
        self.winTitleTextNodePath.setScale(0.17999999999999999)
        self.winTitleTextNodePath.reparentTo(self.winImagePanel)
        self.wholeStoryTextNode = TextNode('storyTextNode')
        self.wholeStoryTextNode.setText('')
        self.wholeStoryTextNode.setWordwrap(19.0)
        self.wholeStoryTextNode.setTextColor(0.23000000000000001, 0.089999999999999997, 0.029999999999999999, 1.0)
        self.wholeStoryTextNodePath = NodePath(self.wholeStoryTextNode)
        self.wholeStoryTextNodePath.setPos(0.33000000000000002, 0.0, 1.6399999999999999)
        self.wholeStoryTextNodePath.setScale(0.050000000000000003)
        self.wholeStoryTextNodePath.reparentTo(self.winImagePanel)
        self.winImagePanel.closeButton['command'] = self.closeDialogGotNextState
        self.winImagePanel.closeButton['extraArgs'] = [
            'winImagePanel',
            'FarewellLegendaryFish',
            False]
        self.UICompoments['winImagePanel'] = self.winImagePanel
        self.winImagePanel.hide()
        self.luiCloseDialogSequence = Sequence()
        self.arrowImageRotationInterval = LerpHprInterval(self.arrowImage, 2.2000000000000002, self.arrowImage.getHpr() + Point3(0.0, 0.0, 280.0), self.arrowImage.getHpr())
        self.luiArrowRotatingSequence = Sequence(Func(self.showGui, [
            'arrowImage']), Parallel(Func(self.arrowImageRotationInterval.start), Wait(2.2000000000000002)), Func(self.hideGui, [
            'arrowImage']), Func(self.arrowImage.setHpr, self.arrowImage.getHpr() + Point3(0.0, 0.0, 5.0)), name = self.gameObject.distributedFishingSpot.uniqueName('luiArrowRotatingSequence'))
        self.lineOneColorChange = LerpColorScaleInterval(self.lineOneTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (1.0, 1.0, 1.0, 0.0), (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut')
        self.lineOnePosChange = LerpPosInterval(self.lineOneTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (0.0, 0.0, -0.20000000000000001), (0.0, 0.0, -0.80000000000000004), blendType = 'easeOut')
        self.lineTwoCholorChange = LerpColorScaleInterval(self.lineTwoTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (1.0, 1.0, 1.0, 1.0), (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut')
        self.lineTwoPosChange = LerpPosInterval(self.lineTwoTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (0.0, 0.0, -0.32000000000000001), (0.0, 0.0, -0.94999999999999996), blendType = 'easeOut')
        self.transitionTextMovingSequence = Sequence(Func(self.lineOneTransitTextNodePath.show), Func(self.lineTwoTransitTextNodePath.show), Parallel(self.lineOnePosChange, self.lineTwoPosChange, self.lineOneColorChange, self.lineTwoCholorChange), Func(self.lineOneTransitTextNodePath.hide), Func(self.lineTwoTransitTextNodePath.hide), name = self.gameObject.distributedFishingSpot.uniqueName('transitionTextMovingSequence'))
        self.meterFadeInInterval = Sequence(Func(self.meterFrame.show), LerpColorScaleInterval(self.meterFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 1.0), startColorScale = (1.0, 1.0, 1.0, 0.0), blendType = 'easeOut'), name = 'FadeInLegendaryMeter')
        self.meterFadeOutInterval = Sequence(LerpColorScaleInterval(self.meterFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 0.0), startColorScale = (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut'), Func(self.meterFrame.hide), name = 'FadeOutLegendaryMeter')
        self.rodFadeInInterval = Sequence(Func(self.fishingHandleBaseFrame.show), LerpColorScaleInterval(self.fishingHandleBaseFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 1.0), startColorScale = (1.0, 1.0, 1.0, 0.0), blendType = 'easeOut'), name = 'FadeInLegendaryRodInterface')
        self.rodFadeOutInterval = Sequence(LerpColorScaleInterval(self.fishingHandleBaseFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 0.0), startColorScale = (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut'), Func(self.fishingHandleBaseFrame.hide), name = 'FadeOutLegendaryRodInterface')
        base.loadingScreen.tick()
        smallScale = self.fishingHandleButton['scale']
        bigScale = self.fishingHandleButton['scale'] * 1.2
        self.buttonGrowUpInterval = LerpScaleInterval(self.fishingHandleButton, 1.0, bigScale, smallScale)
        self.luiFightTransitSequence = Sequence(Parallel(Func(self.fishingHandleBaseFrame.show), Func(self.meterFadeOutInterval.start), Func(self.rodFadeInInterval.start), Func(self.buttonGrowUpInterval.start)), Wait(1.0), Func(self.meterFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiFightTransitSequence'))
        self.luiReelTransitSequence = Sequence(Parallel(Func(self.fishingHandleBaseFrame.show), Func(self.meterFadeOutInterval.start), Func(self.rodFadeInInterval.start)), Wait(1.0), Func(self.meterFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiReelTransitSequence'))
        self.luiStruggleTransitSequence = Sequence(Parallel(Func(self.meterFrame.show), Func(self.resetFishingRod), self.meterFadeInInterval, self.rodFadeOutInterval), Wait(1.0), Func(self.fishingHandleBaseFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiStruggleTransitSequence'))
        self.meterFadeOutInterval.start()
        self.rodFadeOutInterval.start()
        self.hideAllGUI()
        base.loadingScreen.endStep('LegendaryGameGUI')

    
    def hideAllGUI(self):
        self.uiBaseNode.reparentTo(hidden)
        self.leftBaseNode.reparentTo(hidden)

    
    def showAllGUI(self):
        self.uiBaseNode.reparentTo(aspect2d)
        self.leftBaseNode.reparentTo(base.a2dLeftCenter)

    
    def hideGui(self, nameList):
        for ui in nameList:
            self.UICompoments[ui].hide()
        

    
    def showGui(self, nameList):
        for ui in nameList:
            self.UICompoments[ui].show()
        

    
    def destroy(self):
        self.arrowImageRotationInterval.pause()
        self.arrowImageRotationInterval.clearToInitial()
        self.luiArrowRotatingSequence.pause()
        self.luiArrowRotatingSequence.clearToInitial()
        self.luiCloseDialogSequence.pause()
        self.luiCloseDialogSequence.clearToInitial()
        totalKey = self.UICompoments.keys()
        for iKey in totalKey:
            del self.UICompoments[iKey]
        
        self.fishingHandle = None
        self.fishingHandleButton = None
        self.fishingRod.removeNode()
        self.leftBaseNode.removeNode()
        self.uiBaseNode.removeNode()
        if self.fishActor:
            self.fishActor.destroy()
            self.fishActor = None
        

    
    def handleButtonClicked(self, mouseKey):
        if self.gameObject.lfgFsm.getCurrentOrNextState() in [
            'CatchIt']:
            self.gameObject.lfgFsm.request('Transition', 'Struggle')
            self.gameObject.sfx['legendaryGreen'].play()
        

    
    def setTransitionText(self, state):
        self.lineOneTransitTextNode.setText(PLocalizer.LegendaryFishingGui[state][0])
        self.lineTwoTransitTextNode.setText(PLocalizer.LegendaryFishingGui[state][1])

    
    def resetInterval(self):
        self.transitionTextMovingSequence.pause()
        self.transitionTextMovingSequence.clearToInitial()
        self.lineOneColorChange.pause()
        self.lineOneColorChange.clearToInitial()
        self.lineOnePosChange.pause()
        self.lineOnePosChange.clearToInitial()
        self.lineTwoCholorChange.pause()
        self.lineTwoCholorChange.clearToInitial()
        self.lineTwoPosChange.pause()
        self.lineTwoPosChange.clearToInitial()
        self.luiReelTransitSequence.pause()
        self.luiReelTransitSequence.clearToInitial()
        self.luiStruggleTransitSequence.pause()
        self.luiStruggleTransitSequence.clearToInitial()
        self.luiFightTransitSequence.pause()
        self.luiFightTransitSequence.clearToInitial()
        self.buttonGrowUpInterval.pause()
        self.buttonGrowUpInterval.clearToInitial()
        self.meterFadeOutInterval.pause()
        self.meterFadeOutInterval.clearToInitial()
        self.rodFadeInInterval.pause()
        self.rodFadeInInterval.clearToInitial()
        self.meterFadeInInterval.pause()
        self.meterFadeInInterval.clearToInitial()
        self.rodFadeOutInterval.pause()
        self.rodFadeOutInterval.clearToInitial()

    
    def fightingTransit(self):
        self.luiFightTransitSequence.start()

    
    def reelTransit(self):
        self.luiReelTransitSequence.start()

    
    def struggleTransit(self):
        self.luiStruggleTransitSequence.start()

    
    def resetFishingRod(self):
        self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)

    
    def showWinImage(self, fish):
        self.hideGui([
            'meterFrame',
            'fishingHandleBaseFrame'])
        result = fish.myData['name'].split(' ')
        fileName = str(result[0]).capitalize()
        imgName = 'pir_t_gui_fsh_render%s' % fileName
        self.actorAnim['swimIdleOpposite'] = 'models/char/pir_a_gam_fsh_%s_%s.bam' % (fish.myData['model'], 'swimIdleOpposite')
        self.fishActor = BlendActor('models/char/pir_r_gam_fsh_%s.bam' % fish.myData['model'], self.actorAnim, FishingGlobals.defaultFishBlendTime, FishingGlobals.fishBlendTimeDict)
        self.fishActor.setPlayRate(fish.myData['speed'] * fish.myData['swimAnimationMultiplier'], 'swimIdleOpposite')
        self.fishActor.changeAnimationTo('swimIdleOpposite')
        self.fishActor.reparentTo(self.winImagePanel)
        self.fishActor.setScale(self.scaleSize[fish.myData['id']])
        self.fishActor.setPos(1.7, 0, 1.0)
        self.fishActor.setHpr(0, 0, 35)
        self.fishActor.setDepthWrite(True)
        self.fishActor.setDepthTest(True)
        self.wholeStoryTextNode.setText(PLocalizer.LegendSelectionGui['wholeStory'][fish.myData['id']])
        self.winImagePanel.show()

    
    def closeDialogGotNextState(self, object, targetState, ifFadeInAgain):
        if self.fishActor:
            self.fishActor.destroy()
            self.fishActor = None
        
        self.luiCloseDialogSequence = Sequence(Func(self.gameObject.distributedFishingSpot.fadeOut), Wait(0.40000000000000002), Func(self.UICompoments[object].hide), Func(self.gameObject.lfgFsm.request, targetState), name = self.gameObject.distributedFishingSpot.uniqueName('luiCloseDialogSequence'))
        self.luiCloseDialogSequence.start()

    
    def updateStruggleTimerText(self, time, percent):
        self.meterFrame['text'] = str(time)
        self.meterFrame['text_fg'] = (1.0 - percent, percent, 0.0, 1.0)
Beispiel #24
0
    def rotateCube(self, direction):
        """
        rotates and moves the cube according to the direction passed as first argument. accepted values are "up" "down" "left" "right"
        """
        #wont move cube if its already being animated
        if self.isAnimated():
            print("waiting for cube to end rotating")
            return

        # cleaning up from last rotation (we cant clean those up at the end of this function cause the interval needs the dummynode for rotation)
        self.cube.wrtReparentTo(render)
        try:
            dummy.remove_node()
        except:
            pass

        self.setAnimated(True)
        duration = 0.2
        x1, y1 = self.getCubeTiles()

        dummy = render.attachNewNode("dummy")
        dummy.reparentTo(self.cube)
        dummy.setZ(render, .1)
        dummy.wrtReparentTo(render)
        dummy.setHpr(0, 0, 0)
        dest_hpr = Vec3(0)

        if direction == "right":
            dummy.setY(dummy, 0.5)
            self.cube.wrtReparentTo(dummy)
            dest_hpr = Vec3(0, -90, 0)
            y1 = y1 + 1

        if direction == "left":
            dummy.setY(dummy, -0.5)
            self.cube.wrtReparentTo(dummy)
            dest_hpr = Vec3(0, 90, 0)
            y1 = y1 - 1

        if direction == "up":
            dummy.setX(dummy, -0.5)
            self.cube.wrtReparentTo(dummy)
            dest_hpr = Vec3(0, 0, -90)
            x1 = x1 - 1

        if direction == "down":
            dummy.setX(dummy, 0.5)
            self.cube.wrtReparentTo(dummy)
            dest_hpr = Vec3(0, 0, 90)
            x1 = x1 + 1

        print("Setting rotate animation")
        anim = self.animate(
            LerpHprInterval(dummy, duration, dest_hpr, (0, 0, 0)))

        checkresult = self.movement.checkMove(self.level, x1, y1, self.sounds)

        if checkresult == 1:
            self.setCubeTiles(x1, y1)
            self.loseGame(direction)
            anim.start()
        elif checkresult == 0:
            self.setCubeTiles(x1, y1)
            self.sounds.playSound("rotate.wav")
            anim.start()
        elif checkresult == 2:
            self.setAnimated(False)
        elif checkresult == 3:
            anim.start()
            self.setCubeTiles(x1, y1)
            self.fallAnimation(direction)
Beispiel #25
0
class LegendaryFishingGameGUI:
    def __init__(self, gameObject=None):
        base.loadingScreen.beginStep('LegendaryGameGUI', 4, 20)
        self.gameObject = gameObject
        self.guiImage = loader.loadModel(
            'models/minigames/pir_m_gam_fsh_legendaryGui')
        self.UICompoments = {}
        self.uiBaseNode = NodePath('baseNode')
        self.uiBaseNode.reparentTo(aspect2d)
        self.uiBaseNode.show()
        self.leftBaseNode = NodePath('leftBaseNode')
        self.leftBaseNode.reparentTo(base.a2dLeftCenter)
        self.leftBaseNode.show()
        self.fishActor = None
        self.actorAnim = {}
        self.scaleSize = {
            InventoryType.Collection_Set11_Part1: 0.059999999999999998,
            InventoryType.Collection_Set11_Part2: 0.055,
            InventoryType.Collection_Set11_Part3: 0.12,
            InventoryType.Collection_Set11_Part4: 0.086999999999999994,
            InventoryType.Collection_Set11_Part5: 0.080000000000000002
        }
        self.meterFrame = DirectFrame(
            parent=self.leftBaseNode,
            frameSize=(-0.29999999999999999, 0.29999999999999999, -1.0, 0.0),
            frameColor=(1.0, 1.0, 1.0, 0.0),
            relief=None,
            state=DGG.DISABLED,
            pos=(1.0, 0.0, -0.45000000000000001),
            hpr=(0, 0, 0),
            scale=(1.3, 0.0, 1.3),
            image=self.guiImage.find('**/pir_t_gui_fsh_meter'),
            image_scale=(0.20000000000000001, 0.0, 0.80000000000000004),
            image_pos=(0, 0, 0),
            text='',
            textMayChange=1,
            text_scale=PiratesGuiGlobals.TextScaleTitleLarge,
            text_pos=(-0.55000000000000004, 0.10000000000000001),
            text_shadow=PiratesGuiGlobals.TextShadow)
        self.UICompoments['meterFrame'] = self.meterFrame
        self.fishingRod = DirectFrame(
            parent=self.meterFrame,
            frameSize=(-0.29999999999999999, 0.29999999999999999, -1.0, 0.0),
            relief=None,
            state=DGG.DISABLED,
            pos=FishingGlobals.fishingRodScreenPosition,
            image=self.guiImage.find('**/pir_t_gui_fsh_fullRod'),
            image_scale=(1.0, 0.0, 0.125),
            image_pos=(0.20000000000000001, 0, 0))
        self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)
        self.UICompoments['fishingRod'] = self.fishingRod
        base.loadingScreen.tick()
        self.fishingHandleBaseFrame = DirectFrame(
            parent=self.uiBaseNode,
            frameSize=(-0.29999999999999999, 0.29999999999999999, -1.5, 1.5),
            frameColor=(1.0, 1.0, 1.0, 0.0),
            relief=None,
            state=DGG.DISABLED,
            pos=(0.0, 0.0, 0.0),
            hpr=(0, 0, 0),
            scale=(0.71999999999999997, 0.0, 0.71999999999999997),
            image=self.guiImage.find('**/pir_t_gui_fsh_partialRod'),
            image_scale=(3.7999999999999998, 0.0, 1.8999999999999999),
            image_pos=(0, 0, 0),
            image_hpr=(0.0, 0.0, 0))
        self.fishingHandleBaseFrame.hide()
        self.UICompoments[
            'fishingHandleBaseFrame'] = self.fishingHandleBaseFrame
        self.fishingHandle = DirectFrame(
            parent=self.fishingHandleBaseFrame,
            frameSize=(-0.080000000000000002, 0.080000000000000002,
                       -0.20000000000000001, 0.20000000000000001),
            relief=None,
            state=DGG.DISABLED,
            pos=(-0.10000000000000001, 0.0, -0.050000000000000003),
            hpr=(0, 0, 0),
            image=self.guiImage.find('**/pir_t_gui_fsh_handleArm'),
            image_scale=(1.0, 0.0, 1.0),
            image_pos=(-0.042000000000000003, 0, -0.115),
            image_hpr=(0.0, 0.0, 0))
        self.UICompoments['fishingHandle'] = self.fishingHandle
        self.arrowImage = DirectFrame(
            parent=self.fishingHandleBaseFrame,
            frameSize=(-0.40000000000000002, 0.40000000000000002,
                       -0.40000000000000002, 0.40000000000000002),
            relief=None,
            state=DGG.DISABLED,
            pos=(0.0, 0.0, 0.0),
            hpr=(0, 0, 0),
            scale=(1.2, 0.0, 1.2),
            image=self.guiImage.find('**/pir_t_gui_fsh_arrow'),
            image_scale=(1.0, 0.0, 1.0),
            image_pos=(0.0, 0, 0.0),
            image_hpr=(0.0, 0.0, 0.0))
        self.arrowImage.hide()
        self.UICompoments['arrowImage'] = self.arrowImage
        btnGeom = (self.guiImage.find('**/pir_t_gui_fsh_handle'),
                   self.guiImage.find('**/pir_t_gui_fsh_handle'),
                   self.guiImage.find('**/pir_t_gui_fsh_handleOn'))
        self.fishingHandleButton = GuiButton(pos=(-0.29999999999999999, 0,
                                                  -0.55000000000000004),
                                             hpr=(0, 0, 0),
                                             scale=0.45000000000000001,
                                             image=btnGeom,
                                             image_pos=(0, 0, 0),
                                             image_scale=1.0,
                                             sortOrder=2)
        self.fishingHandleButton.bind(DGG.B1PRESS, self.handleButtonClicked)
        self.fishingHandleButton.reparentTo(self.fishingHandle)
        self.UICompoments['fishingHandleButton'] = self.fishingHandleButton
        self.fishingHandleBaseFrame.setTransparency(TransparencyAttrib.MAlpha)
        self.meterFrame.setTransparency(TransparencyAttrib.MAlpha)
        self.lineOneTransitTextNode = TextNode('lineOneTransitText')
        self.lineOneTransitTextNode.setFont(PiratesGlobals.getPirateFont())
        self.lineOneTransitTextNode.setText('')
        self.lineOneTransitTextNode.setAlign(TextNode.ACenter)
        self.lineOneTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
        self.lineOneTransitTextNodePath = NodePath(self.lineOneTransitTextNode)
        self.lineOneTransitTextNodePath.setPos(0.0, 0.0, -0.80000000000000004)
        self.lineOneTransitTextNodePath.setScale(0.34999999999999998,
                                                 0.34999999999999998,
                                                 0.34999999999999998)
        self.lineOneTransitTextNodePath.reparentTo(self.uiBaseNode)
        self.lineOneTransitTextNodePath.hide()
        self.UICompoments[
            'lineOneTransitText'] = self.lineOneTransitTextNodePath
        self.lineTwoTransitTextNode = TextNode('lineTwoTransitText')
        self.lineTwoTransitTextNode.setFont(PiratesGlobals.getPirateFont())
        self.lineTwoTransitTextNode.setText('')
        self.lineTwoTransitTextNode.setAlign(TextNode.ACenter)
        self.lineTwoTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
        self.lineTwoTransitTextNodePath = NodePath(self.lineTwoTransitTextNode)
        self.lineTwoTransitTextNodePath.setPos(-0.40000000000000002, 0.0,
                                               -0.94999999999999996)
        self.lineTwoTransitTextNodePath.setScale(0.12, 0.12, 0.12)
        self.lineTwoTransitTextNodePath.reparentTo(self.uiBaseNode)
        self.lineTwoTransitTextNodePath.hide()
        self.UICompoments[
            'lineTwoTransitText'] = self.lineTwoTransitTextNodePath
        base.loadingScreen.tick()
        self.test_guiImage = loader.loadModel('models/gui/toplevel_gui')
        self.buttonIcon = (
            self.test_guiImage.find('**/treasure_chest_closed'),
            self.test_guiImage.find('**/treasure_chest_closed'),
            self.test_guiImage.find('**/treasure_chest_closed_over'))
        self.winImagePanel = GuiPanel.GuiPanel('', 2.6000000000000001,
                                               1.8999999999999999, True)
        self.winImagePanel.setPos(-1.3, 0.0, -0.94999999999999996)
        self.winImagePanel.reparentTo(self.uiBaseNode)
        self.winImagePanel.background = OnscreenImage(
            parent=self.winImagePanel,
            scale=(2.3999999999999999, 0, 1.8),
            image=self.guiImage.find('**/pir_t_gui_fsh_posterBackground'),
            hpr=(0, 0, 0),
            pos=(1.3, 0, 0.94999999999999996))
        self.winImagePanel.setBin('gui-popup', -4)
        self.winTitleTextNode = TextNode('winTitleTextNode')
        self.winTitleTextNode.setText('Congratulations!')
        self.winTitleTextNode.setAlign(TextNode.ACenter)
        self.winTitleTextNode.setFont(PiratesGlobals.getPirateFont())
        self.winTitleTextNode.setTextColor(0.23000000000000001,
                                           0.089999999999999997,
                                           0.029999999999999999, 1.0)
        self.winTitleTextNodePath = NodePath(self.winTitleTextNode)
        self.winTitleTextNodePath.setPos(1.3500000000000001, 0.0,
                                         1.6699999999999999)
        self.winTitleTextNodePath.setScale(0.17999999999999999)
        self.winTitleTextNodePath.reparentTo(self.winImagePanel)
        self.wholeStoryTextNode = TextNode('storyTextNode')
        self.wholeStoryTextNode.setText('')
        self.wholeStoryTextNode.setWordwrap(19.0)
        self.wholeStoryTextNode.setTextColor(0.23000000000000001,
                                             0.089999999999999997,
                                             0.029999999999999999, 1.0)
        self.wholeStoryTextNodePath = NodePath(self.wholeStoryTextNode)
        self.wholeStoryTextNodePath.setPos(0.33000000000000002, 0.0,
                                           1.6399999999999999)
        self.wholeStoryTextNodePath.setScale(0.050000000000000003)
        self.wholeStoryTextNodePath.reparentTo(self.winImagePanel)
        self.winImagePanel.closeButton[
            'command'] = self.closeDialogGotNextState
        self.winImagePanel.closeButton['extraArgs'] = [
            'winImagePanel', 'FarewellLegendaryFish', False
        ]
        self.UICompoments['winImagePanel'] = self.winImagePanel
        self.winImagePanel.hide()
        self.luiCloseDialogSequence = Sequence()
        self.arrowImageRotationInterval = LerpHprInterval(
            self.arrowImage, 2.2000000000000002,
            self.arrowImage.getHpr() + Point3(0.0, 0.0, 280.0),
            self.arrowImage.getHpr())
        self.luiArrowRotatingSequence = Sequence(
            Func(self.showGui, ['arrowImage']),
            Parallel(Func(self.arrowImageRotationInterval.start),
                     Wait(2.2000000000000002)),
            Func(self.hideGui, ['arrowImage']),
            Func(self.arrowImage.setHpr,
                 self.arrowImage.getHpr() + Point3(0.0, 0.0, 5.0)),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'luiArrowRotatingSequence'))
        self.lineOneColorChange = LerpColorScaleInterval(
            self.lineOneTransitTextNodePath,
            FishingGlobals.legendaryTransitionTextDuration,
            (1.0, 1.0, 1.0, 0.0), (1.0, 1.0, 1.0, 1.0),
            blendType='easeOut')
        self.lineOnePosChange = LerpPosInterval(
            self.lineOneTransitTextNodePath,
            FishingGlobals.legendaryTransitionTextDuration,
            (0.0, 0.0, -0.20000000000000001), (0.0, 0.0, -0.80000000000000004),
            blendType='easeOut')
        self.lineTwoCholorChange = LerpColorScaleInterval(
            self.lineTwoTransitTextNodePath,
            FishingGlobals.legendaryTransitionTextDuration,
            (1.0, 1.0, 1.0, 1.0), (1.0, 1.0, 1.0, 1.0),
            blendType='easeOut')
        self.lineTwoPosChange = LerpPosInterval(
            self.lineTwoTransitTextNodePath,
            FishingGlobals.legendaryTransitionTextDuration,
            (0.0, 0.0, -0.32000000000000001), (0.0, 0.0, -0.94999999999999996),
            blendType='easeOut')
        self.transitionTextMovingSequence = Sequence(
            Func(self.lineOneTransitTextNodePath.show),
            Func(self.lineTwoTransitTextNodePath.show),
            Parallel(self.lineOnePosChange, self.lineTwoPosChange,
                     self.lineOneColorChange, self.lineTwoCholorChange),
            Func(self.lineOneTransitTextNodePath.hide),
            Func(self.lineTwoTransitTextNodePath.hide),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'transitionTextMovingSequence'))
        self.meterFadeInInterval = Sequence(
            Func(self.meterFrame.show),
            LerpColorScaleInterval(
                self.meterFrame,
                FishingGlobals.legendaryTransitionTextDuration,
                colorScale=(1.0, 1.0, 1.0, 1.0),
                startColorScale=(1.0, 1.0, 1.0, 0.0),
                blendType='easeOut'),
            name='FadeInLegendaryMeter')
        self.meterFadeOutInterval = Sequence(LerpColorScaleInterval(
            self.meterFrame,
            FishingGlobals.legendaryTransitionTextDuration,
            colorScale=(1.0, 1.0, 1.0, 0.0),
            startColorScale=(1.0, 1.0, 1.0, 1.0),
            blendType='easeOut'),
                                             Func(self.meterFrame.hide),
                                             name='FadeOutLegendaryMeter')
        self.rodFadeInInterval = Sequence(
            Func(self.fishingHandleBaseFrame.show),
            LerpColorScaleInterval(
                self.fishingHandleBaseFrame,
                FishingGlobals.legendaryTransitionTextDuration,
                colorScale=(1.0, 1.0, 1.0, 1.0),
                startColorScale=(1.0, 1.0, 1.0, 0.0),
                blendType='easeOut'),
            name='FadeInLegendaryRodInterface')
        self.rodFadeOutInterval = Sequence(
            LerpColorScaleInterval(
                self.fishingHandleBaseFrame,
                FishingGlobals.legendaryTransitionTextDuration,
                colorScale=(1.0, 1.0, 1.0, 0.0),
                startColorScale=(1.0, 1.0, 1.0, 1.0),
                blendType='easeOut'),
            Func(self.fishingHandleBaseFrame.hide),
            name='FadeOutLegendaryRodInterface')
        base.loadingScreen.tick()
        smallScale = self.fishingHandleButton['scale']
        bigScale = self.fishingHandleButton['scale'] * 1.2
        self.buttonGrowUpInterval = LerpScaleInterval(self.fishingHandleButton,
                                                      1.0, bigScale,
                                                      smallScale)
        self.luiFightTransitSequence = Sequence(
            Parallel(Func(self.fishingHandleBaseFrame.show),
                     Func(self.meterFadeOutInterval.start),
                     Func(self.rodFadeInInterval.start),
                     Func(self.buttonGrowUpInterval.start)),
            Wait(1.0),
            Func(self.meterFrame.hide),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'luiFightTransitSequence'))
        self.luiReelTransitSequence = Sequence(
            Parallel(Func(self.fishingHandleBaseFrame.show),
                     Func(self.meterFadeOutInterval.start),
                     Func(self.rodFadeInInterval.start)),
            Wait(1.0),
            Func(self.meterFrame.hide),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'luiReelTransitSequence'))
        self.luiStruggleTransitSequence = Sequence(
            Parallel(Func(self.meterFrame.show), Func(self.resetFishingRod),
                     self.meterFadeInInterval, self.rodFadeOutInterval),
            Wait(1.0),
            Func(self.fishingHandleBaseFrame.hide),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'luiStruggleTransitSequence'))
        self.meterFadeOutInterval.start()
        self.rodFadeOutInterval.start()
        self.hideAllGUI()
        base.loadingScreen.endStep('LegendaryGameGUI')

    def hideAllGUI(self):
        self.uiBaseNode.reparentTo(hidden)
        self.leftBaseNode.reparentTo(hidden)

    def showAllGUI(self):
        self.uiBaseNode.reparentTo(aspect2d)
        self.leftBaseNode.reparentTo(base.a2dLeftCenter)

    def hideGui(self, nameList):
        for ui in nameList:
            self.UICompoments[ui].hide()

    def showGui(self, nameList):
        for ui in nameList:
            self.UICompoments[ui].show()

    def destroy(self):
        self.arrowImageRotationInterval.pause()
        self.arrowImageRotationInterval.clearToInitial()
        self.luiArrowRotatingSequence.pause()
        self.luiArrowRotatingSequence.clearToInitial()
        self.luiCloseDialogSequence.pause()
        self.luiCloseDialogSequence.clearToInitial()
        totalKey = self.UICompoments.keys()
        for iKey in totalKey:
            del self.UICompoments[iKey]

        self.fishingHandle = None
        self.fishingHandleButton = None
        self.fishingRod.removeNode()
        self.leftBaseNode.removeNode()
        self.uiBaseNode.removeNode()
        if self.fishActor:
            self.fishActor.destroy()
            self.fishActor = None

    def handleButtonClicked(self, mouseKey):
        if self.gameObject.lfgFsm.getCurrentOrNextState() in ['CatchIt']:
            self.gameObject.lfgFsm.request('Transition', 'Struggle')
            self.gameObject.sfx['legendaryGreen'].play()

    def setTransitionText(self, state):
        self.lineOneTransitTextNode.setText(
            PLocalizer.LegendaryFishingGui[state][0])
        self.lineTwoTransitTextNode.setText(
            PLocalizer.LegendaryFishingGui[state][1])

    def resetInterval(self):
        self.transitionTextMovingSequence.pause()
        self.transitionTextMovingSequence.clearToInitial()
        self.lineOneColorChange.pause()
        self.lineOneColorChange.clearToInitial()
        self.lineOnePosChange.pause()
        self.lineOnePosChange.clearToInitial()
        self.lineTwoCholorChange.pause()
        self.lineTwoCholorChange.clearToInitial()
        self.lineTwoPosChange.pause()
        self.lineTwoPosChange.clearToInitial()
        self.luiReelTransitSequence.pause()
        self.luiReelTransitSequence.clearToInitial()
        self.luiStruggleTransitSequence.pause()
        self.luiStruggleTransitSequence.clearToInitial()
        self.luiFightTransitSequence.pause()
        self.luiFightTransitSequence.clearToInitial()
        self.buttonGrowUpInterval.pause()
        self.buttonGrowUpInterval.clearToInitial()
        self.meterFadeOutInterval.pause()
        self.meterFadeOutInterval.clearToInitial()
        self.rodFadeInInterval.pause()
        self.rodFadeInInterval.clearToInitial()
        self.meterFadeInInterval.pause()
        self.meterFadeInInterval.clearToInitial()
        self.rodFadeOutInterval.pause()
        self.rodFadeOutInterval.clearToInitial()

    def fightingTransit(self):
        self.luiFightTransitSequence.start()

    def reelTransit(self):
        self.luiReelTransitSequence.start()

    def struggleTransit(self):
        self.luiStruggleTransitSequence.start()

    def resetFishingRod(self):
        self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)

    def showWinImage(self, fish):
        self.hideGui(['meterFrame', 'fishingHandleBaseFrame'])
        result = fish.myData['name'].split(' ')
        fileName = str(result[0]).capitalize()
        imgName = 'pir_t_gui_fsh_render%s' % fileName
        self.actorAnim[
            'swimIdleOpposite'] = 'models/char/pir_a_gam_fsh_%s_%s.bam' % (
                fish.myData['model'], 'swimIdleOpposite')
        self.fishActor = BlendActor(
            'models/char/pir_r_gam_fsh_%s.bam' % fish.myData['model'],
            self.actorAnim, FishingGlobals.defaultFishBlendTime,
            FishingGlobals.fishBlendTimeDict)
        self.fishActor.setPlayRate(
            fish.myData['speed'] * fish.myData['swimAnimationMultiplier'],
            'swimIdleOpposite')
        self.fishActor.changeAnimationTo('swimIdleOpposite')
        self.fishActor.reparentTo(self.winImagePanel)
        self.fishActor.setScale(self.scaleSize[fish.myData['id']])
        self.fishActor.setPos(1.7, 0, 1.0)
        self.fishActor.setHpr(0, 0, 35)
        self.fishActor.setDepthWrite(True)
        self.fishActor.setDepthTest(True)
        self.wholeStoryTextNode.setText(
            PLocalizer.LegendSelectionGui['wholeStory'][fish.myData['id']])
        self.winImagePanel.show()

    def closeDialogGotNextState(self, object, targetState, ifFadeInAgain):
        if self.fishActor:
            self.fishActor.destroy()
            self.fishActor = None

        self.luiCloseDialogSequence = Sequence(
            Func(self.gameObject.distributedFishingSpot.fadeOut),
            Wait(0.40000000000000002),
            Func(self.UICompoments[object].hide),
            Func(self.gameObject.lfgFsm.request, targetState),
            name=self.gameObject.distributedFishingSpot.uniqueName(
                'luiCloseDialogSequence'))
        self.luiCloseDialogSequence.start()

    def updateStruggleTimerText(self, time, percent):
        self.meterFrame['text'] = str(time)
        self.meterFrame['text_fg'] = (1.0 - percent, percent, 0.0, 1.0)
 def __init__(self, gameObject = None):
     base.loadingScreen.beginStep('LegendaryGameGUI', 4, 20)
     self.gameObject = gameObject
     self.guiImage = loader.loadModel('models/minigames/pir_m_gam_fsh_legendaryGui')
     self.UICompoments = { }
     self.uiBaseNode = NodePath('baseNode')
     self.uiBaseNode.reparentTo(aspect2d)
     self.uiBaseNode.show()
     self.leftBaseNode = NodePath('leftBaseNode')
     self.leftBaseNode.reparentTo(base.a2dLeftCenter)
     self.leftBaseNode.show()
     self.fishActor = None
     self.actorAnim = { }
     self.scaleSize = {
         InventoryType.Collection_Set11_Part1: 0.059999999999999998,
         InventoryType.Collection_Set11_Part2: 0.055,
         InventoryType.Collection_Set11_Part3: 0.12,
         InventoryType.Collection_Set11_Part4: 0.086999999999999994,
         InventoryType.Collection_Set11_Part5: 0.080000000000000002 }
     self.meterFrame = DirectFrame(parent = self.leftBaseNode, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.0, 0.0), frameColor = (1.0, 1.0, 1.0, 0.0), relief = None, state = DGG.DISABLED, pos = (1.0, 0.0, -0.45000000000000001), hpr = (0, 0, 0), scale = (1.3, 0.0, 1.3), image = self.guiImage.find('**/pir_t_gui_fsh_meter'), image_scale = (0.20000000000000001, 0.0, 0.80000000000000004), image_pos = (0, 0, 0), text = '', textMayChange = 1, text_scale = PiratesGuiGlobals.TextScaleTitleLarge, text_pos = (-0.55000000000000004, 0.10000000000000001), text_shadow = PiratesGuiGlobals.TextShadow)
     self.UICompoments['meterFrame'] = self.meterFrame
     self.fishingRod = DirectFrame(parent = self.meterFrame, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.0, 0.0), relief = None, state = DGG.DISABLED, pos = FishingGlobals.fishingRodScreenPosition, image = self.guiImage.find('**/pir_t_gui_fsh_fullRod'), image_scale = (1.0, 0.0, 0.125), image_pos = (0.20000000000000001, 0, 0))
     self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)
     self.UICompoments['fishingRod'] = self.fishingRod
     base.loadingScreen.tick()
     self.fishingHandleBaseFrame = DirectFrame(parent = self.uiBaseNode, frameSize = (-0.29999999999999999, 0.29999999999999999, -1.5, 1.5), frameColor = (1.0, 1.0, 1.0, 0.0), relief = None, state = DGG.DISABLED, pos = (0.0, 0.0, 0.0), hpr = (0, 0, 0), scale = (0.71999999999999997, 0.0, 0.71999999999999997), image = self.guiImage.find('**/pir_t_gui_fsh_partialRod'), image_scale = (3.7999999999999998, 0.0, 1.8999999999999999), image_pos = (0, 0, 0), image_hpr = (0.0, 0.0, 0))
     self.fishingHandleBaseFrame.hide()
     self.UICompoments['fishingHandleBaseFrame'] = self.fishingHandleBaseFrame
     self.fishingHandle = DirectFrame(parent = self.fishingHandleBaseFrame, frameSize = (-0.080000000000000002, 0.080000000000000002, -0.20000000000000001, 0.20000000000000001), relief = None, state = DGG.DISABLED, pos = (-0.10000000000000001, 0.0, -0.050000000000000003), hpr = (0, 0, 0), image = self.guiImage.find('**/pir_t_gui_fsh_handleArm'), image_scale = (1.0, 0.0, 1.0), image_pos = (-0.042000000000000003, 0, -0.115), image_hpr = (0.0, 0.0, 0))
     self.UICompoments['fishingHandle'] = self.fishingHandle
     self.arrowImage = DirectFrame(parent = self.fishingHandleBaseFrame, frameSize = (-0.40000000000000002, 0.40000000000000002, -0.40000000000000002, 0.40000000000000002), relief = None, state = DGG.DISABLED, pos = (0.0, 0.0, 0.0), hpr = (0, 0, 0), scale = (1.2, 0.0, 1.2), image = self.guiImage.find('**/pir_t_gui_fsh_arrow'), image_scale = (1.0, 0.0, 1.0), image_pos = (0.0, 0, 0.0), image_hpr = (0.0, 0.0, 0.0))
     self.arrowImage.hide()
     self.UICompoments['arrowImage'] = self.arrowImage
     btnGeom = (self.guiImage.find('**/pir_t_gui_fsh_handle'), self.guiImage.find('**/pir_t_gui_fsh_handle'), self.guiImage.find('**/pir_t_gui_fsh_handleOn'))
     self.fishingHandleButton = GuiButton(pos = (-0.29999999999999999, 0, -0.55000000000000004), hpr = (0, 0, 0), scale = 0.45000000000000001, image = btnGeom, image_pos = (0, 0, 0), image_scale = 1.0, sortOrder = 2)
     self.fishingHandleButton.bind(DGG.B1PRESS, self.handleButtonClicked)
     self.fishingHandleButton.reparentTo(self.fishingHandle)
     self.UICompoments['fishingHandleButton'] = self.fishingHandleButton
     self.fishingHandleBaseFrame.setTransparency(TransparencyAttrib.MAlpha)
     self.meterFrame.setTransparency(TransparencyAttrib.MAlpha)
     self.lineOneTransitTextNode = TextNode('lineOneTransitText')
     self.lineOneTransitTextNode.setFont(PiratesGlobals.getPirateFont())
     self.lineOneTransitTextNode.setText('')
     self.lineOneTransitTextNode.setAlign(TextNode.ACenter)
     self.lineOneTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
     self.lineOneTransitTextNodePath = NodePath(self.lineOneTransitTextNode)
     self.lineOneTransitTextNodePath.setPos(0.0, 0.0, -0.80000000000000004)
     self.lineOneTransitTextNodePath.setScale(0.34999999999999998, 0.34999999999999998, 0.34999999999999998)
     self.lineOneTransitTextNodePath.reparentTo(self.uiBaseNode)
     self.lineOneTransitTextNodePath.hide()
     self.UICompoments['lineOneTransitText'] = self.lineOneTransitTextNodePath
     self.lineTwoTransitTextNode = TextNode('lineTwoTransitText')
     self.lineTwoTransitTextNode.setFont(PiratesGlobals.getPirateFont())
     self.lineTwoTransitTextNode.setText('')
     self.lineTwoTransitTextNode.setAlign(TextNode.ACenter)
     self.lineTwoTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
     self.lineTwoTransitTextNodePath = NodePath(self.lineTwoTransitTextNode)
     self.lineTwoTransitTextNodePath.setPos(-0.40000000000000002, 0.0, -0.94999999999999996)
     self.lineTwoTransitTextNodePath.setScale(0.12, 0.12, 0.12)
     self.lineTwoTransitTextNodePath.reparentTo(self.uiBaseNode)
     self.lineTwoTransitTextNodePath.hide()
     self.UICompoments['lineTwoTransitText'] = self.lineTwoTransitTextNodePath
     base.loadingScreen.tick()
     self.test_guiImage = loader.loadModel('models/gui/toplevel_gui')
     self.buttonIcon = (self.test_guiImage.find('**/treasure_chest_closed'), self.test_guiImage.find('**/treasure_chest_closed'), self.test_guiImage.find('**/treasure_chest_closed_over'))
     self.winImagePanel = GuiPanel.GuiPanel('', 2.6000000000000001, 1.8999999999999999, True)
     self.winImagePanel.setPos(-1.3, 0.0, -0.94999999999999996)
     self.winImagePanel.reparentTo(self.uiBaseNode)
     self.winImagePanel.background = OnscreenImage(parent = self.winImagePanel, scale = (2.3999999999999999, 0, 1.8), image = self.guiImage.find('**/pir_t_gui_fsh_posterBackground'), hpr = (0, 0, 0), pos = (1.3, 0, 0.94999999999999996))
     self.winImagePanel.setBin('gui-popup', -4)
     self.winTitleTextNode = TextNode('winTitleTextNode')
     self.winTitleTextNode.setText('Congratulations!')
     self.winTitleTextNode.setAlign(TextNode.ACenter)
     self.winTitleTextNode.setFont(PiratesGlobals.getPirateFont())
     self.winTitleTextNode.setTextColor(0.23000000000000001, 0.089999999999999997, 0.029999999999999999, 1.0)
     self.winTitleTextNodePath = NodePath(self.winTitleTextNode)
     self.winTitleTextNodePath.setPos(1.3500000000000001, 0.0, 1.6699999999999999)
     self.winTitleTextNodePath.setScale(0.17999999999999999)
     self.winTitleTextNodePath.reparentTo(self.winImagePanel)
     self.wholeStoryTextNode = TextNode('storyTextNode')
     self.wholeStoryTextNode.setText('')
     self.wholeStoryTextNode.setWordwrap(19.0)
     self.wholeStoryTextNode.setTextColor(0.23000000000000001, 0.089999999999999997, 0.029999999999999999, 1.0)
     self.wholeStoryTextNodePath = NodePath(self.wholeStoryTextNode)
     self.wholeStoryTextNodePath.setPos(0.33000000000000002, 0.0, 1.6399999999999999)
     self.wholeStoryTextNodePath.setScale(0.050000000000000003)
     self.wholeStoryTextNodePath.reparentTo(self.winImagePanel)
     self.winImagePanel.closeButton['command'] = self.closeDialogGotNextState
     self.winImagePanel.closeButton['extraArgs'] = [
         'winImagePanel',
         'FarewellLegendaryFish',
         False]
     self.UICompoments['winImagePanel'] = self.winImagePanel
     self.winImagePanel.hide()
     self.luiCloseDialogSequence = Sequence()
     self.arrowImageRotationInterval = LerpHprInterval(self.arrowImage, 2.2000000000000002, self.arrowImage.getHpr() + Point3(0.0, 0.0, 280.0), self.arrowImage.getHpr())
     self.luiArrowRotatingSequence = Sequence(Func(self.showGui, [
         'arrowImage']), Parallel(Func(self.arrowImageRotationInterval.start), Wait(2.2000000000000002)), Func(self.hideGui, [
         'arrowImage']), Func(self.arrowImage.setHpr, self.arrowImage.getHpr() + Point3(0.0, 0.0, 5.0)), name = self.gameObject.distributedFishingSpot.uniqueName('luiArrowRotatingSequence'))
     self.lineOneColorChange = LerpColorScaleInterval(self.lineOneTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (1.0, 1.0, 1.0, 0.0), (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut')
     self.lineOnePosChange = LerpPosInterval(self.lineOneTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (0.0, 0.0, -0.20000000000000001), (0.0, 0.0, -0.80000000000000004), blendType = 'easeOut')
     self.lineTwoCholorChange = LerpColorScaleInterval(self.lineTwoTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (1.0, 1.0, 1.0, 1.0), (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut')
     self.lineTwoPosChange = LerpPosInterval(self.lineTwoTransitTextNodePath, FishingGlobals.legendaryTransitionTextDuration, (0.0, 0.0, -0.32000000000000001), (0.0, 0.0, -0.94999999999999996), blendType = 'easeOut')
     self.transitionTextMovingSequence = Sequence(Func(self.lineOneTransitTextNodePath.show), Func(self.lineTwoTransitTextNodePath.show), Parallel(self.lineOnePosChange, self.lineTwoPosChange, self.lineOneColorChange, self.lineTwoCholorChange), Func(self.lineOneTransitTextNodePath.hide), Func(self.lineTwoTransitTextNodePath.hide), name = self.gameObject.distributedFishingSpot.uniqueName('transitionTextMovingSequence'))
     self.meterFadeInInterval = Sequence(Func(self.meterFrame.show), LerpColorScaleInterval(self.meterFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 1.0), startColorScale = (1.0, 1.0, 1.0, 0.0), blendType = 'easeOut'), name = 'FadeInLegendaryMeter')
     self.meterFadeOutInterval = Sequence(LerpColorScaleInterval(self.meterFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 0.0), startColorScale = (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut'), Func(self.meterFrame.hide), name = 'FadeOutLegendaryMeter')
     self.rodFadeInInterval = Sequence(Func(self.fishingHandleBaseFrame.show), LerpColorScaleInterval(self.fishingHandleBaseFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 1.0), startColorScale = (1.0, 1.0, 1.0, 0.0), blendType = 'easeOut'), name = 'FadeInLegendaryRodInterface')
     self.rodFadeOutInterval = Sequence(LerpColorScaleInterval(self.fishingHandleBaseFrame, FishingGlobals.legendaryTransitionTextDuration, colorScale = (1.0, 1.0, 1.0, 0.0), startColorScale = (1.0, 1.0, 1.0, 1.0), blendType = 'easeOut'), Func(self.fishingHandleBaseFrame.hide), name = 'FadeOutLegendaryRodInterface')
     base.loadingScreen.tick()
     smallScale = self.fishingHandleButton['scale']
     bigScale = self.fishingHandleButton['scale'] * 1.2
     self.buttonGrowUpInterval = LerpScaleInterval(self.fishingHandleButton, 1.0, bigScale, smallScale)
     self.luiFightTransitSequence = Sequence(Parallel(Func(self.fishingHandleBaseFrame.show), Func(self.meterFadeOutInterval.start), Func(self.rodFadeInInterval.start), Func(self.buttonGrowUpInterval.start)), Wait(1.0), Func(self.meterFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiFightTransitSequence'))
     self.luiReelTransitSequence = Sequence(Parallel(Func(self.fishingHandleBaseFrame.show), Func(self.meterFadeOutInterval.start), Func(self.rodFadeInInterval.start)), Wait(1.0), Func(self.meterFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiReelTransitSequence'))
     self.luiStruggleTransitSequence = Sequence(Parallel(Func(self.meterFrame.show), Func(self.resetFishingRod), self.meterFadeInInterval, self.rodFadeOutInterval), Wait(1.0), Func(self.fishingHandleBaseFrame.hide), name = self.gameObject.distributedFishingSpot.uniqueName('luiStruggleTransitSequence'))
     self.meterFadeOutInterval.start()
     self.rodFadeOutInterval.start()
     self.hideAllGUI()
     base.loadingScreen.endStep('LegendaryGameGUI')
Beispiel #27
0
 def __init__(self, gameObject=None):
     base.loadingScreen.beginStep('LegendaryGameGUI', 4, 20)
     self.gameObject = gameObject
     self.guiImage = loader.loadModel(
         'models/minigames/pir_m_gam_fsh_legendaryGui')
     self.UICompoments = {}
     self.uiBaseNode = NodePath('baseNode')
     self.uiBaseNode.reparentTo(aspect2d)
     self.uiBaseNode.show()
     self.leftBaseNode = NodePath('leftBaseNode')
     self.leftBaseNode.reparentTo(base.a2dLeftCenter)
     self.leftBaseNode.show()
     self.fishActor = None
     self.actorAnim = {}
     self.scaleSize = {
         InventoryType.Collection_Set11_Part1: 0.059999999999999998,
         InventoryType.Collection_Set11_Part2: 0.055,
         InventoryType.Collection_Set11_Part3: 0.12,
         InventoryType.Collection_Set11_Part4: 0.086999999999999994,
         InventoryType.Collection_Set11_Part5: 0.080000000000000002
     }
     self.meterFrame = DirectFrame(
         parent=self.leftBaseNode,
         frameSize=(-0.29999999999999999, 0.29999999999999999, -1.0, 0.0),
         frameColor=(1.0, 1.0, 1.0, 0.0),
         relief=None,
         state=DGG.DISABLED,
         pos=(1.0, 0.0, -0.45000000000000001),
         hpr=(0, 0, 0),
         scale=(1.3, 0.0, 1.3),
         image=self.guiImage.find('**/pir_t_gui_fsh_meter'),
         image_scale=(0.20000000000000001, 0.0, 0.80000000000000004),
         image_pos=(0, 0, 0),
         text='',
         textMayChange=1,
         text_scale=PiratesGuiGlobals.TextScaleTitleLarge,
         text_pos=(-0.55000000000000004, 0.10000000000000001),
         text_shadow=PiratesGuiGlobals.TextShadow)
     self.UICompoments['meterFrame'] = self.meterFrame
     self.fishingRod = DirectFrame(
         parent=self.meterFrame,
         frameSize=(-0.29999999999999999, 0.29999999999999999, -1.0, 0.0),
         relief=None,
         state=DGG.DISABLED,
         pos=FishingGlobals.fishingRodScreenPosition,
         image=self.guiImage.find('**/pir_t_gui_fsh_fullRod'),
         image_scale=(1.0, 0.0, 0.125),
         image_pos=(0.20000000000000001, 0, 0))
     self.fishingRod.setR(FishingGlobals.fishingRodInitSlope)
     self.UICompoments['fishingRod'] = self.fishingRod
     base.loadingScreen.tick()
     self.fishingHandleBaseFrame = DirectFrame(
         parent=self.uiBaseNode,
         frameSize=(-0.29999999999999999, 0.29999999999999999, -1.5, 1.5),
         frameColor=(1.0, 1.0, 1.0, 0.0),
         relief=None,
         state=DGG.DISABLED,
         pos=(0.0, 0.0, 0.0),
         hpr=(0, 0, 0),
         scale=(0.71999999999999997, 0.0, 0.71999999999999997),
         image=self.guiImage.find('**/pir_t_gui_fsh_partialRod'),
         image_scale=(3.7999999999999998, 0.0, 1.8999999999999999),
         image_pos=(0, 0, 0),
         image_hpr=(0.0, 0.0, 0))
     self.fishingHandleBaseFrame.hide()
     self.UICompoments[
         'fishingHandleBaseFrame'] = self.fishingHandleBaseFrame
     self.fishingHandle = DirectFrame(
         parent=self.fishingHandleBaseFrame,
         frameSize=(-0.080000000000000002, 0.080000000000000002,
                    -0.20000000000000001, 0.20000000000000001),
         relief=None,
         state=DGG.DISABLED,
         pos=(-0.10000000000000001, 0.0, -0.050000000000000003),
         hpr=(0, 0, 0),
         image=self.guiImage.find('**/pir_t_gui_fsh_handleArm'),
         image_scale=(1.0, 0.0, 1.0),
         image_pos=(-0.042000000000000003, 0, -0.115),
         image_hpr=(0.0, 0.0, 0))
     self.UICompoments['fishingHandle'] = self.fishingHandle
     self.arrowImage = DirectFrame(
         parent=self.fishingHandleBaseFrame,
         frameSize=(-0.40000000000000002, 0.40000000000000002,
                    -0.40000000000000002, 0.40000000000000002),
         relief=None,
         state=DGG.DISABLED,
         pos=(0.0, 0.0, 0.0),
         hpr=(0, 0, 0),
         scale=(1.2, 0.0, 1.2),
         image=self.guiImage.find('**/pir_t_gui_fsh_arrow'),
         image_scale=(1.0, 0.0, 1.0),
         image_pos=(0.0, 0, 0.0),
         image_hpr=(0.0, 0.0, 0.0))
     self.arrowImage.hide()
     self.UICompoments['arrowImage'] = self.arrowImage
     btnGeom = (self.guiImage.find('**/pir_t_gui_fsh_handle'),
                self.guiImage.find('**/pir_t_gui_fsh_handle'),
                self.guiImage.find('**/pir_t_gui_fsh_handleOn'))
     self.fishingHandleButton = GuiButton(pos=(-0.29999999999999999, 0,
                                               -0.55000000000000004),
                                          hpr=(0, 0, 0),
                                          scale=0.45000000000000001,
                                          image=btnGeom,
                                          image_pos=(0, 0, 0),
                                          image_scale=1.0,
                                          sortOrder=2)
     self.fishingHandleButton.bind(DGG.B1PRESS, self.handleButtonClicked)
     self.fishingHandleButton.reparentTo(self.fishingHandle)
     self.UICompoments['fishingHandleButton'] = self.fishingHandleButton
     self.fishingHandleBaseFrame.setTransparency(TransparencyAttrib.MAlpha)
     self.meterFrame.setTransparency(TransparencyAttrib.MAlpha)
     self.lineOneTransitTextNode = TextNode('lineOneTransitText')
     self.lineOneTransitTextNode.setFont(PiratesGlobals.getPirateFont())
     self.lineOneTransitTextNode.setText('')
     self.lineOneTransitTextNode.setAlign(TextNode.ACenter)
     self.lineOneTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
     self.lineOneTransitTextNodePath = NodePath(self.lineOneTransitTextNode)
     self.lineOneTransitTextNodePath.setPos(0.0, 0.0, -0.80000000000000004)
     self.lineOneTransitTextNodePath.setScale(0.34999999999999998,
                                              0.34999999999999998,
                                              0.34999999999999998)
     self.lineOneTransitTextNodePath.reparentTo(self.uiBaseNode)
     self.lineOneTransitTextNodePath.hide()
     self.UICompoments[
         'lineOneTransitText'] = self.lineOneTransitTextNodePath
     self.lineTwoTransitTextNode = TextNode('lineTwoTransitText')
     self.lineTwoTransitTextNode.setFont(PiratesGlobals.getPirateFont())
     self.lineTwoTransitTextNode.setText('')
     self.lineTwoTransitTextNode.setAlign(TextNode.ACenter)
     self.lineTwoTransitTextNode.setTextColor(1.0, 1.0, 1.0, 0.5)
     self.lineTwoTransitTextNodePath = NodePath(self.lineTwoTransitTextNode)
     self.lineTwoTransitTextNodePath.setPos(-0.40000000000000002, 0.0,
                                            -0.94999999999999996)
     self.lineTwoTransitTextNodePath.setScale(0.12, 0.12, 0.12)
     self.lineTwoTransitTextNodePath.reparentTo(self.uiBaseNode)
     self.lineTwoTransitTextNodePath.hide()
     self.UICompoments[
         'lineTwoTransitText'] = self.lineTwoTransitTextNodePath
     base.loadingScreen.tick()
     self.test_guiImage = loader.loadModel('models/gui/toplevel_gui')
     self.buttonIcon = (
         self.test_guiImage.find('**/treasure_chest_closed'),
         self.test_guiImage.find('**/treasure_chest_closed'),
         self.test_guiImage.find('**/treasure_chest_closed_over'))
     self.winImagePanel = GuiPanel.GuiPanel('', 2.6000000000000001,
                                            1.8999999999999999, True)
     self.winImagePanel.setPos(-1.3, 0.0, -0.94999999999999996)
     self.winImagePanel.reparentTo(self.uiBaseNode)
     self.winImagePanel.background = OnscreenImage(
         parent=self.winImagePanel,
         scale=(2.3999999999999999, 0, 1.8),
         image=self.guiImage.find('**/pir_t_gui_fsh_posterBackground'),
         hpr=(0, 0, 0),
         pos=(1.3, 0, 0.94999999999999996))
     self.winImagePanel.setBin('gui-popup', -4)
     self.winTitleTextNode = TextNode('winTitleTextNode')
     self.winTitleTextNode.setText('Congratulations!')
     self.winTitleTextNode.setAlign(TextNode.ACenter)
     self.winTitleTextNode.setFont(PiratesGlobals.getPirateFont())
     self.winTitleTextNode.setTextColor(0.23000000000000001,
                                        0.089999999999999997,
                                        0.029999999999999999, 1.0)
     self.winTitleTextNodePath = NodePath(self.winTitleTextNode)
     self.winTitleTextNodePath.setPos(1.3500000000000001, 0.0,
                                      1.6699999999999999)
     self.winTitleTextNodePath.setScale(0.17999999999999999)
     self.winTitleTextNodePath.reparentTo(self.winImagePanel)
     self.wholeStoryTextNode = TextNode('storyTextNode')
     self.wholeStoryTextNode.setText('')
     self.wholeStoryTextNode.setWordwrap(19.0)
     self.wholeStoryTextNode.setTextColor(0.23000000000000001,
                                          0.089999999999999997,
                                          0.029999999999999999, 1.0)
     self.wholeStoryTextNodePath = NodePath(self.wholeStoryTextNode)
     self.wholeStoryTextNodePath.setPos(0.33000000000000002, 0.0,
                                        1.6399999999999999)
     self.wholeStoryTextNodePath.setScale(0.050000000000000003)
     self.wholeStoryTextNodePath.reparentTo(self.winImagePanel)
     self.winImagePanel.closeButton[
         'command'] = self.closeDialogGotNextState
     self.winImagePanel.closeButton['extraArgs'] = [
         'winImagePanel', 'FarewellLegendaryFish', False
     ]
     self.UICompoments['winImagePanel'] = self.winImagePanel
     self.winImagePanel.hide()
     self.luiCloseDialogSequence = Sequence()
     self.arrowImageRotationInterval = LerpHprInterval(
         self.arrowImage, 2.2000000000000002,
         self.arrowImage.getHpr() + Point3(0.0, 0.0, 280.0),
         self.arrowImage.getHpr())
     self.luiArrowRotatingSequence = Sequence(
         Func(self.showGui, ['arrowImage']),
         Parallel(Func(self.arrowImageRotationInterval.start),
                  Wait(2.2000000000000002)),
         Func(self.hideGui, ['arrowImage']),
         Func(self.arrowImage.setHpr,
              self.arrowImage.getHpr() + Point3(0.0, 0.0, 5.0)),
         name=self.gameObject.distributedFishingSpot.uniqueName(
             'luiArrowRotatingSequence'))
     self.lineOneColorChange = LerpColorScaleInterval(
         self.lineOneTransitTextNodePath,
         FishingGlobals.legendaryTransitionTextDuration,
         (1.0, 1.0, 1.0, 0.0), (1.0, 1.0, 1.0, 1.0),
         blendType='easeOut')
     self.lineOnePosChange = LerpPosInterval(
         self.lineOneTransitTextNodePath,
         FishingGlobals.legendaryTransitionTextDuration,
         (0.0, 0.0, -0.20000000000000001), (0.0, 0.0, -0.80000000000000004),
         blendType='easeOut')
     self.lineTwoCholorChange = LerpColorScaleInterval(
         self.lineTwoTransitTextNodePath,
         FishingGlobals.legendaryTransitionTextDuration,
         (1.0, 1.0, 1.0, 1.0), (1.0, 1.0, 1.0, 1.0),
         blendType='easeOut')
     self.lineTwoPosChange = LerpPosInterval(
         self.lineTwoTransitTextNodePath,
         FishingGlobals.legendaryTransitionTextDuration,
         (0.0, 0.0, -0.32000000000000001), (0.0, 0.0, -0.94999999999999996),
         blendType='easeOut')
     self.transitionTextMovingSequence = Sequence(
         Func(self.lineOneTransitTextNodePath.show),
         Func(self.lineTwoTransitTextNodePath.show),
         Parallel(self.lineOnePosChange, self.lineTwoPosChange,
                  self.lineOneColorChange, self.lineTwoCholorChange),
         Func(self.lineOneTransitTextNodePath.hide),
         Func(self.lineTwoTransitTextNodePath.hide),
         name=self.gameObject.distributedFishingSpot.uniqueName(
             'transitionTextMovingSequence'))
     self.meterFadeInInterval = Sequence(
         Func(self.meterFrame.show),
         LerpColorScaleInterval(
             self.meterFrame,
             FishingGlobals.legendaryTransitionTextDuration,
             colorScale=(1.0, 1.0, 1.0, 1.0),
             startColorScale=(1.0, 1.0, 1.0, 0.0),
             blendType='easeOut'),
         name='FadeInLegendaryMeter')
     self.meterFadeOutInterval = Sequence(LerpColorScaleInterval(
         self.meterFrame,
         FishingGlobals.legendaryTransitionTextDuration,
         colorScale=(1.0, 1.0, 1.0, 0.0),
         startColorScale=(1.0, 1.0, 1.0, 1.0),
         blendType='easeOut'),
                                          Func(self.meterFrame.hide),
                                          name='FadeOutLegendaryMeter')
     self.rodFadeInInterval = Sequence(
         Func(self.fishingHandleBaseFrame.show),
         LerpColorScaleInterval(
             self.fishingHandleBaseFrame,
             FishingGlobals.legendaryTransitionTextDuration,
             colorScale=(1.0, 1.0, 1.0, 1.0),
             startColorScale=(1.0, 1.0, 1.0, 0.0),
             blendType='easeOut'),
         name='FadeInLegendaryRodInterface')
     self.rodFadeOutInterval = Sequence(
         LerpColorScaleInterval(
             self.fishingHandleBaseFrame,
             FishingGlobals.legendaryTransitionTextDuration,
             colorScale=(1.0, 1.0, 1.0, 0.0),
             startColorScale=(1.0, 1.0, 1.0, 1.0),
             blendType='easeOut'),
         Func(self.fishingHandleBaseFrame.hide),
         name='FadeOutLegendaryRodInterface')
     base.loadingScreen.tick()
     smallScale = self.fishingHandleButton['scale']
     bigScale = self.fishingHandleButton['scale'] * 1.2
     self.buttonGrowUpInterval = LerpScaleInterval(self.fishingHandleButton,
                                                   1.0, bigScale,
                                                   smallScale)
     self.luiFightTransitSequence = Sequence(
         Parallel(Func(self.fishingHandleBaseFrame.show),
                  Func(self.meterFadeOutInterval.start),
                  Func(self.rodFadeInInterval.start),
                  Func(self.buttonGrowUpInterval.start)),
         Wait(1.0),
         Func(self.meterFrame.hide),
         name=self.gameObject.distributedFishingSpot.uniqueName(
             'luiFightTransitSequence'))
     self.luiReelTransitSequence = Sequence(
         Parallel(Func(self.fishingHandleBaseFrame.show),
                  Func(self.meterFadeOutInterval.start),
                  Func(self.rodFadeInInterval.start)),
         Wait(1.0),
         Func(self.meterFrame.hide),
         name=self.gameObject.distributedFishingSpot.uniqueName(
             'luiReelTransitSequence'))
     self.luiStruggleTransitSequence = Sequence(
         Parallel(Func(self.meterFrame.show), Func(self.resetFishingRod),
                  self.meterFadeInInterval, self.rodFadeOutInterval),
         Wait(1.0),
         Func(self.fishingHandleBaseFrame.hide),
         name=self.gameObject.distributedFishingSpot.uniqueName(
             'luiStruggleTransitSequence'))
     self.meterFadeOutInterval.start()
     self.rodFadeOutInterval.start()
     self.hideAllGUI()
     base.loadingScreen.endStep('LegendaryGameGUI')
Beispiel #28
0
    def rotateCube(self, direction):
        """
        rotates the cube according to the direction passed as first argument. accepted values are "up" "down" "left" "right"
        """
        #first check if we are allowed to move the block at all..
        if self.isAnimated():
            print("canceling rotation of cube")
            return

        #cleaning up from last rotation (we cant clean those up at the end of this function cause the interval needs the dummynode for rotation)
        self.cube.wrtReparentTo(render)
        try:
            dummy.remove_node()
        except:
            pass

        self.setAnimated(True)
        duration = 0.2
        x1, y1, x2, y2 = self.getCubeTiles()

        self.level.animateTile(x1, y1)
        self.level.animateTile(x2, y2)

        dummy = render.attachNewNode("dummy")
        dummy.reparentTo(self.cube)
        dummy.setZ(render, 0)
        dummy.wrtReparentTo(render)
        dummy.setHpr(0, 0, 0)
        dest_hpr = Vec3(0)

        if self.cube.getZ(render) > .7:
            #case1 : cube is standing upright
            #ok... since we rotate relative there are rounding errors... since there !might! be some uebernoob playing the game
            #needing one gazillion rotations to reach the goal it might happen those rounding errors actually get visible
            #so let him enjoy and reset the cube every-time it's standing straight-up.

            self.cube.setZ(
                render, 1
            )  #how comes this is one?.. well.. i know.. because of my learnings..
            self.cube.setX(render, round(self.cube.getX(render), 0))
            self.cube.setY(render, round(self.cube.getY(render), 0))
            self.cube.setH(render, round(self.cube.getH(render), 0))
            self.cube.setP(render, round(self.cube.getP(render), 0))
            self.cube.setR(render, round(self.cube.getR(render), 0))

            if direction == "right":
                dummy.setY(dummy, .5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, -90, 0)
                self.setCubeTiles(x1, y1 + 1, x1, y1 + 2)

            if direction == "left":
                dummy.setY(dummy, -.5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 90, 0)
                self.setCubeTiles(x1, y1 - 2, x1, y1 - 1)

            if direction == "up":
                dummy.setX(dummy, -.5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, -90)
                self.setCubeTiles(x1 - 2, y1, x1 - 1, y1)

            if direction == "down":
                dummy.setX(dummy, .5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, 90)
                self.setCubeTiles(x1 + 1, y1, x1 + 2, y1)

        elif x1 == x2:  #if aligned to y-axis
            if direction == "right":
                dummy.setY(dummy, 1)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, -90, 0)
                self.setCubeTiles(x1, y1 + 2)

            if direction == "left":
                dummy.setY(dummy, -1)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 90, 0)
                self.setCubeTiles(x1, y1 - 1)

            if direction == "up":
                dummy.setX(dummy, -.5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, -90)
                self.setCubeTiles(x1 - 1, y1, x2 - 1, y2)

            if direction == "down":
                dummy.setX(dummy, .5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, 90)
                self.setCubeTiles(x1 + 1, y1, x2 + 1, y2)

        elif y1 == y2:  #if it is alligned to x-axis..

            if direction == "right":
                dummy.setY(dummy, .5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, -90, 0)
                self.setCubeTiles(x1, y1 + 1, x2, y2 + 1)

            if direction == "left":
                dummy.setY(dummy, -.5)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 90, 0)
                self.setCubeTiles(x1, y1 - 1, x2, y2 - 1)

            if direction == "up":
                dummy.setX(dummy, -1)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, -90)
                self.setCubeTiles(x1 - 1, y1)

            if direction == "down":
                dummy.setX(dummy, 1)
                self.cube.wrtReparentTo(dummy)
                dest_hpr = Vec3(0, 0, 90)
                self.setCubeTiles(x1 + 2, y1)

        else:
            print("Invalid move. Waiting ..")

        print("Rotating!")
        anim = self.animate(
            LerpHprInterval(dummy, duration, dest_hpr, (0, 0, 0)))

        #this sorta.. doesnt belong here.. but i dunno where to put it yet.
        x1, y1, x2, y2 = self.getCubeTiles()
        # self.level.tintTile(x1,y1) #this is fun to play with if your cube is invisible...
        # self.level.tintTile(x2,y2)
        self.level.stopAnimatedTile(
            x1, y1)  #stops the tile-animation for the tiles below the block
        self.level.stopAnimatedTile(x2, y2)

        #cheking what consequences your move had... muhahaa... if you get a 1 .. i've got bad news for you
        checkresult = checkMove(self.level.levelNode, self.getCubeTiles(),
                                self.sounds)
        if checkresult == 1:
            self.falls += 1
            self.moves += 1

            # Force to the corner when the cuboid falls down
            side_force = 1.7

            force = Vec3(0, 0, 0)
            if direction == "up":
                force = Vec3(-side_force, 0, 0)
            elif direction == "down":
                force = Vec3(side_force, 0, 0)
            elif direction == "left":
                force = Vec3(0, -side_force, 0)
            elif direction == "right":
                force = Vec3(0, side_force, 0)

            dummy.set_hpr(render, Vec3(0, 0, 0))

            del anim

            self.setAnimated(True)
            final_hpr = dest_hpr * 3.0 + Vec3(random(), random(),
                                              random()) * 360.0 * 0.0
            anim = LerpFunc(self.animateCube,
                            fromData=0,
                            toData=1,
                            duration=1.3,
                            blendType='noBlend',
                            extraArgs=[
                                dummy.get_pos(render),
                                Vec3(0), final_hpr, dummy, force
                            ])
            taskMgr.doMethodLater(anim.getDuration(), self.resetCube,
                                  "resetTask")

        elif checkresult == 2:

            #ok.. once reached the goal, move the block down, fading it out. thenload the new level etc.
            anim.pop()
            anim.append(Func(lambda: self.level.fadeOutLevel()))

            Sequence(Wait(0.3), Func(lambda *args: self.cube.hide())).start()

            taskMgr.doMethodLater(anim.getDuration() + 2, self.levelUp,
                                  "lvlup")
            taskMgr.doMethodLater(anim.getDuration() + 2,
                                  lambda *args: self.cube.show(), "show cube")
            taskMgr.doMethodLater(
                anim.getDuration() + 2,
                lambda *args: self.shard_node.node().remove_all_children(),
                "clear shards")

            Sequence(Wait(0.2),
                     Func(lambda *args: self.sounds.playSound("finish.wav"))
                     ).start()

            self.moves = 0
            self.falls = 0

            cube_min, cube_max = Vec3(-0.5, -0.5, -1), Vec3(0.5, 0.5, 1)
            self.shard_node.set_pos(dummy.get_pos(render) + Vec3(-0.5, 0, 0))
            shard_size = (cube_max - cube_min) / 5.0

            self.shard_node.hide()
            Sequence(Wait(0.22),
                     Func(lambda *args: self.shard_node.show())).start()

            for i in range(5):
                for j in range(5):
                    for k in range(5):
                        shard = loader.loadModel("models/CubeShard.bam")
                        shard.reparent_to(self.shard_node)
                        shard.set_x(i * shard_size.x + 0.1)
                        shard.set_y(j * shard_size.y + 0.1)
                        shard.set_z(k * shard_size.z + 0.2)
                        shard.set_scale(0.8 + random())

                        force = Vec3(i - 2 - 0.15, j - 2 - 0.15, k - 2 + 2.6)
                        force.normalize()
                        force *= 12.0 * (1 + random() * 0.5)

                        d_hpr = Vec3(random(), random(),
                                     random()) * 360.0 * (3.0 + random())

                        shard_anim = Sequence(
                            Wait(0.22),
                            LerpFunc(self.animateShard,
                                     fromData=0,
                                     toData=2,
                                     duration=2.0,
                                     blendType='noBlend',
                                     extraArgs=[
                                         shard.get_pos(), d_hpr, shard, force
                                     ]),
                            LerpHprInterval(shard,
                                            1.0 + random(),
                                            d_hpr * 1.6,
                                            d_hpr,
                                            blendType='noBlend'),
                        )
                        shard_anim.start()

        elif checkresult == 0:
            #how lame... just a ..move..
            print("playing sound")
            self.moves += 1
            self.sounds.playSound("stonerotate.wav")
        print("moves:", self.moves, "  falls:", self.falls)
        #last but not least.. we start the animation .. did you know that the pc knows you'r failing before you actually do? .. scary..
        anim.start()
Beispiel #29
0
    def endGame(self, task=None):
        dummy = render.attachNewNode("dummy")
        dummy.reparentTo(self.cube)
        dummy.setZ(render, .1)
        dummy.wrtReparentTo(render)
        dummy.setHpr(0, 0, 0)

        self.level.fadeOutLevel()

        Sequence(Wait(0.3), Func(lambda *args: self.cube.hide())).start()

        taskMgr.doMethodLater(2, self.levelUp, "lvlup")
        taskMgr.doMethodLater(2, lambda *args: self.cube.show(), "show cube")
        taskMgr.doMethodLater(
            2, lambda *args: self.shard_node.node().remove_all_children(),
            "clear shards")

        Sequence(
            Wait(0.2),
            Func(lambda *args: self.sounds.playSound("finish.wav"))).start()

        cube_min, cube_max = Vec3(-0.5, -0.5, -1), Vec3(0.5, 0.5, 1)
        self.shard_node.set_pos(dummy.get_pos(render) + Vec3(-0.5, 0, 0))
        shard_size = (cube_max - cube_min) / 5.0

        self.shard_node.hide()
        Sequence(Wait(0.22),
                 Func(lambda *args: self.shard_node.show())).start()

        for i in range(5):
            for j in range(5):
                for k in range(5):
                    shard = loader.loadModel("models/CubeShard.bam")
                    shard.reparent_to(self.shard_node)
                    shard.set_x(i * shard_size.x + 0.1)
                    shard.set_y(j * shard_size.y + 0.1)
                    shard.set_z(k * shard_size.z + 0.2)
                    shard.set_scale(0.8 + random())

                    force = Vec3(i - 2 - 0.15, j - 2 - 0.15, k - 2 + 2.6)
                    force.normalize()
                    force *= 12.0 * (1 + random() * 0.5)

                    d_hpr = Vec3(random(), random(),
                                 random()) * 360.0 * (3.0 + random())

                    shard_anim = Sequence(
                        Wait(0.22),
                        LerpFunc(
                            self.animateShard,
                            fromData=0,
                            toData=2,
                            duration=2.0,
                            blendType='noBlend',
                            extraArgs=[shard.get_pos(), d_hpr, shard, force]),
                        LerpHprInterval(shard,
                                        1.0 + random(),
                                        d_hpr * 1.6,
                                        d_hpr,
                                        blendType='noBlend'),
                    )
                    shard_anim.start()
Beispiel #30
0
 def init_menu(self):
     interval = LerpHprInterval(self.cameraPivot, 1, (0,0,0), (0,10,0))
     interval2 = LerpPosInterval(self.cameraPivot, 1, (0,0,0), (0,0,-0.05))
     interval.start()
     interval2.start()
     taskMgr.doMethodLater(1, spawnButton, "spawnButton")