def move(self, dt = -1, profile = 0):
        if Mover.Profile and not profile:

            def func(doMove = self.move):
                for i in xrange(10000):
                    doMove(dt, profile=1)

            __builtin__.func = func
            PythonUtil.startProfile(cmd='func()', filename='profile', sorts=['cumulative'], callInfo=0)
            del __builtin__.func
            return
        if Mover.Pstats:
            self.pscCpp.start()
        CMover.processCImpulses(self, dt)
        if Mover.Pstats:
            self.pscCpp.stop()
            self.pscPy.start()
        for impulse in self.impulses.values():
            impulse._process(self.getDt())

        if Mover.Pstats:
            self.pscPy.stop()
            self.pscInt.start()
        CMover.integrate(self)
        if Mover.Pstats:
            self.pscInt.stop()
Example #2
0
def test_flywheel():
    f = PythonUtil.flywheel(['a','b','c','d'], countList=[11,20,3,4])
    obj2count = {}
    for obj in f:
        obj2count.setdefault(obj, 0)
        obj2count[obj] += 1
    assert obj2count['a'] == 11
    assert obj2count['b'] == 20
    assert obj2count['c'] == 3
    assert obj2count['d'] == 4

    f = PythonUtil.flywheel([1,2,3,4], countFunc=lambda x: x*2)
    obj2count = {}
    for obj in f:
        obj2count.setdefault(obj, 0)
        obj2count[obj] += 1
    assert obj2count[1] == 2
    assert obj2count[2] == 4
    assert obj2count[3] == 6
    assert obj2count[4] == 8

    f = PythonUtil.flywheel([1,2,3,4], countFunc=lambda x: x, scale = 3)
    obj2count = {}
    for obj in f:
        obj2count.setdefault(obj, 0)
        obj2count[obj] += 1
    assert obj2count[1] == 1 * 3
    assert obj2count[2] == 2 * 3
    assert obj2count[3] == 3 * 3
    assert obj2count[4] == 4 * 3
 def unlockStateChangeMsg(self):
     if self.stateChangeMsgLocks <= 0:
         print PythonUtil.lineTag() + ": someone unlocked too many times"
         return
     self.stateChangeMsgLocks -= 1
     if self.stateChangeMsgLocks == 0 and self.stateHasChanged:
         messenger.send(self.EmoteEnableStateChanged)
         self.stateHasChanged = 0
Example #4
0
    def __init__(self):
        self.config = getConfigShowbase()
        __builtins__["__dev__"] = self.config.GetBool("want-dev", 0)
        if self.config.GetBool("use-vfs", 1):
            vfs = VirtualFileSystem.getGlobalPtr()
        else:
            vfs = None
        self.wantTk = self.config.GetBool("want-tk", 0)
        self.AISleep = self.config.GetFloat("ai-sleep", 0.04)
        self.AIRunningNetYield = self.config.GetBool("ai-running-net-yield", 0)
        self.AIForceSleep = self.config.GetBool("ai-force-sleep", 0)
        self.eventMgr = eventMgr
        self.messenger = messenger
        self.bboard = bulletinBoard
        self.taskMgr = taskMgr
        Task.TaskManager.taskTimerVerbose = self.config.GetBool("task-timer-verbose", 0)
        Task.TaskManager.extendedExceptions = self.config.GetBool("extended-exceptions", 0)
        self.sfxManagerList = None
        self.musicManager = None
        self.jobMgr = jobMgr
        self.hidden = NodePath("hidden")
        self.graphicsEngine = GraphicsEngine()
        globalClock = ClockObject.getGlobalClock()
        self.trueClock = TrueClock.getGlobalPtr()
        globalClock.setRealTime(self.trueClock.getShortTime())
        globalClock.setAverageFrameRateInterval(30.0)
        globalClock.tick()
        taskMgr.globalClock = globalClock
        __builtins__["ostream"] = Notify.out()
        __builtins__["globalClock"] = globalClock
        __builtins__["vfs"] = vfs
        __builtins__["hidden"] = self.hidden
        PythonUtil.recordFunctorCreationStacks()
        self.wantStats = self.config.GetBool("want-pstats", 0)
        Task.TaskManager.pStatsTasks = self.config.GetBool("pstats-tasks", 0)
        taskMgr.resumeFunc = PStatClient.resumeAfterPause
        wantFakeTextures = self.config.GetBool("want-fake-textures-ai", 1)
        if wantFakeTextures:
            loadPrcFileData("aibase", "textures-header-only 1")
        self.wantPets = self.config.GetBool("want-pets", 1)
        if self.wantPets:
            from toontown.pets import PetConstants

            self.petMoodTimescale = self.config.GetFloat("pet-mood-timescale", 1.0)
            self.petMoodDriftPeriod = self.config.GetFloat("pet-mood-drift-period", PetConstants.MoodDriftPeriod)
            self.petThinkPeriod = self.config.GetFloat("pet-think-period", PetConstants.ThinkPeriod)
            self.petMovePeriod = self.config.GetFloat("pet-move-period", PetConstants.MovePeriod)
            self.petPosBroadcastPeriod = self.config.GetFloat(
                "pet-pos-broadcast-period", PetConstants.PosBroadcastPeriod
            )
        self.wantBingo = self.config.GetBool("want-fish-bingo", 1)
        self.wantKarts = self.config.GetBool("want-karts", 1)
        self.backups = BackupManager.BackupManager(
            filepath=self.config.GetString("backups-filepath", "dependencies/backups/"),
            extension=self.config.GetString("backups-extension", ".json"),
        )
        self.createStats()
        self.restart()
 def __startWalk(self):
     self.__stopWalk()
     if self.target:
         now = globalClock.getFrameTime()
         availableTime = self.arrivalTime - now
         if availableTime > 0:
             origH = self.getH()
             h = PythonUtil.fitDestAngle2Src(origH, self.targetH)
             delta = abs(h - origH)
             turnTime = delta / (self.velocity * 5)
             dist = Vec3(self.target - self.getPos()).length()
             walkTime = dist / self.velocity
             denom = turnTime + walkTime
             if denom != 0:
                 timeCompress = availableTime / denom
                 self.walkTrack = Sequence(
                     self.hprInterval(
                         turnTime *
                         timeCompress,
                         VBase3(
                             h,
                             0,
                             0)),
                     self.posInterval(
                         walkTime *
                         timeCompress,
                         self.target))
                 self.walkTrack.start()
         else:
             self.setPos(self.target)
             self.setH(self.targetH)
 def enterBoarding(self, nodePath, side):
     camera.wrtReparentTo(nodePath)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(nodePath), 90 * side)
     self.cameraBoardTrack = LerpPosHprInterval(
         camera, 1.5, Point3(14.4072 * side, 0, 3.8666999999999998), Point3(heading, -15, 0)
     )
     self.cameraBoardTrack.start()
 def resume(self, currentFloor = 0, topFloor = 0):
     if len(self.suits) == 0:
         self.d_setMembers()
         self.suitsKilledPerFloor.append(self.suitsKilledThisBattle)
         if topFloor == 0:
             self.b_setState('Reward')
         else:
             for (floorNum, cogsThisFloor) in PythonUtil.enumerate(self.suitsKilledPerFloor):
                 for toonId in self.activeToons:
                     toon = self.getToon(toonId)
                     if toon:
                         (recovered, notRecovered) = self.air.questManager.recoverItems(toon, cogsThisFloor, self.zoneId)
                         self.toonItems[toonId][0].extend(recovered)
                         self.toonItems[toonId][1].extend(notRecovered)
                         meritArray = self.air.promotionMgr.recoverMerits(toon, cogsThisFloor, self.zoneId, getCreditMultiplier(floorNum))
                         if toonId in self.helpfulToons:
                             self.toonMerits[toonId] = addListsByValue(self.toonMerits[toonId], meritArray)
                         else:
                             self.notify.debug('toon %d not helpful, skipping merits' % toonId)
                 
             
             self.d_setBattleExperience()
             self.b_setState('BuildingReward')
             
     elif self.resumeNeedUpdate == 1:
         self.d_setMembers()
         if len(self.resumeDeadSuits) > 0 or self.resumeLastActiveSuitDied == 0 or len(self.resumeDeadToons) > 0:
             self.needAdjust = 1
         
     
     self.setState('WaitForJoin')
     self.resumeNeedUpdate = 0
     self.resumeDeadToons = []
     self.resumeDeadSuits = []
     self.resumeLastActiveSuitDied = 0
    def getIntroTrack(self):
        self.__cameraTask(None)
        origCamParent = camera.getParent()
        origCamPos = camera.getPos()
        origCamHpr = camera.getHpr()
        iCamParent = base.localAvatar.attachNewNode('iCamParent')
        iCamParent.setH(180)
        camera.reparentTo(iCamParent)
        toonHeight = base.localAvatar.getHeight()
        camera.setPos(0, -15, toonHeight * 3)
        camera.lookAt(0, 0, toonHeight / 2.0)
        iCamParent.wrtReparentTo(origCamParent)
        waitDur = 5.0
        lerpDur = 4.5
        lerpTrack = Parallel()
        startHpr = iCamParent.getHpr()
        startHpr.setX(PythonUtil.reduceAngle(startHpr[0]))
        lerpTrack.append(LerpPosHprInterval(iCamParent, lerpDur, pos=Point3(0, 0, 0), hpr=Point3(0, 0, 0), startHpr=startHpr, name=self.uniqueName('introLerpParent')))
        lerpTrack.append(LerpPosHprInterval(camera, lerpDur, pos=origCamPos, hpr=origCamHpr, blendType='easeInOut', name=self.uniqueName('introLerpCameraPos')))
        base.localAvatar.startLookAround()

        def cleanup(origCamParent = origCamParent, origCamPos = origCamPos, origCamHpr = origCamHpr, iCamParent = iCamParent):
            camera.reparentTo(origCamParent)
            camera.setPos(origCamPos)
            camera.setHpr(origCamHpr)
            iCamParent.removeNode()
            del iCamParent
            base.localAvatar.stopLookAround()

        return Sequence(Wait(waitDur),
                        lerpTrack,
                        Func(cleanup))
 def generateToonMoveTrack(self):
     hpr = self.movieNode.getHpr(render)
     heading = PythonUtil.fitDestAngle2Src(self.av.getH(render), hpr[0])
     hpr.setX(heading)
     self.av.setAnimState('run', 1.0)
     toonTrack = Sequence(Wait(0.5), Parallel(LerpPosInterval(self.av, 1.0, Point3(self.movieNode.getX(self.avParent), self.movieNode.getY(self.avParent), 0)), LerpHprInterval(self.av, 1.0, hpr=hpr, other=render)), Func(self.av.loop, 'neutral'))
     return toonTrack
Example #10
0
 def serverTime(self, context, timestamp, timeOfDay):
     end = globalClock.getRealTime()
     aiTimeSkew = timeOfDay - self.cr.getServerTimeOfDay()
     if context != self.thisContext:
         self.notify.info('Ignoring TimeManager response for old context %d' % context)
         return
     elapsed = end - self.start
     self.attemptCount += 1
     self.notify.info('Clock sync roundtrip took %0.3f ms' % (elapsed * 1000.0))
     self.notify.info('AI time delta is %s from server delta' % PythonUtil.formatElapsedSeconds(aiTimeSkew))
     average = (self.start + end) / 2.0 - self.extraSkew
     uncertainty = (end - self.start) / 2.0 + abs(self.extraSkew)
     globalClockDelta.resynchronize(average, timestamp, uncertainty)
     self.notify.info('Local clock uncertainty +/- %.3f s' % globalClockDelta.getUncertainty())
     if globalClockDelta.getUncertainty() > self.maxUncertainty:
         if self.attemptCount < self.maxAttempts:
             self.notify.info('Uncertainty is too high, trying again.')
             self.start = globalClock.getRealTime()
             self.sendUpdate('requestServerTime', [self.thisContext])
             return
         self.notify.info('Giving up on uncertainty requirement.')
     if self.talkResult:
         base.localAvatar.setChatAbsolute('latency %0.0f ms, sync \xc2\xb1%0.0f ms' % (elapsed * 1000.0, globalClockDelta.getUncertainty() * 1000.0), CFSpeech | CFTimeout)
     self._gotFirstTimeSync = True
     messenger.send('gotTimeSync')
