def getSafezoneId(self): if self.trolleyZoneOverride is not None: return self.trolleyZoneOverride if hasattr(toonbase, 'minigameSafezoneId'): return MinigameGlobals.getSafezoneId(toonbase.minigameSafezoneId) return MinigameGlobals.getSafezoneId(self.trolleyZone) return
def setEveryoneDone(self): if not self.hasLocalToon: return if self.gameFSM.getCurrentState().getName() != 'play': self.notify.warning('ignoring setEveryoneDone msg') return self.notify.debug('setEveryoneDone') def endGame(task, self=self): if not CatchGameGlobals.EndlessGame: self.gameOver() return Task.done self.notify.debug('num fruits: %s' % self.numFruits) self.notify.debug('num catches: %s' % self.fruitsCaught) self.timer.hide() if config.GetBool('want-blueprint4-ARG', False): MinigameGlobals.generateDebugARGPhrase() if self.fruitsCaught >= self.numFruits: self.notify.debug('perfect game!') perfectTextSubnode = hidden.attachNewNode( self.__genText(TTLocalizer.CatchGamePerfect)) perfectText = hidden.attachNewNode('perfectText') perfectTextSubnode.reparentTo(perfectText) frame = self.__textGen.getCardActual() offsetY = -abs(frame[2] + frame[3]) / 2.0 perfectTextSubnode.setPos(0, 0, offsetY) perfectText.setColor(1, 0.1, 0.1, 1) def fadeFunc(t, text=perfectText): text.setColorScale(1, 1, 1, t) def destroyText(text=perfectText): text.removeNode() textTrack = Sequence( Func(perfectText.reparentTo, aspect2d), Parallel( LerpScaleInterval(perfectText, duration=0.5, scale=0.3, startScale=0.0), LerpFunctionInterval(fadeFunc, fromData=0.0, toData=1.0, duration=0.5)), Wait(2.0), Parallel( LerpScaleInterval(perfectText, duration=0.5, scale=1.0), LerpFunctionInterval(fadeFunc, fromData=1.0, toData=0.0, duration=0.5, blendType='easeIn')), Func(destroyText), WaitInterval(0.5), Func(endGame, None)) soundTrack = SoundInterval(self.sndPerfect) self.perfectIval = Parallel(textTrack, soundTrack) self.perfectIval.start() else: taskMgr.doMethodLater(1, endGame, self.EndGameTaskName) return
def enterShowScores(self): self.notify.debug('enterShowScores') lerpTrack = Parallel() lerpDur = 0.5 lerpTrack.append(Parallel(LerpPosInterval(self.goalBar, lerpDur, Point3(0, 0, -.6), blendType='easeInOut'), LerpScaleInterval(self.goalBar, lerpDur, Vec3(self.goalBar.getScale()) * 2.0, blendType='easeInOut'))) tY = 0.6 bY = -.05 lX = -.5 cX = 0 rX = 0.5 scorePanelLocs = (((cX, bY),), ((lX, bY), (rX, bY)), ((cX, tY), (lX, bY), (rX, bY)), ((lX, tY), (rX, tY), (lX, bY), (rX, bY))) scorePanelLocs = scorePanelLocs[self.numPlayers - 1] for i in xrange(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] panel.wrtReparentTo(aspect2d) lerpTrack.append(Parallel(LerpPosInterval(panel, lerpDur, Point3(pos[0], 0, pos[1]), blendType='easeInOut'), LerpScaleInterval(panel, lerpDur, Vec3(panel.getScale()) * 2.0, blendType='easeInOut'))) self.showScoreTrack = Parallel(lerpTrack, Sequence(Wait(MazeGameGlobals.SHOWSCORES_DURATION), Func(self.gameOver))) self.showScoreTrack.start() #For the Alpha Blueprint ARG if config.GetBool('want-blueprint4-ARG', False): MinigameGlobals.generateDebugARGPhrase()
def enterShowScores(self): self.notify.debug('enterShowScores') lerpTrack = Parallel() lerpDur = 0.5 lerpTrack.append(Parallel(LerpPosInterval(self.goalBar, lerpDur, Point3(0, 0, -.6), blendType='easeInOut'), LerpScaleInterval(self.goalBar, lerpDur, Vec3(self.goalBar.getScale()) * 2.0, blendType='easeInOut'))) tY = 0.6 bY = -.05 lX = -.5 cX = 0 rX = 0.5 scorePanelLocs = (((cX, bY),), ((lX, bY), (rX, bY)), ((cX, tY), (lX, bY), (rX, bY)), ((lX, tY), (rX, tY), (lX, bY), (rX, bY))) scorePanelLocs = scorePanelLocs[self.numPlayers - 1] for i in xrange(self.numPlayers): panel = self.scorePanels[i] pos = scorePanelLocs[i] panel.wrtReparentTo(aspect2d) lerpTrack.append(Parallel(LerpPosInterval(panel, lerpDur, Point3(pos[0], 0, pos[1]), blendType='easeInOut'), LerpScaleInterval(panel, lerpDur, Vec3(panel.getScale()) * 2.0, blendType='easeInOut'))) self.showScoreTrack = Parallel(lerpTrack, Sequence(Wait(MazeGameGlobals.SHOWSCORES_DURATION), Func(self.gameOver))) self.showScoreTrack.start() #For the Alpha Blueprint ARG if base.config.GetBool('want-blueprint4-ARG', False): MinigameGlobals.generateDebugARGPhrase()
def getSafezoneId(self): if self.trolleyZoneOverride is not None: return self.trolleyZoneOverride else: if hasattr(self.air, 'minigameSafezoneId'): return MinigameGlobals.getSafezoneId( self.air.minigameSafezoneId) return MinigameGlobals.getSafezoneId(self.trolleyZone)
def getSafezoneId(self): if self.trolleyZoneOverride is not None: return self.trolleyZoneOverride if hasattr(self.air, 'minigameSafezoneId'): return MinigameGlobals.getSafezoneId(self.air.minigameSafezoneId) return MinigameGlobals.getSafezoneId(self.trolleyZone)
def setEveryoneDone(self): if not self.hasLocalToon: return if self.gameFSM.getCurrentState().getName() != "play": self.notify.warning("ignoring setEveryoneDone msg") return self.notify.debug("setEveryoneDone") def endGame(task, self=self): if not CatchGameGlobals.EndlessGame: self.gameOver() return Task.done self.notify.debug("num fruits: %s" % self.numFruits) self.notify.debug("num catches: %s" % self.fruitsCaught) self.timer.hide() # For the Alpha Blueprint ARG if base.config.GetBool("want-blueprint4-ARG", False): MinigameGlobals.generateDebugARGPhrase() if self.fruitsCaught >= self.numFruits: self.notify.debug("perfect game!") perfectTextSubnode = hidden.attachNewNode(self.__genText(TTLocalizer.CatchGamePerfect)) perfectText = hidden.attachNewNode("perfectText") perfectTextSubnode.reparentTo(perfectText) frame = self.__textGen.getCardActual() offsetY = -abs(frame[2] + frame[3]) / 2.0 perfectTextSubnode.setPos(0, 0, offsetY) perfectText.setColor(1, 0.1, 0.1, 1) def fadeFunc(t, text=perfectText): text.setColorScale(1, 1, 1, t) def destroyText(text=perfectText): text.removeNode() textTrack = Sequence( Func(perfectText.reparentTo, aspect2d), Parallel( LerpScaleInterval(perfectText, duration=0.5, scale=0.3, startScale=0.0), LerpFunctionInterval(fadeFunc, fromData=0.0, toData=1.0, duration=0.5), ), Wait(2.0), Parallel( LerpScaleInterval(perfectText, duration=0.5, scale=1.0), LerpFunctionInterval(fadeFunc, fromData=1.0, toData=0.0, duration=0.5, blendType="easeIn"), ), Func(destroyText), WaitInterval(0.5), Func(endGame, None), ) soundTrack = SoundInterval(self.sndPerfect) self.perfectIval = Parallel(textTrack, soundTrack) self.perfectIval.start() else: taskMgr.doMethodLater(1, endGame, self.EndGameTaskName) return
def getSafezoneId(self): """ returns 1000-multiple safezone zoneId; can be matched to safezone IDs in ToontownGlobals.py """ if self.trolleyZoneOverride is not None: return self.trolleyZoneOverride if hasattr(base, 'minigameSafezoneId'): return MinigameGlobals.getSafezoneId(base.minigameSafezoneId) return MinigameGlobals.getSafezoneId(self.trolleyZone)
def getDifficulty(self): if self.difficultyOverride is not None: return self.difficultyOverride if hasattr(toonbase, 'minigameDifficulty'): return float(toonbase.minigameDifficulty) return MinigameGlobals.getDifficulty(self.getSafezoneId()) return
def getDifficulty(self): if self.difficultyOverride is not None: return self.difficultyOverride else: if hasattr(self.air, 'minigameDifficulty'): return float(self.air.minigameDifficulty) return MinigameGlobals.getDifficulty(self.getSafezoneId())
def enterFrameworkCleanup(self): self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' % self.normalExit) scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId()) if not self.hasScoreMult(): scoreMult = 1.0 self.notify.debug('score multiplier: %s' % scoreMult) for avId in self.avIdList: self.scoreDict[avId] *= scoreMult scoreList = [] for avId in self.avIdList: if self.normalExit: score = int(self.scoreDict[avId] + 0.5) else: score = 0 if simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY) or simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH): score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier logEvent = False if score > 255: score = 255 logEvent = True elif score < 0: score = 0 logEvent = True if logEvent: self.air.writeServerEvent('suspicious', avId, 'got %s jellybeans playing minigame %s in zone %s' % (score, self.minigameId, self.getSafezoneId())) scoreList.append(score) self.requestDelete() self.handleRegularPurchaseManager(scoreList) self.frameworkFSM.request('frameworkOff')
def setDifficultyOverrides(self, difficultyOverride, trolleyZoneOverride): self.difficultyOverride = difficultyOverride if self.difficultyOverride is not None: self.difficultyOverride = MinigameGlobals.QuantizeDifficultyOverride( difficultyOverride) self.trolleyZoneOverride = trolleyZoneOverride return
def getDifficulty(self): if self.difficultyOverride is not None: return self.difficultyOverride if hasattr(self.air, 'minigameDifficulty'): return float(self.air.minigameDifficulty) return MinigameGlobals.getDifficulty(self.getSafezoneId())
def setDifficultyOverrides(self, difficultyOverride, trolleyZoneOverride): """ This must be called before the object is generated difficultyOverride is the difficulty value that should be used and sent to the clients trolleyZoneOverride is similar """ self.difficultyOverride = difficultyOverride if self.difficultyOverride is not None: # modify difficultyOverride so that it will convert to an # integer and back without losing any precision self.difficultyOverride = ( MinigameGlobals.QuantizeDifficultyOverride(difficultyOverride)) self.trolleyZoneOverride = trolleyZoneOverride
def enterFrameworkCleanup(self): self.notify.debug("BASE: enterFrameworkCleanup: normalExit=%s" % self.normalExit) # scale the scores based on the neighborhood # use self.getSafezoneId to pick up debug overrides scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId()) if not self.hasScoreMult(): scoreMult = 1.0 self.notify.debug('score multiplier: %s' % scoreMult) for avId in self.avIdList: assert avId not in [0, None] self.scoreDict[avId] *= scoreMult # create a score list that parallels the avIdList scoreList = [] if not self.normalExit: # if game exited abnormally, pick a uniform number of points # for all toons randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1) for avId in self.avIdList: assert avId not in [0, None] # put in some bogus points if we have requested abort if self.normalExit: score = int(self.scoreDict[avId] + .5) if score > 255: self.notify.warning( 'avatar %s got %s jellybeans playing minigame %s in zone %s' % (avId, score, self.minigameId, self.getSafezoneId())) score = 255 elif score < 0: # RAU just in case I miss something in ice game score = 0 scoreList.append(score) else: scoreList.append(randReward) # Delete yourself self.requestDelete() if self.metagameRound > -1: self.handleMetagamePurchaseManager(scoreList) else: self.handleRegularPurchaseManager(scoreList) self.frameworkFSM.request('frameworkOff')
def enterFrameworkCleanup(self): self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' % self.normalExit) scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId()) if not self.hasScoreMult(): scoreMult = 1.0 self.notify.debug('score multiplier: %s' % scoreMult) for avId in self.avIdList: self.scoreDict[avId] *= scoreMult scoreList = [] if not self.normalExit: randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1) for avId in self.avIdList: if self.normalExit: score = int(self.scoreDict[avId] + 0.5) else: score = randReward if ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY in simbase.air.holidayManager.currentHolidays or ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH in simbase.air.holidayManager.currentHolidays: score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier logEvent = False if score > 255: score = 255 logEvent = True elif score < 0: score = 0 logEvent = True if logEvent: self.air.writeServerEvent( 'suspicious', avId, 'got %s jellybeans playing minigame %s in zone %s' % (score, self.minigameId, self.getSafezoneId())) scoreList.append(score) self.requestDelete() if self.metagameRound > -1: self.handleMetagamePurchaseManager(scoreList) else: self.handleRegularPurchaseManager(scoreList) self.frameworkFSM.request('frameworkOff')
def enterFrameworkCleanup(self): self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' % self.normalExit) scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId()) if not self.hasScoreMult(): scoreMult = 1.0 self.notify.debug('score multiplier: %s' % scoreMult) for avId in self.avIdList: self.scoreDict[avId] *= scoreMult scoreList = [] if not self.normalExit: randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1) for avId in self.avIdList: if self.normalExit: score = int(self.scoreDict[avId] + 0.5) else: score = randReward if ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY in simbase.air.holidayManager.currentHolidays or ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH in simbase.air.holidayManager.currentHolidays: score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier logEvent = False if score > 255: score = 255 logEvent = True elif score < 0: score = 0 logEvent = True if logEvent: self.air.writeServerEvent('suspicious', avId, 'got %s jellybeans playing minigame %s in zone %s' % (score, self.minigameId, self.getSafezoneId())) scoreList.append(score) self.requestDelete() if self.metagameRound > -1: self.handleMetagamePurchaseManager(scoreList) else: self.handleRegularPurchaseManager(scoreList) self.frameworkFSM.request('frameworkOff')
def enterFrameworkCleanup(self): self.notify.debug("BASE: enterFrameworkCleanup: normalExit=%s" % self.normalExit) scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId()) if not self.hasScoreMult(): scoreMult = 1.0 self.notify.debug("score multiplier: %s" % scoreMult) for avId in self.avIdList: self.scoreDict[avId] *= scoreMult scoreList = [] for avId in self.avIdList: if self.normalExit: score = int(self.scoreDict[avId] + 0.5) else: score = 0 if simbase.air.newsManager.isHolidayRunning( ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY ) or simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH): score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier logEvent = False if score > 255: score = 255 logEvent = True elif score < 0: score = 0 logEvent = True if logEvent: self.air.writeServerEvent( "suspicious", avId, "got %s jellybeans playing minigame %s in zone %s" % (score, self.minigameId, self.getSafezoneId()), ) scoreList.append(score) self.requestDelete() self.handleRegularPurchaseManager(scoreList) self.frameworkFSM.request("frameworkOff")
def printPeriodTable(name, numSuitList, fasterSuits, tTransFunc=None): str = '%s = {\n' % name # cycle through the safezones and calculate the # corresponding suit speeds for zone in MinigameGlobals.SafeZones: str += '%s%s : {' % (' '*4, zone) difficulty = MinigameGlobals.getDifficulty(zone) minSpeed = lerp(self.MinSuitSpeedRange[0], self.MinSuitSpeedRange[1], difficulty) maxSpeed = lerp(self.MaxSuitSpeedRange[0], self.MaxSuitSpeedRange[1], difficulty) # all the 'slower' suits will be slower than this speed, # all the 'faster' suits will be faster. midSpeed = (minSpeed + maxSpeed) / 2. # cycle through the suit counts (how many suits # will be in play) for numSuits in numSuitList: # there must be an even number of suits assert not numSuits % 2 speeds = [] for i in xrange(numSuits/2): if fasterSuits: i += numSuits/2 t = i / float(numSuits-1) # map t into 0..1 if fasterSuits: t -= .5 t *= 2. # apply any time transformation function if tTransFunc != None: t = tTransFunc(t) if fasterSuits: speed = lerp(midSpeed, maxSpeed, t) else: speed = lerp(minSpeed, midSpeed, t) speeds.append(speed) # calculate the corresponding suit periods def calcUpdatePeriod(speed): # result in tics # SUIT_TIC_FREQ: tics/sec # CELL_WIDTH: feet # speed: feet/sec # tics = ((tics/sec) * feet) / (feet/sec) return int((float(MazeGameGlobals.SUIT_TIC_FREQ) * \ float(MazeData.CELL_WIDTH)) / speed) periods = map(calcUpdatePeriod, speeds) filler = "" if numSuits < 10: filler = " " str += '%s%s : %s,\n%s%s' % (numSuits, filler, periods, ' '*4, ' '*8) str += '},\n' str += '%s}' % (' '*4) print str
def getDifficulty(self): if self.difficultyOverride is not None: return self.difficultyOverride if hasattr(base, "minigameDifficulty"): return float(base.minigameDifficulty) return MinigameGlobals.getDifficulty(self.getSafezoneId())
def getSafezoneId(self): if self.trolleyZoneOverride is not None: return self.trolleyZoneOverride if hasattr(base, "minigameSafezoneId"): return MinigameGlobals.getSafezoneId(base.minigameSafezoneId) return MinigameGlobals.getSafezoneId(self.trolleyZone)