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()
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()
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()
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)
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
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")
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)
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()
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()
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()
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)
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()
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)
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()
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()
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)
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)
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)
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')
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 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()
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()
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")