Example #11
0
    def serverTime(self, context, timestamp, timeOfDay):
        end = globalClock.getRealTime()
        aiTimeSkew = timeOfDay - self.cr.getServerTimeOfDay()
        if context != self.thisContext:
            self.notify.info('Ignoring TimeManager response for old context %d' % context)
            return
        elapsed = end - self.start
        self.attemptCount += 1
        self.notify.info('Clock sync roundtrip took %0.3f ms' % (elapsed * 1000.0))
        self.notify.info('AI time delta is %s from server delta' % PythonUtil.formatElapsedSeconds(aiTimeSkew))
        average = (self.start + end) / 2.0
        uncertainty = (end - self.start) / 2.0
        globalClockDelta.resynchronize(average, timestamp, uncertainty)
        self.notify.info('Local clock uncertainty +/- %.3f s' % globalClockDelta.getUncertainty())
        if globalClockDelta.getUncertainty() > self.maxUncertainty:
            if self.attemptCount < self.maxAttempts:
                self.notify.info('Uncertainty is too high, trying again.')
                self.start = globalClock.getRealTime()
                self.sendUpdate('requestServerTime', [self.thisContext])
                return
            self.notify.info('Giving up on uncertainty requirement.')
        self._gotFirstTimeSync = True
        messenger.send('gotTimeSync')

        toontownTimeManager = getattr(base.cr, 'toontownTimeManager', None)
        if toontownTimeManager:
            toontownTimeManager.updateLoginTimes(timeOfDay, int(time.time()), globalClock.getRealTime())
 def rollBossToPoint(self, fromPos, fromHpr, toPos, toHpr, reverse):
     vector = Vec3(toPos - fromPos)
     distance = vector.length()
     if toHpr == None:
         mat = Mat3(0, 0, 0, 0, 0, 0, 0, 0, 0)
         headsUp(mat, vector, CSDefault)
         scale = VBase3(0, 0, 0)
         shear = VBase3(0, 0, 0)
         toHpr = VBase3(0, 0, 0)
         decomposeMatrix(mat, scale, shear, toHpr, CSDefault)
     if fromHpr:
         newH = PythonUtil.fitDestAngle2Src(fromHpr[0], toHpr[0])
         toHpr = VBase3(newH, 0, 0)
     else:
         fromHpr = toHpr
     turnTime = abs(toHpr[0] - fromHpr[0]) / ToontownGlobals.BossCogTurnSpeed
     if toHpr[0] < fromHpr[0]:
         leftRate = ToontownGlobals.BossCogTreadSpeed
     else:
         leftRate = -ToontownGlobals.BossCogTreadSpeed
     if reverse:
         rollTreadRate = -ToontownGlobals.BossCogTreadSpeed
     else:
         rollTreadRate = ToontownGlobals.BossCogTreadSpeed
     rollTime = distance / ToontownGlobals.BossCogRollSpeed
     deltaPos = toPos - fromPos
     track = Sequence(Func(self.setPos, fromPos), Func(self.headsUp, toPos), Parallel(self.hprInterval(turnTime, toHpr, fromHpr), self.rollLeftTreads(turnTime, leftRate), self.rollRightTreads(turnTime, -leftRate)), Parallel(LerpFunctionInterval(self.rollBoss, duration=rollTime, extraArgs=[fromPos, deltaPos]), self.rollLeftTreads(rollTime, rollTreadRate), self.rollRightTreads(rollTime, rollTreadRate)))
     return (track, toHpr)
Example #13
0
 def debugStateCall(self, obj = None, fsmMemberName = 'fsm', secondaryFsm = 'secondaryFSM'):
     if self.__debug:
         state = ''
         doId = ''
         if obj is not None:
             fsm = obj.__dict__.get(fsmMemberName)
             if fsm is not None:
                 stateObj = fsm.getCurrentState()
                 if stateObj is not None:
                     state = stateObj.getName()
             fsm = obj.__dict__.get(secondaryFsm)
             if fsm is not None:
                 stateObj = fsm.getCurrentState()
                 if stateObj is not None:
                     state = '%s, %s' % (state, stateObj.getName())
             if hasattr(obj, 'doId'):
                 doId = ' doId:%s' % (obj.doId,)
         string = ':%s:%s [%-7s] id(%s)%s %s' % (self.getOnlyTime(),
          self.__name,
          state,
          id(obj),
          doId,
          PythonUtil.traceParentCall())
         self.__log(string)
         self.__print(string)
     return 1
 def setMagicWord(self, word, avId, zoneId):
     try:
         self.doMagicWord(word, avId, zoneId)
     except:
         response = PythonUtil.describeException(backTrace=1)
         self.notify.warning("Ignoring error in magic word:\n%s" % response)
         self.setMagicWordResponse(response)
 def generateToonMoveTrack(self, toon):
     node = NodePath("tempNode")
     displacement = Vec3(toon.getPos(render) - self.getPos(render))
     displacement.setZ(0)
     displacement.normalize()
     movieDistance = self.movieNode.getDistance(self.rotateNode)
     displacement *= movieDistance
     node.reparentTo(render)
     node.setPos(displacement + self.getPos(render))
     node.lookAt(self)
     heading = PythonUtil.fitDestAngle2Src(toon.getH(render), node.getH(render))
     hpr = toon.getHpr(render)
     hpr.setX(heading)
     finalX = node.getX(render)
     finalY = node.getY(render)
     finalZ = node.getZ(render)
     node.removeNode()
     toonTrack = Sequence(
         Parallel(
             ActorInterval(toon, "walk", loop=True, duration=1),
             Parallel(
                 LerpPosInterval(toon, 1.0, Point3(finalX, finalY, toon.getZ(render)), fluid=True, bakeInStart=False)
             ),
             LerpHprInterval(toon, 1.0, hpr=hpr),
         ),
         Func(toon.loop, "neutral"),
     )
     return toonTrack
 def timerTask(task):
     if task.time < task.timer:
         self.timerLabel['text'] = `int(PythonUtil.bound(task.timer - task.time, 0, time) + 1.0)`
         return Task.cont
     else:
         self.timerLabel['text'] = ''
         return Task.done
Example #17
0
 def cleanUpEffect(self):
     if self.wantTrail:
         self.motion_trail.endTrail()
         self.motion_trail2.endTrail()
     
     taskMgr.remove(PythonUtil.uniqueName('homingMissileTask'))
     EffectController.cleanUpEffect(self)
     self.checkInEffect(self)
 def enterBoarding(self, nodePath):
     base.camera.wrtReparentTo(nodePath)
     if self.reverseBoardingCamera:
         heading = PythonUtil.fitDestAngle2Src(base.camera.getH(nodePath), 180)
         self.cameraBoardTrack = LerpPosHprInterval(base.camera, 1.5, Point3(0, 18, 8), Point3(heading, -10, 0))
     else:
         self.cameraBoardTrack = LerpPosHprInterval(base.camera, 1.5, Point3(0, -16, 5.5), Point3(0, 0, 0))
     self.cameraBoardTrack.start()
 def setHeading(self, finalPos, initPos):
     diffX = finalPos.getX() - initPos.getX()
     angle = -90 * diffX / math.fabs(diffX)
     startAngle = self.suit.getH()
     startAngle = PythonUtil.fitSrcAngle2Dest(startAngle, angle)
     dur = 0.1 * abs(startAngle - angle) / 90
     self.suitTurnIval = LerpHprInterval(self.suit, dur, Point3(angle, 0, 0), startHpr=Point3(startAngle, 0, 0), name='SuitLerpHpr')
     self.suitTurnIval.start()
Example #20
0
 def transitionSunAngle(self, newHpr, duration = 10.0, fade = 0, sunDirLast = None):
     if sunDirLast != None:
         sunVecCurrent = sunDirLast
     else:
         sunVecCurrent = Vec3(self.sunWheelHeading.getH(), self.sunWheelPitch.getP(), self.sunWheelRoll.getR())
     aH = PythonUtil.fitSrcAngle2Dest(self.sunWheelHeading.getH(), newHpr[0])
     aP = PythonUtil.fitSrcAngle2Dest(self.sunWheelPitch.getP(), newHpr[1])
     aR = PythonUtil.fitSrcAngle2Dest(self.sunWheelRoll.getR(), newHpr[2])
     self.sunWheelHeading.setH(aH)
     self.sunWheelPitch.setP(aP)
     self.sunWheelRoll.setR(aR)
     sunVecFitted = Vec3(aH, aP, aR)
     if fade:
         ival = Sequence(LerpColorScaleInterval(self.sunTrack, duration * 0.29999999999999999, Vec4(1, 1, 1, 0)), LerpFunctionInterval(self.setSunTrueAngle, duration * 0.40000000000000002, fromData = sunVecFitted, toData = newHpr), LerpColorScaleInterval(self.sunTrack, duration * 0.29999999999999999, Vec4(1, 1, 1, 1)))
         return ival
     else:
         return LerpFunctionInterval(self.setSunTrueAngle, duration, fromData = sunVecFitted, toData = newHpr)
    def __hoverCallback(self, inside, hoodIndex, pos):
        alpha = PythonUtil.choice(inside, 0.25, 1.0)
        try:
            clouds = self.clouds[hoodIndex]
        except ValueError:
            clouds = []

        for cloud in clouds:
            cloud.setColor((1, 1, 1, alpha))
def getPetInfoFromSeed(seed, safezoneId):
    S = random.getstate()
    random.seed(seed)
    dnaArray = PetDNA.getRandomPetDNA(safezoneId)
    gender = PetDNA.getGender(dnaArray)
    nameString = TTLocalizer.getRandomPetName(gender=gender, seed=seed)
    traitSeed = PythonUtil.randUint31()
    random.setstate(S)
    return (nameString, dnaArray, traitSeed)
 def printTypeANameInfo(self, str):
     sourceFilename, lineNumber, functionName = PythonUtil.stackEntryInfo(1)
     self.notify.debug('========================================\n%s : %s :  %s' % (sourceFilename, lineNumber, functionName))
     self.notify.debug(str)
     curPos = self.typeANameButton.getPos()
     self.notify.debug('Pos = %.2f %.2f %.2f' % (curPos[0], curPos[1], curPos[2]))
     parent = self.typeANameButton.getParent()
     parentPos = parent.getPos()
     self.notify.debug('Parent = %s' % parent)
     self.notify.debug('ParentPos = %.2f %.2f %.2f' % (parentPos[0], parentPos[1], parentPos[2]))
