def setupBoardingSphere(self, bitmask = PiratesGlobals.RadarShipBitmask): self.removeBoardingSphere() tubeName = self.uniqueName('proximityCollision') result = self.createShipTube(tubeName, bitmask) self.interactTube = result[2] self.interactTube.setTag('objType', str(PiratesGlobals.COLL_AV)) self.interactTube.setTag('avId', str(self.doId)) sphereScale = ShipGlobals.getBoardingSphereScale(self.modelClass) spherePosH = ShipGlobals.getBoardingSpherePosH(self.modelClass) self.interactTube.setY(spherePosH[0][1]) self.proximityCollisionEnterEvent = 'enter' + tubeName
def setupBoardingSphere(self, bitmask=PiratesGlobals.RadarShipBitmask): self.removeBoardingSphere() tubeName = self.uniqueName('proximityCollision') result = self.createShipTube(tubeName, bitmask) self.interactTube = result[2] self.interactTube.setTag('objType', str(PiratesGlobals.COLL_AV)) self.interactTube.setTag('avId', str(self.doId)) sphereScale = ShipGlobals.getBoardingSphereScale(self.modelClass) spherePosH = ShipGlobals.getBoardingSpherePosH(self.modelClass) self.interactTube.setY(spherePosH[0][1]) self.proximityCollisionEnterEvent = 'enter' + tubeName
def avatarBoardShipFromShip(self, ship, fromShip, showMovie, ts): self.av.wrtReparentTo(fromShip.getModelRoot()) avPos = self.av.getPos() deckPos = None deckPos = ship.getClosestBoardingPos() if not deckPos: (deckPos, h) = ShipGlobals.getBoardingSpherePosH(ship.modelClass) offset = Point3(4 * random.random() - 2, 4 * random.random() - 2, 0) deckPos += offset endPos = self.av.getParent().getRelativePoint(ship.getModelRoot(), Point3(deckPos) + Point3(0, 0, 10)) if showMovie: (rope, ropeActor, ropeEndNode) = self.av.getRope() ropeAnchorNode = fromShip.getRopeAnchorNode(self.av, ropeEndNode) rightHand = self.av.rightHandNode leftHand = self.av.leftHandNode rope.setup(3, ((None, Point3(0, 0, 0)), (self.av, Point3(10, 20, 40)), (ropeAnchorNode, Point3(0, 0, 0)))) rope.reparentTo(ropeEndNode) ropeActor.reparentTo(leftHand) ropeActor.hide() midPos = (avPos + endPos) * 0.5 tWaitToTranslateZ = self.av.getDuration('swing_aboard', fromFrame = 0, toFrame = 42) tTranslateZ = self.av.getDuration('swing_aboard', fromFrame = 42, toFrame = 45) tWaitToAttachRope = self.av.getDuration('swing_aboard', fromFrame = 0, toFrame = 45) tWaitToDetachRope = self.av.getDuration('swing_aboard', fromFrame = 0, toFrame = 75) tRopeSwingDown = 0.75 tRopeSwing = tWaitToDetachRope - tWaitToAttachRope tRopeSwingAway = 0.75 if self.swingTrack: self.swingTrack.pause() self.swingTrack = None if self.av.isLocal(): ship.forceZoneLevel(0) swingTrack = Sequence(Func(self.av.lookAt, ship.getModelRoot()), Func(ship.boardingInit, self.av, fromShip), Func(ropeEndNode.wrtReparentTo, self.av), Parallel(self.av.actorInterval('swing_aboard'), ActorInterval(ropeActor, 'swing_aboard'), Sequence(Wait(tWaitToAttachRope - tRopeSwingDown), LerpPosInterval(ropeEndNode, tRopeSwingDown, Point3(1.0, 0, 3.0))), Sequence(Wait(tWaitToTranslateZ), LerpPosInterval(self.av, tTranslateZ, avPos + Point3(0.0, 0, 25.0))), Sequence(Wait(tWaitToAttachRope), Func(rope.reparentTo, leftHand), Func(ropeActor.show), LerpPosInterval(self.av, tRopeSwing / 2.0, midPos), Func(self.av.wrtReparentTo, ship.getModelRoot()), LerpPosInterval(self.av, tRopeSwing / 2.0, deckPos)), Sequence(Wait(tWaitToDetachRope), Func(rope.reparentTo, ropeEndNode), Func(ropeActor.detachNode), LerpPosInterval(ropeEndNode, tRopeSwingAway, Point3(0, 50, 50)))), Func(fromShip.boardingLeaveShip, self.av), Func(ship.boardingFinish, self.av, deckPos)) self.swingTrack = swingTrack self.swingTrack.start(ts) elif self.swingTrack: self.swingTrack.pause() self.swingTrack = None ship.boardingInit(self.av, ship) self.av.setPos(deckPos) fromShip.boardingLeaveShip(self.av) if self._shipBoardingFinishCall: self._shipBoardingFinishCall.destroy() self._shipBoardingFinishCall = FrameDelayedCall('shipToShipBoardingFinish-%s-%s' % (ship.doId, self.av.doId), Functor(ship.boardingFinish, self.av, deckPos))
def avatarBoardShipFromShip(self, ship, fromShip, showMovie, ts): self.av.wrtReparentTo(fromShip.getModelRoot()) avPos = self.av.getPos() deckPos = None deckPos = ship.getClosestBoardingPos() if not deckPos: deckPos, h = ShipGlobals.getBoardingSpherePosH(ship.modelClass) offset = Point3(4 * random.random() - 2, 4 * random.random() - 2, 0) deckPos += offset endPos = self.av.getParent().getRelativePoint(ship.getModelRoot(), Point3(deckPos) + Point3(0, 0, 10)) if showMovie: rope, ropeActor, ropeEndNode = self.av.getRope() ropeAnchorNode = fromShip.getRopeAnchorNode(self.av, ropeEndNode) rightHand = self.av.rightHandNode leftHand = self.av.leftHandNode rope.setup(3, ((None, Point3(0, 0, 0)), (self.av, Point3(10, 20, 40)), (ropeAnchorNode, Point3(0, 0, 0)))) rope.reparentTo(ropeEndNode) ropeActor.reparentTo(leftHand) ropeActor.hide() midPos = (avPos + endPos) * 0.5 tWaitToTranslateZ = self.av.getDuration('swing_aboard', fromFrame=0, toFrame=42) tTranslateZ = self.av.getDuration('swing_aboard', fromFrame=42, toFrame=45) tWaitToAttachRope = self.av.getDuration('swing_aboard', fromFrame=0, toFrame=45) tWaitToDetachRope = self.av.getDuration('swing_aboard', fromFrame=0, toFrame=75) tRopeSwingDown = 0.75 tRopeSwing = tWaitToDetachRope - tWaitToAttachRope tRopeSwingAway = 0.75 if self.swingTrack: self.swingTrack.pause() self.swingTrack = None if self.av.isLocal(): ship.forceZoneLevel(0) swingTrack = Sequence(Func(self.av.lookAt, ship.getModelRoot()), Func(ship.boardingInit, self.av, fromShip), Func(ropeEndNode.wrtReparentTo, self.av), Parallel(self.av.actorInterval('swing_aboard'), ActorInterval(ropeActor, 'swing_aboard'), Sequence(Wait(tWaitToAttachRope - tRopeSwingDown), LerpPosInterval(ropeEndNode, tRopeSwingDown, Point3(1.0, 0, 3.0))), Sequence(Wait(tWaitToTranslateZ), LerpPosInterval(self.av, tTranslateZ, avPos + Point3(0.0, 0, 25.0))), Sequence(Wait(tWaitToAttachRope), Func(rope.reparentTo, leftHand), Func(ropeActor.show), LerpPosInterval(self.av, tRopeSwing / 2.0, midPos), Func(self.av.wrtReparentTo, ship.getModelRoot()), LerpPosInterval(self.av, tRopeSwing / 2.0, deckPos)), Sequence(Wait(tWaitToDetachRope), Func(rope.reparentTo, ropeEndNode), Func(ropeActor.detachNode), LerpPosInterval(ropeEndNode, tRopeSwingAway, Point3(0, 50, 50)))), Func(fromShip.boardingLeaveShip, self.av), Func(ship.boardingFinish, self.av, deckPos)) self.swingTrack = swingTrack self.swingTrack.start(ts) else: if self.swingTrack: self.swingTrack.pause() self.swingTrack = None ship.boardingInit(self.av, ship) self.av.setPos(deckPos) fromShip.boardingLeaveShip(self.av) if self._shipBoardingFinishCall: self._shipBoardingFinishCall.destroy() self._shipBoardingFinishCall = FrameDelayedCall('shipToShipBoardingFinish-%s-%s' % (ship.doId, self.av.doId), Functor(ship.boardingFinish, self.av, deckPos)) return