Example #24
0
 def debugCall(self, debugString = ''):
     if self.__debug:
         message = str(debugString)
         string = ':%s:%s "%s" %s' % (self.getOnlyTime(),
          self.__name,
          message,
          PythonUtil.traceParentCall())
         self.__log(string)
         self.__print(string)
     return 1
 def moveCamera(self, seatIndex):
     self.oldCameraPos = camera.getPos()
     self.oldCameraHpr = camera.getHpr()
     camera.wrtReparentTo(self.picnicTable)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(), 90)
     if seatIndex < 3:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0, Point3(0, 0, 17), Point3(0, -90, 0))
     elif camera.getH() < 0:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0, Point3(0, 0, 17), Point3(-180, -90, 0))
     else:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0, Point3(0, 0, 17), Point3(180, -90, 0))
     self.cameraBoardTrack.start()
 def __chooseTarget(self, extraDelay = 0):
     direction = self.__chooseDirection()
     if direction == None:
         self.target = None
         self.arrivalTime = None
         self.b_destroyGoon()
         return
     heading, dist = direction
     dist = min(dist, self.legLength)
     targetH = PythonUtil.reduceAngle(self.getH() + heading)
     origH = self.getH()
     h = PythonUtil.fitDestAngle2Src(origH, targetH)
     delta = abs(h - origH)
     turnTime = delta / (self.velocity * 5)
     walkTime = dist / self.velocity
     self.setH(targetH)
     self.target = self.boss.scene.getRelativePoint(self, Point3(0, dist, 0))
     self.departureTime = globalClock.getFrameTime()
     self.arrivalTime = self.departureTime + turnTime + walkTime + extraDelay
     self.d_setTarget(self.target[0], self.target[1], h, globalClockDelta.localToNetworkTime(self.arrivalTime))
     return
 def takePhoneInterval(self, toon):
     torso = TextEncoder.upper(toon.style.torso[0])
     legs = TextEncoder.upper(toon.style.legs[0])
     phoneOutAnim = "%s%s_phoneOut" % (torso, legs)
     takePhoneAnim = "%s%s_takePhone" % (torso, legs)
     phoneNeutralAnim = "%s%s_phoneNeutral" % (torso, legs)
     self.toonScale = toon.getGeomNode().getChild(0).getScale(self.getParent())
     walkTime = 1.0
     scaleTime = 1.0
     origScale = self.getScale()
     origToonPos = toon.getPos()
     origToonHpr = toon.getHpr()
     self.origToonHpr = origToonHpr
     self.setScale(self.toonScale)
     toon.setPosHpr(self, 0, -4.5, 0, 0, 0, 0)
     destToonPos = toon.getPos()
     destToonHpr = toon.getHpr()
     destToonHpr = VBase3(
         PythonUtil.fitSrcAngle2Dest(destToonHpr[0], origToonHpr[0]), destToonHpr[1], destToonHpr[2]
     )
     self.setScale(origScale)
     toon.setPos(origToonPos)
     toon.setHpr(origToonHpr)
     walkToPhone = Sequence(
         Func(toon.stopSmooth),
         Func(toon.loop, "walk"),
         Func(base.playSfx, base.localAvatar.soundWalk),
         toon.posHprInterval(walkTime, destToonPos, destToonHpr, blendType="easeInOut"),
         Func(toon.loop, "neutral"),
         Func(toon.startSmooth),
     )
     interval = Sequence(
         Parallel(
             walkToPhone,
             ActorInterval(self.model, phoneOutAnim),
             self.scaleInterval(scaleTime, self.toonScale, blendType="easeInOut"),
         ),
         Parallel(
             ActorInterval(self.model, takePhoneAnim),
             ActorInterval(toon, "takePhone"),
             Sequence(
                 Wait(0.625),
                 Func(base.playSfx, self.pickUpSfx),
                 Func(self.__receiverToHand, toon),
                 Wait(1),
                 Func(base.playSfx, self.handleSfx),
             ),
         ),
         Func(self.model.loop, phoneNeutralAnim),
         Func(toon.loop, "phoneNeutral"),
         Func(base.playSfx, self.ringSfx),
     )
     return interval
 def getJumpHpr(av = av, node = self.golfKart):
     hpr = Point3(0, 0, 0)
     if hasattr(self, 'golfKart') and self.golfKart:
         hpr = self.golfKart.getHpr(av.getParent())
         if seatIndex < 2:
             hpr.setX(hpr.getX() + 180)
         else:
             hpr.setX(hpr.getX())
         angle = PythonUtil.fitDestAngle2Src(av.getH(), hpr.getX())
         hpr.setX(angle)
     else:
         self.notify.warning('getJumpHpr invalid golfKart, returning (0,0,0)')
     return hpr
 def getToonPullingLeverInterval(self, toon):
     walkTime = 0.2
     reach = ActorInterval(toon, 'leverReach', playRate=2.0)
     pull = ActorInterval(toon, 'leverPull', startFrame=6)
     origPos = toon.getPos(render)
     origHpr = toon.getHpr(render)
     newPos = self.lever.getPos(render)
     newHpr = self.lever.getHpr(render)
     origHpr.setX(PythonUtil.fitSrcAngle2Dest(origHpr[0], newHpr[0]))
     toon.setPosHpr(origPos, origHpr)
     reachAndPull = Sequence(ActorInterval(toon, 'walk', loop=True, duration=walkTime - reach.getDuration()), reach, pull)
     leverSeq = Sequence(Wait(walkTime + reach.getDuration() - 0.1), self.stick.hprInterval(0.55, Point3(0.0, 25.0, 0.0), Point3(0.0, 0.0, 0.0)), Wait(0.3), self.stick.hprInterval(0.4, Point3(0.0, 0.0, 0.0), Point3(0.0, 25.0, 0.0)))
     returnSeq = Sequence(Parallel(toon.posInterval(walkTime, newPos, origPos), toon.hprInterval(walkTime, newHpr, origHpr), leverSeq, reachAndPull))
     return returnSeq
    def process(self, invoker, target, incantation):
        self.currentInvoker = invoker
        self.currentTarget = target
        word, args = (incantation.split(' ', 1) + [''])[:2]

        try:
            return self.doWord(word, args)
        except MagicError as e:
            return (e.message, True)
        except Exception:
            return (PythonUtil.describeException(backTrace=1), True)
        finally:
            self.currentInvoker = None
            self.currentTarget = None
Example #31
0
from toontown.fishing.FishPhoto import DirectRegion
from toontown.shtiker.ShtikerPage import ShtikerPage
from toontown.toonbase import ToontownGlobals, TTLocalizer
from .FishPage import FishingTrophy
from toontown.golf import GolfGlobals

##########################################################################
# Python Import Modules
##########################################################################
if (__debug__):
    import pdb

##########################################################################
# Global Variables and Enumerations
##########################################################################
PageMode = PythonUtil.Enum("Records, Trophy")


class GolfPage(ShtikerPage):
    """
    Purpose: The GolfPage class provides the basic functionality for
    switching between the different pages like records, and trophies.

    Note: The GolfPage is a singleton object because only one instance of
    the page should exist at a time.
    """

    ######################################################################
    # Class variables
    ######################################################################
    #__metaclass__ = PythonUtil.Singleton
Example #32
0
class Pet(Avatar.Avatar):
    notify = DirectNotifyGlobal.directNotify.newCategory('Pet')
    SerialNum = 0
    Interactions = PythonUtil.Enum('SCRATCH, BEG, EAT, NEUTRAL')
    InteractAnims = {Interactions.SCRATCH: ('toPet', 'pet', 'fromPet'),
     Interactions.BEG: ('toBeg', 'beg', 'fromBeg'),
     Interactions.EAT: ('eat', 'swallow', 'neutral'),
     Interactions.NEUTRAL: 'neutral'}

    def __init__(self, forGui = 0):
        Avatar.Avatar.__init__(self)
        self.serialNum = Pet.SerialNum
        Pet.SerialNum += 1
        self.lockedDown = 0
        self.setPickable(1)
        self.setPlayerType(NametagGroup.CCNonPlayer)
        self.animFSM = ClassicFSM('petAnimFSM', [State('off', self.enterOff, self.exitOff),
         State('neutral', self.enterNeutral, self.exitNeutral),
         State('neutralHappy', self.enterNeutralHappy, self.exitNeutralHappy),
         State('neutralSad', self.enterNeutralSad, self.exitNeutralSad),
         State('run', self.enterRun, self.exitRun),
         State('swim', self.enterSwim, self.exitSwim),
         State('teleportIn', self.enterTeleportIn, self.exitTeleportOut),
         State('teleportOut', self.enterTeleportOut, self.exitTeleportOut),
         State('walk', self.enterWalk, self.exitWalk),
         State('walkHappy', self.enterWalkHappy, self.exitWalkHappy),
         State('walkSad', self.enterWalkSad, self.exitWalkSad)], 'off', 'off')
        self.animFSM.enterInitialState()
        self.forGui = forGui
        self.moodModel = None
        self.__blinkName = 'petblink-' + str(self.this)
        self.track = None
        self.soundBackflip = None
        self.soundRollover = None
        self.soundPlaydead = None
        self.soundTeleportIn = None
        self.soundTeleportOut = None
        self.teleportHole = None
        return

    def isPet(self):
        return True

    def stopAnimations(self):
        if self.track:
            self.track.pause()
        self.stopBlink()
        self.animFSM.request('off')

    def delete(self):
        self.stopAnimations()
        self.track = None
        self.soundBackflip = None
        self.soundRollover = None
        self.soundPlaydead = None
        self.soundTeleportIn = None
        self.soundTeleportOut = None
        if self.teleportHole:
            self.teleportHole.cleanup()
            self.teleportHole = None
        self.eyesOpenTexture = None
        self.eyesClosedTexture = None
        self.animFSM = None
        self.eyes = None
        self.rightPupil = None
        self.rightHighlight = None
        self.rightBrow = None
        self.leftPupil = None
        self.leftHighlight = None
        self.leftBrow = None
        self.color = None
        Avatar.Avatar.delete(self)
        return

    def getDNA(self):
        return self.style

    def setDNA(self, dna):
        if self.style:
            pass
        else:
            self.style = dna
            self.generatePet()
            self.generateMoods()
            self.initializeDropShadow()
            self.initializeNametag3d()
            self.dropShadow.setScale(0.75)

    def generatePet(self):
        self.loadModel('phase_4/models/char/TT_pets-mod')
        self.loadAnims({'toBeg': 'phase_5/models/char/TT_pets-intoBeg',
         'beg': 'phase_5/models/char/TT_pets-beg',
         'fromBeg': 'phase_5/models/char/TT_pets-begOut',
         'backflip': 'phase_5/models/char/TT_pets-backflip',
         'dance': 'phase_5/models/char/TT_pets-heal',
         'toDig': 'phase_5/models/char/TT_pets-intoDig',
         'dig': 'phase_5/models/char/TT_pets-dig',
         'fromDig': 'phase_5/models/char/TT_pets-digToNeutral',
         'disappear': 'phase_5/models/char/TT_pets-disappear',
         'eat': 'phase_5.5/models/char/TT_pets-eat',
         'jump': 'phase_5/models/char/TT_pets-jump',
         'neutral': 'phase_4/models/char/TT_pets-neutral',
         'neutralHappy': 'phase_4/models/char/TT_pets-neutralHappy',
         'neutralSad': 'phase_4/models/char/TT_pets-neutral_sad',
         'toPet': 'phase_5.5/models/char/TT_pets-petin',
         'pet': 'phase_5.5/models/char/TT_pets-petloop',
         'fromPet': 'phase_5.5/models/char/TT_pets-petend',
         'playDead': 'phase_5/models/char/TT_pets-playdead',
         'fromPlayDead': 'phase_5/models/char/TT_pets-deadend',
         'reappear': 'phase_5/models/char/TT_pets-reappear',
         'run': 'phase_5.5/models/char/TT_pets-run',
         'rollover': 'phase_5/models/char/TT_pets-rollover',
         'walkSad': 'phase_5.5/models/char/TT_pets-sadwalk',
         'speak': 'phase_5/models/char/TT_pets-speak',
         'swallow': 'phase_5.5/models/char/TT_pets-swallow',
         'swim': 'phase_5.5/models/char/TT_pets-swim',
         'toBall': 'phase_5.5/models/char/TT_pets-toBall',
         'walk': 'phase_5.5/models/char/TT_pets-walk',
         'walkHappy': 'phase_5.5/models/char/TT_pets-walkHappy'})
        self.setHeight(2)
        color = None
        colorIndex = self.style[5]
        color = AllPetColors[colorIndex]
        self.color = color
        bodyType = self.style[4]
        body = self.find('**/body')
        tex = loader.loadTexture(BodyTextures[BodyTypes[bodyType]])
        tex.setMinfilter(Texture.FTLinear)
        tex.setMagfilter(Texture.FTLinear)
        body.setTexture(tex, 1)
        body.setColor(color)
        leftFoot = self.find('**/leftFoot')
        rightFoot = self.find('**/rightFoot')
        texName = getFootTexture(bodyType)
        tex = loader.loadTexture(texName)
        tex.setMinfilter(Texture.FTLinear)
        tex.setMagfilter(Texture.FTLinear)
        leftFoot.setTexture(tex, 1)
        rightFoot.setTexture(tex, 1)
        leftFoot.setColor(color)
        rightFoot.setColor(color)
        for part in HeadParts + EarParts + NoseParts + TailParts:
            self.find('**/' + part).stash()

        colorScale = ColorScales[self.style[6]]
        partColor = self.amplifyColor(color, colorScale)
        headIndex = self.style[0]
        if headIndex != -1:
            head = self.find('**/@@' + HeadParts[headIndex])
            head.setColor(partColor)
            head.unstash()
        earsIndex = self.style[1]
        if earsIndex != -1:
            ears = self.find('**/@@' + EarParts[earsIndex])
            ears.setColor(partColor)
            texName = getEarTexture(bodyType, EarParts[earsIndex])
            if texName:
                tex = loader.loadTexture(texName)
                tex.setMinfilter(Texture.FTLinear)
                tex.setMagfilter(Texture.FTLinear)
                ears.setTexture(tex, 1)
            ears.unstash()
        noseIndex = self.style[2]
        if noseIndex != -1:
            nose = self.find('**/@@' + NoseParts[noseIndex])
            nose.setColor(partColor)
            nose.unstash()
        tailIndex = self.style[3]
        if tailIndex != -1:
            tail = self.find('**/@@' + TailParts[tailIndex])
            tail.setColor(partColor)
            texName = TailTextures[TailParts[tailIndex]]
            if texName:
                if BodyTypes[bodyType] == 'giraffe':
                    texName = GiraffeTail
                elif BodyTypes[bodyType] == 'leopard':
                    texName = LeopardTail
                tex = loader.loadTexture(texName)
                tex.setMinfilter(Texture.FTLinear)
                tex.setMagfilter(Texture.FTLinear)
                tail.setTexture(tex, 1)
            tail.unstash()
        if not self.forGui:
            self.drawInFront('eyeWhites', 'body', 1)
            self.drawInFront('rightPupil', 'eyeWhites', 2)
            self.drawInFront('leftPupil', 'eyeWhites', 2)
            self.drawInFront('rightHighlight', 'rightPupil', 3)
            self.drawInFront('leftHighlight', 'leftPupil', 3)
        else:
            self.drawInFront('eyeWhites', 'body', -2)
            self.drawInFront('rightPupil', 'eyeWhites', -2)
            self.drawInFront('leftPupil', 'eyeWhites', -2)
            self.find('**/rightPupil').adjustAllPriorities(1)
            self.find('**/leftPupil').adjustAllPriorities(1)
        eyes = self.style[7]
        eyeColor = PetEyeColors[eyes]
        self.eyes = self.find('**/eyeWhites')
        self.rightPupil = self.find('**/rightPupil')
        self.leftPupil = self.find('**/leftPupil')
        self.rightHighlight = self.find('**/rightHighlight')
        self.leftHighlight = self.find('**/leftHighlight')
        self.rightBrow = self.find('**/rightBrow')
        self.leftBrow = self.find('**/leftBrow')
        self.eyes.setColor(1, 1, 1, 1)
        self.rightPupil.setColor(eyeColor, 2)
        self.leftPupil.setColor(eyeColor, 2)
        self.rightHighlight.setColor(1, 1, 1, 1)
        self.leftHighlight.setColor(1, 1, 1, 1)
        self.rightBrow.setColor(0, 0, 0, 1)
        self.leftBrow.setColor(0, 0, 0, 1)
        self.eyes.setTwoSided(1, 1)
        self.rightPupil.setTwoSided(1, 1)
        self.leftPupil.setTwoSided(1, 1)
        self.rightHighlight.setTwoSided(1, 1)
        self.leftHighlight.setTwoSided(1, 1)
        self.rightBrow.setTwoSided(1, 1)
        self.leftBrow.setTwoSided(1, 1)
        if self.forGui:
            self.rightHighlight.hide()
            self.leftHighlight.hide()
        if self.style[8]:
            self.eyesOpenTexture = loader.loadTexture('phase_4/maps/BeanEyeBoys2.jpg', 'phase_4/maps/BeanEyeBoys2_a.rgb')
            self.eyesClosedTexture = loader.loadTexture('phase_4/maps/BeanEyeBoysBlink.jpg', 'phase_4/maps/BeanEyeBoysBlink_a.rgb')
        else:
            self.eyesOpenTexture = loader.loadTexture('phase_4/maps/BeanEyeGirlsNew.jpg', 'phase_4/maps/BeanEyeGirlsNew_a.rgb')
            self.eyesClosedTexture = loader.loadTexture('phase_4/maps/BeanEyeGirlsBlinkNew.jpg', 'phase_4/maps/BeanEyeGirlsBlinkNew_a.rgb')
        self.eyesOpenTexture.setMinfilter(Texture.FTLinear)
        self.eyesOpenTexture.setMagfilter(Texture.FTLinear)
        self.eyesClosedTexture.setMinfilter(Texture.FTLinear)
        self.eyesClosedTexture.setMagfilter(Texture.FTLinear)
        self.eyesOpen()
        return None

    def initializeBodyCollisions(self, collIdStr):
        Avatar.Avatar.initializeBodyCollisions(self, collIdStr)
        if not self.ghostMode:
            self.collNode.setCollideMask(self.collNode.getIntoCollideMask() | ToontownGlobals.PieBitmask)

    def amplifyColor(self, color, scale):
        color = color * scale
        for i in (0, 1, 2):
            if color[i] > 1.0:
                color.setCell(i, 1.0)

        return color

    def generateMoods(self):
        moodIcons = loader.loadModel('phase_4/models/char/petEmotes')
        self.moodIcons = self.attachNewNode('moodIcons')
        self.moodIcons.setScale(2.0)
        self.moodIcons.setZ(3.65)
        moods = moodIcons.findAllMatches('**/+GeomNode')
        for moodNum in xrange(0, moods.getNumPaths()):
            mood = moods.getPath(moodNum)
            mood.reparentTo(self.moodIcons)
            mood.setBillboardPointEye()
            mood.hide()

    def clearMood(self):
        if self.moodModel:
            self.moodModel.hide()
        self.moodModel = None
        return

    def showMood(self, mood):
        if hasattr(base.cr, 'newsManager') and base.cr.newsManager:
            holidayIds = base.cr.newsManager.getHolidayIdList()
            if (ToontownGlobals.APRIL_FOOLS_COSTUMES in holidayIds or ToontownGlobals.SILLYMETER_EXT_HOLIDAY in holidayIds) and not mood == 'confusion':
                self.speakMood(mood)
                return
            else:
                self.clearChat()
        else:
            self.clearChat()
        mood = Component2IconDict[mood]
        if mood is None:
            moodModel = None
        else:
            moodModel = self.moodIcons.find('**/*' + mood + '*')
            if moodModel.isEmpty():
                self.notify.warning('No such mood!: %s' % mood)
                return
        if self.moodModel == moodModel:
            return
        if self.moodModel:
            self.moodModel.hide()
        self.moodModel = moodModel
        if self.moodModel:
            self.moodModel.show()
        return

    def speakMood(self, mood):
        if self.moodModel:
            self.moodModel.hide()
        if base.config.GetBool('want-speech-bubble', 1):
            self.nametag.setChat(random.choice(TTLocalizer.SpokenMoods[mood]), CFSpeech)
        else:
            self.nametag.setChat(random.choice(TTLocalizer.SpokenMoods[mood]), CFThought)

    def getGenderString(self):
        if self.style:
            if self.style[8]:
                return TTLocalizer.GenderShopBoyButtonText
            else:
                return TTLocalizer.GenderShopGirlButtonText

    def getShadowJoint(self):
        if hasattr(self, 'shadowJoint'):
            return self.shadowJoint
        shadowJoint = self.find('**/attachShadow')
        if shadowJoint.isEmpty():
            self.shadowJoint = self
        else:
            self.shadowJoint = shadowJoint
        return self.shadowJoint

    def getNametagJoints(self):
        joints = []
        bundle = self.getPartBundle('modelRoot')
        joint = bundle.findChild('attachNametag')
        if joint:
            joints.append(joint)
        return joints

    def fitAndCenterHead(self, maxDim, forGui = 0):
        p1 = Point3()
        p2 = Point3()
        self.calcTightBounds(p1, p2)
        if forGui:
            h = 180
            t = p1[0]
            p1.setX(-p2[0])
            p2.setX(-t)
            self.getGeomNode().setDepthWrite(1)
            self.getGeomNode().setDepthTest(1)
        else:
            h = 0
        d = p2 - p1
        biggest = max(d[0], d[2])
        s = (maxDim + 0.0) / biggest
        mid = (p1 + d / 2.0) * s
        self.setPosHprScale(-mid[0], -mid[1] + 1, -mid[2], h, 0, 0, s, s, s)

    def makeRandomPet(self):
        dna = PetDNA.getRandomPetDNA()
        self.setDNA(dna)

    def enterOff(self):
        self.stop()

    def exitOff(self):
        pass

    def enterBall(self):
        self.setPlayRate(1, 'toBall')
        self.play('toBall')

    def exitBall(self):
        self.setPlayRate(-1, 'toBall')
        self.play('toBall')

    def enterBackflip(self):
        self.play('backflip')

    def exitBackflip(self):
        self.stop('backflip')

    def enterBeg(self):
        delay = self.getDuration('toBeg')
        self.track = Sequence(Func(self.play, 'toBeg'), Wait(delay), Func(self.loop, 'beg'))
        self.track.start()

    def exitBeg(self):
        self.track.pause()
        self.play('fromBeg')

    def enterEat(self):
        self.loop('eat')

    def exitEat(self):
        self.stop('swallow')

    def enterDance(self):
        self.loop('dance')

    def exitDance(self):
        self.stop('dance')

    def enterNeutral(self):
        anim = 'neutral'
        self.pose(anim, random.choice(range(0, self.getNumFrames(anim))))
        self.loop(anim, restart=0)

    def exitNeutral(self):
        self.stop('neutral')

    def enterNeutralHappy(self):
        anim = 'neutralHappy'
        self.pose(anim, random.choice(range(0, self.getNumFrames(anim))))
        self.loop(anim, restart=0)

    def exitNeutralHappy(self):
        self.stop('neutralHappy')

    def enterNeutralSad(self):
        anim = 'neutralSad'
        self.pose(anim, random.choice(range(0, self.getNumFrames(anim))))
        self.loop(anim, restart=0)

    def exitNeutralSad(self):
        self.stop('neutralSad')

    def enterRun(self):
        self.loop('run')

    def exitRun(self):
        self.stop('run')

    def enterSwim(self):
        self.loop('swim')

    def exitSwim(self):
        self.stop('swim')

    def getTeleportInTrack(self):
        if not self.teleportHole:
            self.teleportHole = Actor.Actor('phase_3.5/models/props/portal-mod', {'hole': 'phase_3.5/models/props/portal-chan'})
        track = Sequence(Wait(1.0), Parallel(self.getTeleportInSoundInterval(), Sequence(Func(self.showHole), ActorInterval(self.teleportHole, 'hole', startFrame=81, endFrame=71), ActorInterval(self, 'reappear'), ActorInterval(self.teleportHole, 'hole', startFrame=71, endFrame=81), Func(self.cleanupHole), Func(self.loop, 'neutral')), Sequence(Func(self.dropShadow.hide), Wait(1.0), Func(self.dropShadow.show))))
        return track

    def enterTeleportIn(self, timestamp):
        self.track = self.getTeleportInTrack()
        self.track.start(globalClockDelta.localElapsedTime(timestamp))

    def exitTeleportIn(self):
        self.track.pause()

    def getTeleportOutTrack(self):
        if not self.teleportHole:
            self.teleportHole = Actor.Actor('phase_3.5/models/props/portal-mod', {'hole': 'phase_3.5/models/props/portal-chan'})
        track = Sequence(Wait(1.0), Parallel(self.getTeleportOutSoundInterval(), Sequence(ActorInterval(self, 'toDig'), Parallel(ActorInterval(self, 'dig'), Func(self.showHole), ActorInterval(self.teleportHole, 'hole', startFrame=81, endFrame=71)), ActorInterval(self, 'disappear'), ActorInterval(self.teleportHole, 'hole', startFrame=71, endFrame=81), Func(self.cleanupHole)), Sequence(Wait(1.0), Func(self.dropShadow.hide))))
        return track

    def enterTeleportOut(self, timestamp):
        self.track = self.getTeleportOutTrack()
        self.track.start(globalClockDelta.localElapsedTime(timestamp))

    def exitTeleportOut(self):
        self.track.pause()

    def showHole(self):
        if self.teleportHole:
            self.teleportHole.setBin('shadow', 0)
            self.teleportHole.setDepthTest(0)
            self.teleportHole.setDepthWrite(0)
            self.teleportHole.reparentTo(self)
            self.teleportHole.setScale(0.75)
            self.teleportHole.setPos(0, -1, 0)

    def cleanupHole(self):
        if self.teleportHole:
            self.teleportHole.reparentTo(hidden)
            self.teleportHole.clearBin()
            self.teleportHole.clearDepthTest()
            self.teleportHole.clearDepthWrite()

    def getTeleportInSoundInterval(self):
        if not self.soundTeleportIn:
            self.soundTeleportIn = loader.loadSfx('phase_5/audio/sfx/teleport_reappear.ogg')
        return SoundInterval(self.soundTeleportIn)

    def getTeleportOutSoundInterval(self):
        if not self.soundTeleportOut:
            self.soundTeleportOut = loader.loadSfx('phase_5/audio/sfx/teleport_disappear.ogg')
        return SoundInterval(self.soundTeleportOut)

    def enterWalk(self):
        self.loop('walk')

    def exitWalk(self):
        self.stop('walk')

    def enterWalkHappy(self):
        self.loop('walkHappy')

    def exitWalkHappy(self):
        self.stop('walkHappy')

    def enterWalkSad(self):
        self.loop('walkSad')

    def exitWalkSad(self):
        self.stop('walkSad')

    def trackAnimToSpeed(self, forwardVel, rotVel, inWater = 0):
        action = 'neutral'
        if self.isInWater():
            action = 'swim'
        elif forwardVel > 0.1 or abs(rotVel) > 0.1:
            action = 'walk'
        self.setAnimWithMood(action)

    def setAnimWithMood(self, action):
        how = ''
        if self.isExcited():
            how = 'Happy'
        elif self.isSad():
            how = 'Sad'
        if action == 'swim':
            anim = action
        else:
            anim = '%s%s' % (action, how)
        if anim != self.animFSM.getCurrentState().getName():
            self.animFSM.request(anim)

    def isInWater(self):
        return 0

    def isExcited(self):
        return 0

    def isSad(self):
        return 0

    def startTrackAnimToSpeed(self):
        self.lastPos = self.getPos(render)
        self.lastH = self.getH(render)
        taskMgr.add(self._trackAnimTask, self.getTrackAnimTaskName())

    def stopTrackAnimToSpeed(self):
        taskMgr.remove(self.getTrackAnimTaskName())
        del self.lastPos
        del self.lastH

    def getTrackAnimTaskName(self):
        return 'trackPetAnim-%s' % self.serialNum

    def _trackAnimTask(self, task):
        curPos = self.getPos(render)
        curH = self.getH(render)
        self.trackAnimToSpeed(curPos - self.lastPos, curH - self.lastH)
        self.lastPos = curPos
        self.lastH = curH
        return Task.cont

    def __blinkOpen(self, task):
        self.eyesOpen()
        r = random.random()
        if r < 0.1:
            t = 0.2
        else:
            t = r * 4.0 + 1
        taskMgr.doMethodLater(t, self.__blinkClosed, self.__blinkName)
        return Task.done

    def __blinkClosed(self, task):
        self.eyesClose()
        taskMgr.doMethodLater(0.125, self.__blinkOpen, self.__blinkName)
        return Task.done

    def startBlink(self):
        taskMgr.remove(self.__blinkName)
        self.eyesOpen()
        t = random.random() * 4.0 + 1
        taskMgr.doMethodLater(t, self.__blinkClosed, self.__blinkName)

    def stopBlink(self):
        taskMgr.remove(self.__blinkName)
        self.eyesOpen()

    def eyesOpen(self):
        self.eyes.setColor(1, 1, 1, 1)
        self.eyes.setTexture(self.eyesOpenTexture, 1)
        self.rightPupil.show()
        self.leftPupil.show()
        if not self.forGui:
            self.rightHighlight.show()
            self.leftHighlight.show()

    def eyesClose(self):
        self.eyes.setColor(self.color)
        self.eyes.setTexture(self.eyesClosedTexture, 1)
        self.rightPupil.hide()
        self.leftPupil.hide()
        if not self.forGui:
            self.rightHighlight.hide()
            self.leftHighlight.hide()

    def lockPet(self):
        if not self.lockedDown:
            self.prevAnimState = self.animFSM.getCurrentState().getName()
            self.animFSM.request('neutral')
        self.lockedDown += 1

    def isLockedDown(self):
        return self.lockedDown != 0

    def unlockPet(self):
        self.lockedDown -= 1
        if not self.lockedDown:
            self.animFSM.request(self.prevAnimState)
            self.prevAnimState = None
        return

    def getInteractIval(self, interactId):
        anims = self.InteractAnims[interactId]
        if type(anims) == types.StringType:
            animIval = ActorInterval(self, anims)
        else:
            animIval = Sequence()
            for anim in anims:
                animIval.append(ActorInterval(self, anim))

        return animIval
 def calcTimeOfImpactOnPlane(startHeight, endHeight, startVel, accel):
     return PythonUtil.solveQuadratic(accel * .5, startVel,
                                      startHeight - endHeight)
Example #34
0
class CogdoFlyingObstacle(DirectObject):
    EnterEventName = 'CogdoFlyingObstacle_Enter'
    ExitEventName = 'CogdoFlyingObstacle_Exit'
    MotionTypes = PythonUtil.Enum(('BackForth', 'Loop'))

    def __init__(self, type, index, model, collSolid, motionPath = None, motionPattern = None, blendMotion = True, instanceModel = True):
        self.type = type
        self.index = index
        name = 'CogdoFlyingObstacle-%s-%i' % (self.type, self.index)
        if instanceModel:
            self.model = NodePath(name)
            model.instanceTo(self.model)
        else:
            self.model = model
            self.model.setName(name)
        self.currentT = 0.0
        self.direction = 1.0
        self.collNode = None
        self._initCollisions(name, collSolid)
        self.motionPath = motionPath
        self.motionPattern = motionPattern
        self.motionSequence = None
        if blendMotion:
            blendType = 'easeInOut'
        else:
            blendType = 'noBlend'
        if motionPath is not None:

            def moveObstacle(value):
                self.motionPath.goTo(self.model, value)

            self.motionPath = Mopath.Mopath(name='obstacle-%i' % self.index)
            self.motionPath.loadNodePath(motionPath)
            dur = self.motionPath.getMaxT()
            self.motionSequence = Sequence(name='%s.obstacle-%i-motionSequence' % (self.__class__.__name__, self.index))
            movePart1 = LerpFunc(moveObstacle, fromData=0.0, toData=self.motionPath.getMaxT(), duration=dur, blendType=blendType)
            self.motionSequence.append(movePart1)
            if self.motionPattern == CogdoFlyingObstacle.MotionTypes.BackForth:
                movePart2 = LerpFunc(moveObstacle, fromData=self.motionPath.getMaxT(), toData=0.0, duration=dur, blendType=blendType)
                self.motionSequence.append(movePart2)
        return

    def _initCollisions(self, name, collSolid):
        self.collName = name
        self.collSolid = collSolid
        self.collSolid.setTangible(0)
        self.collNode = CollisionNode(self.collName)
        self.collNode.setIntoCollideMask(ToontownGlobals.WallBitmask)
        self.collNode.addSolid(self.collSolid)
        self.collNodePath = self.model.attachNewNode(self.collNode)
        self.collNodePath.hide()
        self.accept('enter' + self.collName, self._handleEnterCollision)
        self.accept('exit' + self.collName, self._handleExitCollision)

    def disable(self):
        if self.collNode is not None:
            self.collNode.setIntoCollideMask(BitMask32(0))
        return

    def enable(self):
        if self.collNode is not None:
            self.collNode.setIntoCollideMask(ToontownGlobals.WallBitmask)
        return

    def startMoving(self, elapsedTime = 0.0):
        if self.motionSequence is not None:
            self.motionSequence.loop()
            self.motionSequence.setT(elapsedTime % self.motionSequence.getDuration())
        return

    def stopMoving(self):
        if self.motionSequence is not None:
            self.motionSequence.pause()
        return

    def destroy(self):
        self.ignoreAll()
        if self.motionSequence is not None:
            self.motionSequence.clearToInitial()
            del self.motionSequence
        del self.collSolid
        self.collNodePath.removeNode()
        del self.collNodePath
        del self.collNode
        self.model.removeNode()
        del self.model
        del self.motionPath
        return

    def update(self, dt):
        pass

    def hide(self):
        self.ignoreAll()
        self.model.hide()
        self.collNode.setIntoCollideMask(BitMask32(0))

    def _handleEnterCollision(self, collEntry):
        messenger.send(CogdoFlyingObstacle.EnterEventName, [self, collEntry])

    def _handleExitCollision(self, collEntry):
        messenger.send(CogdoFlyingObstacle.ExitEventName, [self, collEntry])
Example #35
0
    def enter(self):
        ShtikerPage.ShtikerPage.enter(self)
        try:
            zone = base.cr.playGame.getPlace().getZoneId()
        except:
            zone = 0

        if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ:
            self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ
        else:
            self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground
        if zone and ZoneUtil.isPlayground(zone) or self.book.safeMode:
            self.safeZoneButton.hide()
        else:
            self.safeZoneButton.show()
        if base.cr.playGame.getPlaceId(
        ) == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate(
        ) or self.book.safeMode:
            self.goHomeButton.hide()
        elif base.housingEnabled:
            self.goHomeButton.show()
        if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate:
            if base.cr.playGame.hood.loader.atMyEstate():
                self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtHome
                self.hoodLabel.show()
            else:
                avatar = base.cr.identifyAvatar(
                    base.cr.playGame.hood.loader.estateOwnerId)
                if avatar:
                    avName = avatar.getName()
                    self.hoodLabel[
                        'text'] = TTLocalizer.MapPageYouAreAtSomeonesHome % TTLocalizer.GetPossesive(
                            avName)
                    self.hoodLabel.show()
        elif zone:
            hoodName = ToontownGlobals.hoodNameMap.get(
                ZoneUtil.getCanonicalHoodId(zone), ('', ))[-1]
            streetName = ToontownGlobals.StreetNames.get(
                ZoneUtil.getCanonicalBranchZone(zone), ('', ))[-1]
            if hoodName:
                self.hoodLabel['text'] = TTLocalizer.MapPageYouAreHere % (
                    hoodName, streetName)
                self.hoodLabel.show()
            else:
                self.hoodLabel.hide()
        else:
            self.hoodLabel.hide()
        safeZonesVisited = base.localAvatar.hoodsVisited
        hoodsAvailable = base.cr.hoodMgr.getAvailableZones()
        hoodVisibleList = PythonUtil.intersection(safeZonesVisited,
                                                  hoodsAvailable)
        hoodTeleportList = base.localAvatar.getTeleportAccess()
        for hood in self.allZones:
            label = self.labels[self.allZones.index(hood)]
            clouds = self.clouds[self.allZones.index(hood)]
            if not self.book.safeMode and hood in hoodVisibleList:
                label['text_fg'] = (0, 0, 0, 1)
                label.show()
                for cloud in clouds:
                    cloud.hide()

                fullname = base.cr.hoodMgr.getFullnameFromId(hood)
                if hood in hoodTeleportList:
                    text = TTLocalizer.MapPageGoTo % fullname
                    label['text'] = ('', text, text)
                else:
                    label['text'] = ('', fullname, fullname)
            else:
                label['text_fg'] = (0, 0, 0, 0.65)
                label.show()
                for cloud in clouds:
                    cloud.show()
Example #36
0
        (255 / 255.0, 204 / 255.0, 204 / 255.0)
    ),
    (
        2008,
        (255 / 255.0, 153 / 255.0, 193 / 255.0),
        (240 / 255.0, 157 / 255.0, 192 / 255.0),
        (255 / 255.0, 215 / 255.0, 238 / 255.0)
    ),
    (
        2009,
        (170 / 255.0, 120 / 255.0, 20 / 255.0),
        (165 / 255.0, 120 / 255.0, 50 / 255.0),
        (210 / 255.0, 200 / 255.0, 180 / 255.0)
    )
)
PageMode = PythonUtil.Enum('Options, Codes, Extra, Extra2 ')


class OptionsPage(ShtikerPage.ShtikerPage):
    notify = directNotify.newCategory('OptionsPage')

    def __init__(self):
        ShtikerPage.ShtikerPage.__init__(self)

        self.optionsTabPage = None
        self.codesTabPage = None
        self.extraOptionsTabPage = None
        self.extra2OptionsTabPage = None
        self.title = None
        self.optionsTab = None
        self.codesTab = None
Example #37
0
    def __init__(self):
        # Get the dconfig object
        self.config = getConfigShowbase()
        __builtins__["__dev__"] = self.config.GetBool('want-dev', 0)
        if self.config.GetBool('want-variable-dump', 0):
            ExceptionVarDump.install()

        logStackDump = (self.config.GetBool('log-stack-dump', (not __dev__))
                        or self.config.GetBool('ai-log-stack-dump',
                                               (not __dev__)))
        uploadStackDump = self.config.GetBool('upload-stack-dump', 0)
        if logStackDump or uploadStackDump:
            ExceptionVarDump.install(logStackDump, uploadStackDump)

        if self.config.GetBool('use-vfs', 1):
            vfs = VirtualFileSystem.getGlobalPtr()
        else:
            vfs = None

        # Store dconfig variables
        self.wantTk = self.config.GetBool('want-tk', 0)

        # How long should the AI sleep between frames to keep CPU usage down
        self.AISleep = self.config.GetFloat('ai-sleep', 0.04)
        self.AIRunningNetYield = self.config.GetBool('ai-running-net-yield', 0)
        self.AIForceSleep = self.config.GetBool('ai-force-sleep', 0)
        self.eventMgr = eventMgr
        self.messenger = messenger
        self.bboard = bulletinBoard

        self.taskMgr = taskMgr
        Task.TaskManager.taskTimerVerbose = self.config.GetBool(
            'task-timer-verbose', 0)
        Task.TaskManager.extendedExceptions = self.config.GetBool(
            'extended-exceptions', 0)

        self.sfxManagerList = None
        self.musicManager = None
        self.jobMgr = jobMgr

        self.hidden = NodePath('hidden')
        # each zone has its own render
        #self.render = NodePath('render')

        # This graphics engine is not intended to ever draw anything, it
        # advanced clocks and clears pstats state, just like on the client.
        self.graphicsEngine = GraphicsEngine()

        # Get a pointer to Panda's global ClockObject, used for
        # synchronizing events between Python and C.
        # object is exactly in sync with the TrueClock.
        globalClock = ClockObject.getGlobalClock()

        # Since we have already started up a TaskManager, and probably
        # a number of tasks; and since the TaskManager had to use the
        # TrueClock to tell time until this moment, make sure the
        # globalClock
        self.trueClock = TrueClock.getGlobalPtr()
        globalClock.setRealTime(self.trueClock.getShortTime())
        # set the amount of time used to compute average frame rate
        globalClock.setAverageFrameRateInterval(30.)
        globalClock.tick()

        # Now we can make the TaskManager start using the new globalClock.
        taskMgr.globalClock = globalClock

        __builtins__["ostream"] = Notify.out()
        __builtins__["globalClock"] = globalClock
        __builtins__["vfs"] = vfs
        __builtins__["hidden"] = self.hidden
        #__builtins__["render"] = self.render

        AIBase.notify.info('__dev__ == %s' % __dev__)

        # set up recording of Functor creation stacks in __dev__
        PythonUtil.recordFunctorCreationStacks()

        # This is temporary:
        __builtins__["wantTestObject"] = self.config.GetBool(
            'want-test-object', 0)

        self.wantStats = self.config.GetBool('want-pstats', 0)
        Task.TaskManager.pStatsTasks = self.config.GetBool('pstats-tasks', 0)
        # Set up the TaskManager to reset the PStats clock back
        # whenever we resume from a pause.  This callback function is
        # a little hacky, but we can't call it directly from within
        # the TaskManager because he doesn't know about PStats (and
        # has to run before libpanda is even loaded).
        taskMgr.resumeFunc = PStatClient.resumeAfterPause

        # in production, we want to use fake textures.
        defaultValue = 1
        if __dev__:
            defaultValue = 0
        wantFakeTextures = self.config.GetBool('want-fake-textures-ai',
                                               defaultValue)

        if wantFakeTextures:
            # Setting textures-header-only is a little better than
            # using fake-texture-image.  The textures' headers are
            # read to check their number of channels, etc., and then a
            # 1x1 blue texture is created.  It loads quickly, consumes
            # very little memory, and doesn't require a bogus texture
            # to be loaded repeatedly.
            loadPrcFileData('aibase', 'textures-header-only 1')

        # If there's a Toontown-specific AIBase, that's where the following
        # config flags should be.
        # I tried putting this logic in ToontownAIRepository, but wantPets is
        # needed during the import of ToontownAIRepository.py
        self.wantPets = self.config.GetBool('want-pets', 1)
        if self.wantPets:
            if game.name == 'toontown':
                from toontown.pets import PetConstants
                self.petMoodTimescale = self.config.GetFloat(
                    'pet-mood-timescale', 1.)
                self.petMoodDriftPeriod = self.config.GetFloat(
                    'pet-mood-drift-period', PetConstants.MoodDriftPeriod)
                self.petThinkPeriod = self.config.GetFloat(
                    'pet-think-period', PetConstants.ThinkPeriod)
                self.petMovePeriod = self.config.GetFloat(
                    'pet-move-period', PetConstants.MovePeriod)
                self.petPosBroadcastPeriod = self.config.GetFloat(
                    'pet-pos-broadcast-period',
                    PetConstants.PosBroadcastPeriod)

        self.wantBingo = self.config.GetBool('want-fish-bingo', 1)
        self.wantKarts = self.config.GetBool('wantKarts', 1)

        self.newDBRequestGen = self.config.GetBool(
            'new-database-request-generate', 1)

        self.waitShardDelete = self.config.GetBool('wait-shard-delete', 1)
        self.blinkTrolley = self.config.GetBool('blink-trolley', 0)
        self.fakeDistrictPopulations = self.config.GetBool(
            'fake-district-populations', 0)

        self.wantSwitchboard = self.config.GetBool('want-switchboard', 0)
        self.wantSwitchboardHacks = self.config.GetBool(
            'want-switchboard-hacks', 0)
        self.GEMdemoWhisperRecipientDoid = self.config.GetBool(
            'gem-demo-whisper-recipient-doid', 0)
        self.sqlAvailable = self.config.GetBool('sql-available', 1)

        self.createStats()

        self.restart()
Example #38
0
 def setExceptionInfo(self):
     info = PythonUtil.describeException()
     self.notify.info('Client exception: %s' % info)
     self.sendUpdate('setExceptionInfo', [info])
     self.cr.flush()
Example #39
0
 def noticeLocalAvatar(self):
     if self.isInInvasion():
         return
     if not self.shouldNotice(
     ) or self.isMovingDontNotice or self.noticeFlag:
         return
     if self.getDistance(localAvatar) > self.getEffectiveNoticeDistance(
     ) + 2.0 or not self.stateOkayForNotice():
         if self.gameFSM:
             pass
         self.endNotice()
         return
     heading = self.getHpr()
     self.headsUp(localAvatar)
     if self.needNoticeGroundTracking:
         self.trackTerrain()
     noticeHeading = self.getHpr()
     self.setHpr(heading)
     angle = PythonUtil.fitDestAngle2Src(heading[0], noticeHeading[0])
     if self.needNoticeGroundTracking:
         newHpr = Vec3(angle, noticeHeading[1], noticeHeading[2])
     else:
         newHpr = Vec3(angle, heading[1], heading[2])
     noticeDif = abs(angle - heading[0])
     turnAnim = self.getTurnAnim(noticeDif)
     if self.noticeIval:
         self.noticeFlag = 1
         self.noticeIval.finish()
         self.noticeFlag = 0
         self.noticeIval = None
     self.noticeIval = Sequence(Wait(self.noticeSpeed),
                                Func(self.noticeLocalAvatar))
     self.noticeIval.start()
     if not self.isFlying:
         self.startFlying()
     return
     if self.getDistance(localAvatar) > self.closeNoticeDistance + 2.0:
         if self.hasTurnedToNotice:
             self.endNotice()
         else:
             self.noticeIval = Sequence(Wait(self.noticeSpeed),
                                        Func(self.noticeLocalAvatar))
             self.noticeIval.start()
     elif abs(noticeDif) > 15.0 and self.shouldTurnToNotice:
         if turnAnim:
             self.noticeIval = Sequence(
                 Func(self.startShuffle, turnAnim),
                 LerpHprInterval(self,
                                 duration=self.noticeSpeed,
                                 hpr=newHpr), Func(self.midShuffle),
                 Wait(self.noticeSpeed), Func(self.endShuffle),
                 Func(self.noticeLocalAvatar))
             self.noticeIval.start()
         else:
             self.noticeIval = Sequence(
                 LerpHprInterval(self,
                                 duration=self.noticeSpeed,
                                 hpr=newHpr), Wait(self.noticeSpeed),
                 Func(self.noticeLocalAvatar))
             self.noticeIval.start()
         self.doNoticeFX()
         self.hasTurnedToNotice = 1
     elif abs(noticeDif) < 45.0:
         duration = self.presetNoticeAnimation()
         if duration == None or self.doneThreat == 1:
             duration = self.noticeSpeed
         self.noticeIval = Sequence(Func(self.startNoticeLoop),
                                    Func(self.playNoticeAnim),
                                    Wait(duration),
                                    Func(self.endNoticeLoop),
                                    Func(self.noticeLocalAvatar))
         self.noticeIval.start()
         self.doNoticeFX()
     return
Example #40
0
# Embedded file name: toontown.cogdominium.CogdoMazeGameGlobals
from direct.showbase import PythonUtil
from pandac.PandaModules import VBase4
GameActions = PythonUtil.Enum(('EnterDoor', 'RevealDoor', 'OpenDoor', 'Countdown', 'TimeAlert'))
SecondsUntilTimeout = 240.0
SecondsUntilGameEnds = 60.0
SecondsForTimeAlert = 60.0
MaxPlayers = 4
IntroDurationSeconds = 24.0
FinishDurationSeconds = 5.0
PlayerCollisionName = 'CogdoMazePlayer_Collision'
LocalPlayerCollisionName = 'CogdoMazeLocalPlayer_Collision'
PlayerCollisionRadius = 1.0
HitCooldownTime = 2.0
HintTimeout = 6.0
NumQuadrants = (3, 3)
FrameWallThickness = 1
QuadrantUnitGap = 3
TotalBarriers = 12
NumBarriers = 3
MazeBarriers = ([(7, 34),
  (8, 34),
  (9, 34),
  (10, 34)],
 [(24, 34),
  (25, 34),
  (26, 34),
  (27, 34)],
 [(41, 34),
  (42, 34),
  (43, 34),
Example #41
0
 def enterBoarding(self, nodePath, side):
     camera.wrtReparentTo(nodePath)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(nodePath), 90 * side)
     self.cameraBoardTrack = LerpPosHprInterval(camera, 1.5, Point3(14.4072 * side, 0, 3.8667), Point3(heading, -15, 0))
     self.cameraBoardTrack.start()
     return None
from direct.showbase import PythonUtil
from pandac.PandaModules import VBase4, Vec3, Point3
from CogdoUtil import VariableContainer, DevVariableContainer
AI = VariableContainer()
AI.GameActions = PythonUtil.Enum(
    ('LandOnWinPlatform', 'WinStateFinished', 'GotoWinState', 'HitWhirlwind',
     'HitLegalEagle', 'HitMinion', 'DebuffInvul', 'RequestEnterEagleInterest',
     'RequestExitEagleInterest', 'RanOutOfTimePenalty', 'Died', 'Spawn',
     'SetBlades', 'BladeLost'))
AI.BroadcastPeriod = 0.3
AI.SafezoneId2DeathDamage = {
    2000: 1,
    1000: 2,
    5000: 4,
    4000: 8,
    3000: 12,
    9000: 16,
    7000: 20
}
AI.SafezoneId2WhirlwindDamage = {
    2000: 1,
    1000: 2,
    5000: 4,
    4000: 8,
    3000: 12,
    9000: 16,
    7000: 20
}
AI.SafezoneId2LegalEagleDamage = {
    2000: 2,
    1000: 4,
from pandac.PandaModules import *
from direct.interval.IntervalGlobal import *
from direct.showbase import PythonUtil
from toontown.battle.BattleProps import globalPropPool
from direct.directnotify import DirectNotifyGlobal
SFX = PythonUtil.Enum('poof, magic')
SFXPATHS = {
    SFX.poof: 'phase_4/audio/sfx/firework_distance_02.mp3',
    SFX.magic: 'phase_4/audio/sfx/SZ_DD_treasure.mp3'
}


class DustCloud(NodePath):
    dustCloudCount = 0
    sounds = {}
    notify = DirectNotifyGlobal.directNotify.newCategory('DustCloud')

    def __init__(self, parent=hidden, fBillboard=1, wantSound=0):
        NodePath.__init__(self)
        self.assign(globalPropPool.getProp('suit_explosion_dust'))
        if fBillboard:
            self.setBillboardAxis()
        self.reparentTo(parent)
        self.seqNode = self.find('**/+SequenceNode').node()
        self.seqNode.setFrameRate(0)
        self.wantSound = wantSound
        if self.wantSound and not DustCloud.sounds:
            DustCloud.sounds[SFX.poof] = loader.loadSfx(SFXPATHS[SFX.poof])
        self.track = None
        self.trackId = DustCloud.dustCloudCount
        DustCloud.dustCloudCount += 1
Example #44
0
                                     (255 / 255.0, 204 / 255.0, 204 / 255.0)),
                   (2013, (130 / 255.0, 0 / 255.0,
                           26 / 255.0), (179 / 255.0, 0 / 255.0, 50 / 255.0),
                    (255 / 255.0, 204 / 255.0,
                     204 / 255.0)), (2016, (176 / 255.0, 35 / 255.0,
                                            0 / 255.0),
                                     (240 / 255.0, 48 / 255.0, 0 / 255.0),
                                     (255 / 255.0, 204 / 255.0, 204 / 255.0)),
                   (2008, (255 / 255.0, 153 / 255.0, 193 / 255.0),
                    (240 / 255.0, 157 / 255.0, 192 / 255.0),
                    (255 / 255.0, 215 / 255.0,
                     238 / 255.0)), (2009, (170 / 255.0, 120 / 255.0,
                                            20 / 255.0),
                                     (165 / 255.0, 120 / 255.0, 50 / 255.0),
                                     (210 / 255.0, 200 / 255.0, 180 / 255.0)))
PageMode = PythonUtil.Enum('Options, Codes')


class OptionsPage(ShtikerPage.ShtikerPage):
    notify = DirectNotifyGlobal.directNotify.newCategory('OptionsPage')

    def __init__(self):
        ShtikerPage.ShtikerPage.__init__(self)

    def load(self):
        ShtikerPage.ShtikerPage.load(self)
        self.optionsTabPage = OptionsTabPage(self)
        self.optionsTabPage.hide()
        self.codesTabPage = CodesTabPage(self)
        self.codesTabPage.hide()
        titleHeight = 0.61
Example #45
0
PartyEditorGridSize = (18, 15)
PartyEditorGridSquareSize = (
    (PartyEditorGridBounds[1][0] - PartyEditorGridBounds[0][0]) /
    float(PartyEditorGridSize[0]),
    (PartyEditorGridBounds[0][1] - PartyEditorGridBounds[1][1]) /
    float(PartyEditorGridSize[1]),
)
PartyEditorGridRotateThreshold = 0.08

TrashCanPosition = (-0.24, 0.0, -0.65)
TrashCanScale = 0.7
PartyEditorTrashBounds = ((-0.16, -0.38), (-0.05, -0.56))

InviteStatus = PythonUtil.Enum((
    "NotRead",
    "ReadButNotReplied",
    "Accepted",
    "Rejected",
), )

InviteTheme = PythonUtil.Enum((
    "Birthday",
    "GenericMale",
    "GenericFemale",
), )

PartyStatus = PythonUtil.Enum((
    "Pending",  # party's start time is still in the future
    "Cancelled",  # user cancelled this party
    "Finished",  # party started and then finished
    "CanStart",  # party can start, time is good, go button hasn't been hit yet
    "Started",  # Party has started
Example #46
0
 def getJumpHpr(av=av, node=destNode):
     hpr = node.getHpr(av.getParent())
     hpr.setX(hpr.getX() + 180)
     angle = PythonUtil.fitDestAngle2Src(av.getH(), hpr.getX())
     hpr.setX(angle)
     return hpr
Example #47
0
def getSpecies(zoneId):
    body = PythonUtil.weightedRand(PetRarities['body'][zoneId])
    return BodyTypes.index(body)
Example #48
0
Notify.ptr().setOstreamPtr(nout, 0)
nout.addFile(Filename(logfile))
nout.addStandardOutput()
nout.addSystemDebug()

print("-"*30, "creating toontown district %s" % districtNumber, "-"*30)

simbase.air = ToontownAIRepository.ToontownAIRepository(
        simbase.mdip,
        simbase.mdport,
        simbase.esip,
        simbase.esport,
        None,
        districtNumber,
        districtName,
        districtType,
        serverId,
        districtMinChannel,
        districtMaxChannel)

# How we let the world know we are not running a service
simbase.aiService = 0

try:
    simbase.air.fsm.request("districtReset")
    run()
except:
    info = PythonUtil.describeException()
    simbase.air.writeServerEvent('ai-exception', districtNumber, info)
    raise
from direct.directnotify import DirectNotifyGlobal
from direct.showbase import PythonUtil
from toontown.toonbase import TTLocalizer
from pandac.PandaModules import *
from KartShopGlobals import *
import types
if (__debug__):
    import pdb
import copy

KartDNA = PythonUtil.Enum(
    'bodyType, bodyColor, accColor,                             ebType, spType, fwwType,                             bwwType, rimsType, decalType'
)
InvalidEntry = -1
KartInfo = PythonUtil.Enum(
    'name, model, cost, viewDist, decalId, LODmodel1, LODmodel2')
AccInfo = PythonUtil.Enum('name, model, cost, texCard, attach')
kNames = TTLocalizer.KartDNA_KartNames
KartDict = {
    0: (kNames[0], 'phase_6/models/karting/Kart1_Final', 100, 7.0, 'kart1',
        'phase_6/models/karting/Kart1_LOD_Final',
        'phase_6/models/karting/Kart1_LOD_Final', (Point3(1.5, 8.0, -0.5),
                                                   Point3(1.5, 0.0, 2.0))),
    1: (kNames[1], 'phase_6/models/karting/Kart2_Final', 7500, 7.0, 'kart2',
        'phase_6/models/karting/Kart2_LOD2_Final',
        'phase_6/models/karting/Kart2_LOD3_Final', (Point3(0.25, 7, -2),
                                                    Point3(1.25, -3, 0))),
    2: (kNames[2], 'phase_6/models/karting/Kart3_Final', 2500, 8.5, 'kart3',
        'phase_6/models/karting/Kart3_Final_LOD2',
        'phase_6/models/karting/Kart3_Final_LOD3', (Point3(1.25, 4.0, 1.0),
                                                    Point3(1.25, -3.0, 2.5)))
Example #50
0
 def __init__(self):
     self.config = getConfigShowbase()
     __builtins__['__dev__'] = self.config.GetBool('want-dev', 0)
     logStackDump = (self.config.GetBool('log-stack-dump', (not __dev__))
                     or self.config.GetBool('ai-log-stack-dump',
                                            (not __dev__)))
     uploadStackDump = self.config.GetBool('upload-stack-dump', 0)
     if logStackDump or uploadStackDump:
         ExceptionVarDump.install(logStackDump, uploadStackDump)
     if self.config.GetBool('use-vfs', 1):
         vfs = VirtualFileSystem.getGlobalPtr()
     else:
         vfs = None
     self.wantTk = self.config.GetBool('want-tk', 0)
     self.AISleep = self.config.GetFloat('ai-sleep', 0.04)
     self.AIRunningNetYield = self.config.GetBool('ai-running-net-yield', 0)
     self.AIForceSleep = self.config.GetBool('ai-force-sleep', 0)
     self.eventMgr = eventMgr
     self.messenger = messenger
     self.bboard = bulletinBoard
     self.taskMgr = taskMgr
     Task.TaskManager.taskTimerVerbose = self.config.GetBool(
         'task-timer-verbose', 0)
     Task.TaskManager.extendedExceptions = self.config.GetBool(
         'extended-exceptions', 0)
     self.sfxManagerList = None
     self.musicManager = None
     self.jobMgr = jobMgr
     self.hidden = NodePath('hidden')
     self.graphicsEngine = GraphicsEngine()
     globalClock = ClockObject.getGlobalClock()
     self.trueClock = TrueClock.getGlobalPtr()
     globalClock.setRealTime(self.trueClock.getShortTime())
     globalClock.setAverageFrameRateInterval(30.0)
     globalClock.tick()
     taskMgr.globalClock = globalClock
     __builtins__['ostream'] = Notify.out()
     __builtins__['globalClock'] = globalClock
     __builtins__['vfs'] = vfs
     __builtins__['hidden'] = self.hidden
     AIBase.notify.info('__dev__ == %s' % __dev__)
     PythonUtil.recordFunctorCreationStacks()
     __builtins__['wantTestObject'] = self.config.GetBool(
         'want-test-object', 0)
     self.wantStats = self.config.GetBool('want-pstats', 0)
     Task.TaskManager.pStatsTasks = self.config.GetBool('pstats-tasks', 0)
     taskMgr.resumeFunc = PStatClient.resumeAfterPause
     defaultValue = 1
     if __dev__:
         defaultValue = 0
     wantFakeTextures = self.config.GetBool('want-fake-textures-ai',
                                            defaultValue)
     if wantFakeTextures:
         loadPrcFileData('aibase', 'textures-header-only 1')
     self.wantPets = self.config.GetBool('want-pets', 1)
     if self.wantPets:
         if game.name == 'toontown':
             from toontown.pets import PetConstants
             self.petMoodTimescale = self.config.GetFloat(
                 'pet-mood-timescale', 1.0)
             self.petMoodDriftPeriod = self.config.GetFloat(
                 'pet-mood-drift-period', PetConstants.MoodDriftPeriod)
             self.petThinkPeriod = self.config.GetFloat(
                 'pet-think-period', PetConstants.ThinkPeriod)
             self.petMovePeriod = self.config.GetFloat(
                 'pet-move-period', PetConstants.MovePeriod)
             self.petPosBroadcastPeriod = self.config.GetFloat(
                 'pet-pos-broadcast-period',
                 PetConstants.PosBroadcastPeriod)
     self.wantBingo = self.config.GetBool('want-fish-bingo', 1)
     self.wantKarts = self.config.GetBool('wantKarts', 1)
     self.newDBRequestGen = self.config.GetBool(
         'new-database-request-generate', 1)
     self.waitShardDelete = self.config.GetBool('wait-shard-delete', 1)
     self.blinkTrolley = self.config.GetBool('blink-trolley', 0)
     self.fakeDistrictPopulations = self.config.GetBool(
         'fake-district-populations', 0)
     self.wantSwitchboard = self.config.GetBool('want-switchboard', 0)
     self.wantSwitchboardHacks = self.config.GetBool(
         'want-switchboard-hacks', 0)
     self.GEMdemoWhisperRecipientDoid = self.config.GetBool(
         'gem-demo-whisper-recipient-doid', 0)
     self.sqlAvailable = self.config.GetBool('sql-available', 1)
     self.createStats()
     self.restart()
     return
Example #51
0
            cursor.execute("SELECT LAST_INSERT_ID()")
            guildId = cursor.fetchall()[0][0]
            self.addMember(guildId, avId, 3)
            self.db.commit()
        except _mysql_exceptions.OperationalError, e:
            if isRetry:
                raise e
            else:
                self.reconnect()
                self.createGuild(avId, True)
        except _mysql_exceptions.IntegrityError, e:
            self.notify.warning(
                "IntegrityError creating new guild for avId %s: %s.  Rolling back."
                % (avId, e))
            from direct.showbase import PythonUtil
            self.notify.warning(str(PythonUtil.StackTrace()))
            self.db.rollback()

    def memberCount(self, guildId):
        if not self.sqlAvailable:
            print "Guild DB Unavailable"
            return 99999

        try:
            cursor = self.db.cursor()
            cursor.execute("SELECT * FROM `member` where `gid` = %s", guildId)
            stuff = cursor.fetchall()
            return len(stuff)
        except _mysql_exceptions.OperationalError, e:
            self.reconnect()
            return self.memberCount(guildId)
Example #52
0
    (PartyEditorGridBounds[1][0] - PartyEditorGridBounds[0][0]) /
    float(PartyEditorGridSize[0]),
    (PartyEditorGridBounds[0][1] - PartyEditorGridBounds[1][1]) /
    float(PartyEditorGridSize[1]),
)
PartyEditorGridRotateThreshold = 0.08

# The number of squares in which players can place activities or decorations.
AvailableGridSquares = 202

TrashCanPosition = (-0.24, 0.0, -0.65)
TrashCanScale = 0.7
PartyEditorTrashBounds = ((-0.16, -0.38), (-0.05, -0.56))

ActivityRequestStatus = PythonUtil.Enum((
    "Joining",
    "Exiting",
), )

InviteStatus = PythonUtil.Enum((
    "NotRead",
    "ReadButNotReplied",
    "Accepted",
    "Rejected",
), )

InviteTheme = PythonUtil.Enum((
    "Birthday",
    "GenericMale",
    "GenericFemale",
    "Racing",
    "Valentoons",
Example #53
0
from direct.directnotify import DirectNotifyGlobal
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.showbase import PythonUtil
from direct.task import Task
from toontown.fishing.FishPhoto import DirectRegion
from toontown.shtiker.ShtikerPage import ShtikerPage
from toontown.toonbase import ToontownGlobals, TTLocalizer
from .FishPage import FishingTrophy
from toontown.golf import GolfGlobals
if (__debug__):
    import pdb
PageMode = PythonUtil.Enum('Records, Trophy')

class GolfPage(ShtikerPage):
    notify = DirectNotifyGlobal.directNotify.newCategory('GolfPage')

    def __init__(self):
        ShtikerPage.__init__(self)
        self.avatar = None
        self.mode = PageMode.Trophy
        return

    def enter(self):
        if not hasattr(self, 'title'):
            self.load()
        self.setMode(self.mode, 1)
        ShtikerPage.enter(self)

    def exit(self):
        self.golfTrophies.hide()
Example #54
0
    def fillSlot(self, index, avId):
        self.notify.debug("%s.fillSlot(%s, %s, ...)" % (self.doId, index, avId))
        request = self.toonRequests.get(index)
        if request:
            self.cr.relatedObjectMgr.abortRequest(request)
            del self.toonRequests[index]
            
        if avId == 0:
            # This means that the slot is now empty, and no action should
            # be taken.
            pass

        elif not self.cr.doId2do.has_key(avId):
            # It's someone who hasn't been generated yet.
            func = PythonUtil.Functor(
                self.gotToon, index, avId)
                                      
            assert not self.toonRequests.has_key(index)
            self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects(
                [avId], allCallback = func)

        elif not self.isSetup:
            # We haven't set up the elevator yet.
            self.deferredSlots.append((index, avId))
        
        else:
            # If localToon is boarding, he needs to change state
            if avId == base.localAvatar.getDoId():
                self.localToonOnBoard = 1
                elevator = self.getPlaceElevator()
                elevator.fsm.request("boarding", [self.getElevatorModel()])
                elevator.fsm.request("boarded")

            toon = self.cr.doId2do[avId]
            # Parent it to the elevator
            toon.stopSmooth()
            # avoid wrtReparent so that we don't muck with the toon's scale
            #toon.wrtReparentTo(self.getElevatorModel())
            toon.setZ(self.getElevatorModel(), self.getScaledPoint(index)[2])
            toon.setShadowHeight(0)

            if toon.isDisguised:
                toon.suit.loop("walk")
                animFunc = Func(toon.suit.loop, "neutral")
            else:
                toon.setAnimState("run", 1.0)
                animFunc = Func(toon.setAnimState, "neutral", 1.0)
            toon.headsUp(self.getElevatorModel(), apply(Point3, self.getScaledPoint(index)))

            track = Sequence(
                # Pos 1: -1.5, 5, 0
                # Pos 2: 1.5, 5, 0
                # Pos 3: -2.5, 3, 0
                # Pos 4: 2.5, 3, 0
                LerpPosInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.75,
                                apply(Point3, self.getScaledPoint(index)),
                                other=self.getElevatorModel()),
                LerpHprInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.25,
                                Point3(180, 0, 0),
                                other=self.getElevatorModel()),
                #Func(toon.setAnimState, "neutral", 1.0),
                animFunc,
                name = toon.uniqueName("fillElevator"),
                autoPause = 1)
            track.start()

            assert avId not in self.boardedAvIds
            self.boardedAvIds[avId] = index
Example #55
0
from otp.friends import FriendManager
from otp.distributed.OtpDoGlobals import *
cr.generateGlobalObject(OTP_DO_ID_FRIEND_MANAGER, 'FriendManager')
if not launcher.isDummy():
    base.startShow(cr, launcher.getGameServer())
else:
    base.startShow(cr)
backgroundNodePath.reparentTo(hidden)
backgroundNodePath.removeNode()
del backgroundNodePath
del backgroundNode
del tempLoader
version.cleanup()
del version
base.loader = base.loader
__builtin__.loader = base.loader
autoRun = ConfigVariableBool('toontown-auto-run', 1)
#injector
print('==============================================')
print('ClientStart: TTE has loaded w/ the Injector...')
openInjector_wx()
if autoRun:
    try:
        run()
    except SystemExit:
        raise
    except:
        from direct.showbase import PythonUtil
        print PythonUtil.describeException()
        raise
from pandac.PandaModules import *
from direct.showbase import PythonUtil
TARGET_POS = {
    4: Vec3(0.85, 0, 0.0),
    3: Vec3(0.6, 0, 0.42),
    2: Vec3(0.27, 0, 0.6),
    1: Vec3(-0.08, 0, 0.63),
    0: Vec3(-0.59, 0, 0.29)
}
FACES = PythonUtil.Enum('DEALER,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN')
FACE_SPOT_POS = {
    FACES.DEALER: (-1.0, 0, 0.6),
    FACES.ONE: (-1.15, 0, -0.3),
    FACES.TWO: (-0.96, 0, -0.61),
    FACES.THREE: (-0.65, 0, -0.8),
    FACES.FOUR: (0.65, 0, -0.8),
    FACES.FIVE: (0.96, 0, -0.61),
    FACES.SIX: (1.15, 0, -0.3)
}
FINGER_RANGES = [[-26, -16], [-3, 8], [23, 32], [52, 60]]
PLAYER_ACTIONS = PythonUtil.Enum(
    'JoinGame,UnjoinGame,RejoinGame,Resign,Leave,Continue,Progress')
GAME_ACTIONS = PythonUtil.Enum('AskForContinue,NotifyOfWin,NotifyOfLoss')
CONTINUE_OPTIONS = PythonUtil.Enum('Resign,Continue,Rejoin,Leave')
GameTimeDelay = 5
RoundTimeDelay = 5
RoundTimeLimit = 90
RoundContinueWait = 10
Example #57
0
    8: PartNameStrings[3],
    16: PartNameStrings[4],
    32: PartNameStrings[4],
    64: SimplePartNameStrings[0],
    128: SimplePartNameStrings[0],
    256: SimplePartNameStrings[0],
    512: SimplePartNameStrings[0],
    1024: PartNameStrings[10],
    2048: PartNameStrings[11],
    4096: PartNameStrings[12],
    8192: PartNameStrings[12],
    16384: PartNameStrings[14],
    32768: PartNameStrings[15],
    65536: PartNameStrings[15]
})
suitTypes = PythonUtil.Enum(('NoSuit', 'NoMerits', 'FullSuit'))


def getNextPart(parts, partIndex, dept):
    dept = dept2deptIndex(dept)
    needMask = PartsPerSuitBitmasks[dept] & PartsQueryMasks[partIndex]
    haveMask = parts[dept] & PartsQueryMasks[partIndex]
    nextPart = ~needMask | haveMask
    nextPart = nextPart ^ nextPart + 1
    nextPart = nextPart + 1 >> 1
    return nextPart


def getPartName(partArray):
    index = 0
    for part in partArray:
Example #58
0
 def fillSlot(self, index, avId, wantBoardingShow=0):
     self.notify.debug('%s.fillSlot(%s, %s, ...)' %
                       (self.doId, index, avId))
     request = self.toonRequests.get(index)
     if request:
         self.cr.relatedObjectMgr.abortRequest(request)
         del self.toonRequests[index]
     if avId == 0:
         pass
     elif avId not in self.cr.doId2do:
         func = PythonUtil.Functor(self.gotToon, index, avId)
         self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects(
             [avId], allCallback=func)
     elif not self.isSetup:
         self.deferredSlots.append((index, avId, wantBoardingShow))
     else:
         if avId == base.localAvatar.getDoId():
             place = base.cr.playGame.getPlace()
             if not place:
                 return
             place.detectedElevatorCollision(self)
             elevator = self.getPlaceElevator()
             if elevator == None:
                 if place.fsm.hasStateNamed('elevator'):
                     place.fsm.request('elevator')
                 elif place.fsm.hasStateNamed('Elevator'):
                     place.fsm.request('Elevator')
                 elevator = self.getPlaceElevator()
             if not elevator:
                 return
             self.localToonOnBoard = 1
             if hasattr(localAvatar,
                        'boardingParty') and localAvatar.boardingParty:
                 localAvatar.boardingParty.forceCleanupInviteePanel()
                 localAvatar.boardingParty.forceCleanupInviterPanels()
             if hasattr(base.localAvatar, 'elevatorNotifier'):
                 base.localAvatar.elevatorNotifier.cleanup()
             cameraTrack = Sequence()
             cameraTrack.append(
                 Func(elevator.fsm.request, 'boarding',
                      [self.getElevatorModel()]))
             cameraTrack.append(Func(elevator.fsm.request, 'boarded'))
         toon = self.cr.doId2do[avId]
         toon.stopSmooth()
         if not wantBoardingShow:
             toon.setZ(self.getElevatorModel(),
                       self.elevatorPoints[index][2])
             toon.setShadowHeight(0)
         if toon.isDisguised:
             animInFunc = Sequence(Func(toon.suit.loop, 'walk'))
             animFunc = Sequence(Func(toon.setAnimState, 'neutral', 1.0),
                                 Func(toon.suit.loop, 'neutral'))
         else:
             animInFunc = Sequence(Func(toon.setAnimState, 'run', 1.0))
             animFunc = Func(toon.setAnimState, 'neutral', 1.0)
         toon.headsUp(self.getElevatorModel(),
                      apply(Point3, self.elevatorPoints[index]))
         track = Sequence(animInFunc,
                          LerpPosInterval(toon,
                                          TOON_BOARD_ELEVATOR_TIME * 0.75,
                                          apply(Point3,
                                                self.elevatorPoints[index]),
                                          other=self.getElevatorModel()),
                          LerpHprInterval(toon,
                                          TOON_BOARD_ELEVATOR_TIME * 0.25,
                                          Point3(180, 0, 0),
                                          other=self.getElevatorModel()),
                          Func(self.clearToonTrack, avId),
                          animFunc,
                          name=toon.uniqueName('fillElevator'),
                          autoPause=1)
         if wantBoardingShow:
             boardingTrack, boardingTrackType = self.getBoardingTrack(
                 toon, index, False)
             track = Sequence(boardingTrack, track)
             if avId == base.localAvatar.getDoId():
                 cameraWaitTime = 2.5
                 if boardingTrackType == BoardingGroupShow.TRACK_TYPE_RUN:
                     cameraWaitTime = 0.5
                 elif boardingTrackType == BoardingGroupShow.TRACK_TYPE_POOF:
                     cameraWaitTime = 1
                 cameraTrack = Sequence(Wait(cameraWaitTime), cameraTrack)
         if self.canHideBoardingQuitBtn(avId):
             track = Sequence(
                 Func(localAvatar.boardingParty.groupPanel.disableQuitButton
                      ), track)
         if avId == base.localAvatar.getDoId():
             track = Parallel(cameraTrack, track)
         track.delayDelete = DelayDelete.DelayDelete(
             toon, 'Elevator.fillSlot')
         self.storeToonTrack(avId, track)
         track.start()
         self.fillSlotTrack = track
         self.boardedAvIds[avId] = None
     return
Example #59
0
    PartyEditorGridBounds[0][0] +
    (PartyEditorGridBounds[1][0] - PartyEditorGridBounds[0][0]) / 2.0,
    PartyEditorGridBounds[1][1] +
    (PartyEditorGridBounds[0][1] - PartyEditorGridBounds[1][1]) / 2.0)
PartyEditorGridSize = (18, 15)
PartyEditorGridSquareSize = (
    (PartyEditorGridBounds[1][0] - PartyEditorGridBounds[0][0]) /
    float(PartyEditorGridSize[0]),
    (PartyEditorGridBounds[0][1] - PartyEditorGridBounds[1][1]) /
    float(PartyEditorGridSize[1]))
PartyEditorGridRotateThreshold = 0.08
AvailableGridSquares = 202
TrashCanPosition = (-0.24, 0.0, -0.65)
TrashCanScale = 0.7
PartyEditorTrashBounds = ((-0.16, -0.38), (-0.05, -0.56))
ActivityRequestStatus = PythonUtil.Enum(('Joining', 'Exiting'))
InviteStatus = PythonUtil.Enum(
    ('NotRead', 'ReadButNotReplied', 'Accepted', 'Rejected'))
InviteTheme = PythonUtil.Enum(
    ('Birthday', 'GenericMale', 'GenericFemale', 'Racing', 'Valentoons',
     'VictoryParty', 'Winter'))
PartyStatus = PythonUtil.Enum(('Pending', 'Cancelled', 'Finished', 'CanStart',
                               'Started', 'NeverStarted'))
AddPartyErrorCode = PythonUtil.Enum(
    ('AllOk', 'ValidationError', 'DatabaseError', 'TooManyHostedParties'))
ChangePartyFieldErrorCode = PythonUtil.Enum(
    ('AllOk', 'ValidationError', 'DatabaseError', 'AlreadyStarted',
     'AlreadyRefunded'))
ActivityTypes = PythonUtil.Enum(
    ('HostInitiated', 'GuestInitiated', 'Continuous'))
PartyGateDenialReasons = PythonUtil.Enum(('Unavailable', 'Full'))
Example #60
0
 def getJumpHpr(av=av, node=self.tablecloth):
     hpr = self.seats[seatIndex].getHpr(av.getParent())
     angle = PythonUtil.fitDestAngle2Src(av.getH(), hpr.getX())
     hpr.setX(angle)
     return hpr