def __init__(self, parentFSM, doneEvent): StateData.__init__(self, "playGameDone") self.doneEvent = doneEvent self.fsm = ClassicFSM('World', [State('off', self.enterOff, self.exitOff, ['quietZone']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['TTHood', 'BRHood', 'DLHood', 'MLHood', 'DGHood', 'DDHood', 'MGHood', 'CTCHood', 'CTHood']), State('TTHood', self.enterTTHood, self.exitTTHood, ['quietZone']), State('BRHood', self.enterBRHood, self.exitBRHood, ['quietZone']), State('DLHood', self.enterDLHood, self.exitDLHood, ['quietZone']), State('MLHood', self.enterMLHood, self.exitMLHood, ['quietZone']), State('DGHood', self.enterDGHood, self.exitDGHood, ['quietZone']), State('DDHood', self.enterDDHood, self.exitDDHood, ['quietZone']), State('MGHood', self.enterMGHood, self.exitMGHood, ['quietZone']), State('CTCHood', self.enterCTCHood, self.exitCTCHood, ['quietZone']), State('CTHood', self.enterCTHood, self.exitCTHood, ['quietZone'])], 'off', 'off') self.fsm.enterInitialState() self.parentFSM = parentFSM self.parentFSM.getStateNamed('playGame').addChild(self.fsm) self.hoodDoneEvent = 'hoodDone' self.hood = None self.quietZoneDoneEvent = uniqueName('quietZoneDone') self.quietZoneStateData = None self.place = None self.lastHood = None self.suitManager = None
def __init__(self, loader, parentFSM, doneEvent): self.parentFSM = parentFSM Place.__init__(self, loader, doneEvent) self.fsm = ClassicFSM('Street', [ State( 'start', self.enterStart, self.exitStart, ['walk', 'doorOut', 'teleportIn', 'tunnelOut', 'elevatorIn']), State('walk', self.enterWalk, self.exitWalk, ['stop', 'tunnelIn', 'shtickerBook', 'teleportOut']), State('shtickerBook', self.enterShtickerBook, self.exitShtickerBook, ['teleportOut', 'walk']), State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, ['teleportIn', 'stop']), State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, ['walk']), State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, ['stop']), State('stop', self.enterStop, self.exitStop, ['walk', 'died', 'teleportOut', 'doorIn']), State('doorIn', self.enterDoorIn, self.exitDoorIn, ['stop']), State('doorOut', self.enterDoorOut, self.exitDoorOut, ['walk']), State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, ['walk', 'stop']), State('elevatorIn', self.enterElevatorIn, self.exitElevatorIn, ['walk', 'stop']), State('final', self.enterFinal, self.exitFinal, ['final']) ], 'start', 'final')
def __init__(self, playground): self.playground = playground self.fsm = ClassicFSM('BRWater', [ State('off', self.enterOff, self.exitOff), State('freezeUp', self.enterFreezeUp, self.exitFreezeUp), State('coolDown', self.enterCoolDown, self.exitCoolDown), State('frozen', self.enterFrozen, self.exitFrozen) ], 'off', 'off') self.fsm.enterInitialState() #base.localAvatar.audio3d self.freezeUpSfx = base.loadSfx('phase_8/audio/sfx/freeze_up.ogg') self.frozenSfxArray = [ base.loadSfx('phase_8/audio/sfx/frozen_1.ogg'), base.loadSfx('phase_8/audio/sfx/frozen_2.ogg'), base.loadSfx('phase_8/audio/sfx/frozen_3.ogg') ] self.coolSfxArray = [ base.loadSfx('phase_8/audio/sfx/cool_down_1.ogg'), base.loadSfx('phase_8/audio/sfx/cool_down_2.ogg') ] self.iceFormSfx = base.loadSfx("phase_4/audio/sfx/ice_cube_form.ogg") self.iceBreakSfx = base.loadSfx("phase_4/audio/sfx/ice_cube_break.ogg") self.freezeUpSfx.setVolume(12) for sfx in self.frozenSfxArray: sfx.setVolume(12) for sfx in self.coolSfxArray: sfx.setVolume(12)
def __init__(self, cr): DistributedObject.__init__(self, cr) self.fsm = ClassicFSM('DistributedBoat', [ State('off', self.enterOff, self.exitOff), State('eastToWest', self.enterEastToWest, self.exitEastToWest), State('westToEast', self.enterWestToEast, self.exitWestToEast) ], 'off', 'off') self.boat = None self.eastPier = None self.eastPierPath = 'east_pier' self.westPier = None self.westPierPath = 'west_pier' self.pierUpP = 0.0 self.pierDownP = -45.0 self.fogHorn = 'phase_5/audio/sfx/SZ_DD_foghorn.ogg' self.shipBell = 'phase_6/audio/sfx/SZ_DD_shipbell.ogg' self.waterLap = 'phase_6/audio/sfx/SZ_DD_waterlap.ogg' self.dockCreak = 'phase_6/audio/sfx/SZ_DD_dockcreak.ogg' self.eastWest = 'phase_6/paths/dd-e-w.bam' self.westEast = 'phase_6/paths/dd-w-e.bam' self.track = None self.state = None self.animBoat1Track = None self.animBoatTrack = None # Variables that handle the winter collision node. self.crashColl = None self.crashCollNP = None
def __init__(self, cr): DistributedAvatar.__init__(self, cr) DistributedSmoothNode.__init__(self, cr) self.fsm = ClassicFSM( 'DistributedPieTurret', [ State('off', self.enterOff, self.exitOff), State('scan', self.enterScan, self.exitScan), State('shoot', self.enterShoot, self.exitShoot) ], 'off', 'off' ) self.fsm.enterInitialState() self.reloadTime = 0.25 self.cannon = None self.track = None self.owner = None self.gag = None self.readyGag = None self.hitGag = None self.explosion = None self.wallCollNode = None self.eventCollNode = None self.event = None self.suit = None self.eventId = None self.entities = [] self.upgradeID = None self.deathEvent = None
def __init__(self, loader, parentFSM, doneEvent): Place.Place.__init__(self, loader, doneEvent) self.fsm = ClassicFSM('Playground', [ State( 'start', self.enterStart, self.exitStart, ['walk', 'teleportIn', 'tunnelOut', 'doorOut', 'trolleyOut']), State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, ['walk', 'acknowledgeDeath']), State('walk', self.enterWalk, self.exitWalk, ['teleportOut', 'stop', 'shtickerBook', 'died', 'tunnelIn']), State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, ['teleportIn', 'stop']), State('stop', self.enterStop, self.exitStop, ['walk', 'died', 'station', 'teleportOut', 'doorIn']), State('shtickerBook', self.enterShtickerBook, self.exitShtickerBook, ['teleportOut', 'walk']), State('tunnelOut', self.enterTunnelOut, self.exitTeleportOut, ['walk']), State('final', self.enterFinal, self.exitFinal, ['start']), State('died', self.enterDied, self.exitDied, ['final']), State('station', self.enterStation, self.exitStation, ['teleportOut', 'walk']), State('doorIn', self.enterDoorIn, self.exitDoorIn, ['stop']), State('doorOut', self.enterDoorOut, self.exitDoorOut, ['walk']), State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, ['stop']), State('acknowledgeDeath', self.enterAcknowledgeDeath, self.exitAcknowledgeDeath, ['walk']), State('trolleyOut', self.enterTrolleyOut, self.exitTrolleyOut, ['walk', 'stop']) ], 'start', 'final') self.parentFSM = parentFSM return
def __init__(self, cr): DistributedAvatar.__init__(self, cr) DistributedSmoothNode.__init__(self, cr) self.fsm = ClassicFSM('DDisneyChar', [ State('off', self.enterOff, self.exitOff), State('walking', self.enterWalking, self.exitWalking), State('neutral', self.enterNeutral, self.exitNeutral) ], 'off', 'off') self.fsm.enterInitialState() self.neutralFSM = ClassicFSM('DDisneyChar-neutral', [ State('off', self.enterOff, self.exitOff), State('turn2target', self.enterTurn2Target, self.exitTurn2Target), State('talk2target', self.enterTalk2Target, self.exitTalk2Target) ], 'off', 'off') self.neutralFSM.enterInitialState() self.charId = 0 self.geoEyes = 0 self.avatarType = CIGlobals.CChar self.isInRange = False self.currentPointLetter = "a" self.walkIval = None self.currentChat = "" self.talkEnabled = True self.speechSound = None self.chatsSinceLastNoise = 0 self.chatsWithoutNoise = 5 self.eyes = None self.lpupil = None self.rpupil = None self.eyesOpen = None self.eyesClosed = None
def __init__(self, name): PandaNode.__init__(self, name) DirectObject.__init__(self) self.fsm = ClassicFSM(name, [ State('off', self.enterOff, self.exitOff), State('rollover', self.enterRollover, self.exitRollover), State('ready', self.enterReady, self.exitReady), State('depressed', self.enterDepressed, self.exitDepressed), State('inactive', self.enterInactive, self.exitInactive)], 'off', 'off') self.fsm.enterInitialState() self.active = True self.lastClickState = PGButton.SReady self.clickState = PGButton.SReady self.__hovering = False self.clickEvent = '' self.clickExtraArgs = [] self.contents = NodePath.anyPath(self).attachNewNode('contents') # Create a MouseWatcherRegion: self.regionName = self.getUniqueName() + '-region' self.region = MouseWatcherRegion(self.regionName, 0, 0, 0, 0) base.mouseWatcherNode.addRegion(self.region) # Accept the mouse events: enterPattern = base.mouseWatcherNode.getEnterPattern() leavePattern = base.mouseWatcherNode.getLeavePattern() buttonDownPattern = base.mouseWatcherNode.getButtonDownPattern() buttonUpPattern = base.mouseWatcherNode.getButtonUpPattern() self.accept(enterPattern.replace('%r', self.regionName), self.__handleMouseEnter) self.accept(leavePattern.replace('%r', self.regionName), self.__handleMouseLeave) self.accept(buttonDownPattern.replace('%r', self.regionName), self.__handleMouseDown) self.accept(buttonUpPattern.replace('%r', self.regionName), self.__handleMouseUp)
class DistributedArcadeBattleZoneAI(DistributedBattleZoneAI): notify = directNotify.newCategory('DistributedArcadeBattleZoneAI') def __init__(self, air): DistributedBattleZoneAI.__init__(self, air) self.battleType = BattleGlobals.BTArcade self.matchData = None self.fsm = ClassicFSM('DistributedArcadeBattleZoneAI', [ State('off', self.enterOff, self.exitOff), ], 'off', 'off') self.readyAvatars = [] # Variables related to turrets self.turretMgr = None def announceGenerate(self): DistributedBattleZoneAI.announceGenerate(self) self.turretMgr = DistributedPieTurretManagerAI(self.air) self.turretMgr.generateWithRequired(self.zoneId) self.fsm.enterInitialState() def enterOff(self): pass def exitOff(self): pass
def __init__(self, doneEvent, moveOn = 1): StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('quietZone', [State('off', self.enterOff, self.exitOff, ['waitForQuietZoneResponse']), State('waitForQuietZoneResponse', self.enterWaitForQuietZoneResponse, self.exitWaitForQuietZoneResponse, ['waitForSetZoneResponse']), State('waitForSetZoneResponse', self.enterWaitForSetZoneResponse, self.exitWaitForSetZoneResponse, ['waitForSetZoneComplete']), State('waitForSetZoneComplete', self.enterWaitForSetZoneComplete, self.exitWaitForSetZoneComplete, ['off'])], 'off', 'off') self.fsm.enterInitialState() self.moveOn = moveOn
def __init__(self, parentFSM, doneEvent): self.parentFSM = parentFSM StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('ShtickerBook', [ State('off', self.enterOff, self.exitOff), State('optionPage', self.enterOptionPage, self.exitOptionPage, ['districtPage', 'off']), State('districtPage', self.enterDistrictPage, self.exitDistrictPage, ['optionPage', 'questPage', 'off']), State('questPage', self.enterQuestPage, self.exitQuestPage, ['inventoryPage', 'districtPage', 'off']), State('inventoryPage', self.enterInventoryPage, self.exitInventoryPage, ['mapPage', 'questPage', 'off']), State('mapPage', self.enterMapPage, self.exitMapPage, ['inventoryPage', 'off']), State('releaseNotesPage', self.enterReleaseNotesPage, self.exitReleaseNotesPage, ['mapPage', 'off']), State('adminPage', self.enterAdminPage, self.exitAdminPage, ['mapPage', 'namePage', 'off']), State('namePage', self.enterNamePage, self.exitNamePage, ['adminPage', 'off']) ], 'off', 'off') if base.localAvatar.getAdminToken() > -1: self.fsm.getStateNamed('mapPage').addTransition('adminPage') self.fsm.enterInitialState() self.entered = 0 self.parentFSM.getStateNamed('shtickerBook').addChild(self.fsm)
def __init__(self, mg): self.mg = mg self.batteryFrame = None self.batteryBg = None self.batteryBar = None self.rechargeSound = None self.fullyChargedSound = None self.hasToonInFocus = False self.toonToTakePicOf = None self.cameraRechargeState = None self.cameraRechargingLabel = None self.cameraFlashSeq = None self.viewfinder = None self.camFSM = ClassicFSM('CameraFSM', [ State('off', self.enterOff, self.exitOff), State('ready', self.enterCameraReady, self.exitCameraReady), State('recharge', self.enterCameraRecharge, self.exitCameraRecharge) ], 'off', 'off') self.camFSM.enterInitialState() FirstPerson.__init__(self)
def __init__(self, hood, parentFSMState, doneEvent): StateData.__init__(self, doneEvent) self.hood = hood self.parentFSMState = parentFSMState self.fsm = ClassicFSM('safeZoneLoader', [ State('off', self.enterOff, self.exitOff), State('playground', self.enterPlayground, self.exitPlayground, ['quietZone']), State('toonInterior', self.enterToonInterior, self.exitToonInterior, ['quietZone']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['playground', 'toonInterior']) ], 'off', 'off') self.placeDoneEvent = 'placeDone' self.place = None self.playground = None self.battleMusic = None self.invasionMusic = None self.invasionMusicFiles = None self.interiorMusic = None self.bossBattleMusic = None self.music = None self.tournamentMusic = None self.linkTunnels = [] self.szHolidayDNAFile = None self.animatedFish = None return
def __init__(self): try: self.Char_initialized return except: self.Char_initialized = 1 Avatar.Avatar.__init__(self) self.avatarType = CIGlobals.CChar self.avatarName = None self.currentAnim = None self.charType = "" self.eyes = loader.loadTexture("phase_3/maps/eyes1.jpg", "phase_3/maps/eyes1_a.rgb") self.closedEyes = loader.loadTexture( "phase_3/maps/mickey_eyes_closed.jpg", "phase_3/maps/mickey_eyes_closed_a.rgb") self.animFSM = ClassicFSM('Char', [ State('off', self.enterOff, self.exitOff), State('neutral', self.enterNeutral, self.exitNeutral), State('walk', self.enterWalk, self.exitWalk), State('run', self.enterRun, self.exitRun) ], 'off', 'off') animStateList = self.animFSM.getStates() self.animFSM.enterInitialState() self.charId = -1 Avatar.Avatar.initializeBodyCollisions(self, self.avatarType, 3.5, 1)
def __init__(self, cr): Suit.__init__(self) DistributedAvatar.__init__(self, cr) DistributedSmoothNode.__init__(self, cr) self.anim = None self._state = SuitState.ALIVE self.dept = None self.variant = None self.suitPlan = None self.level = None self.moveIval = None self.hpFlash = None # For PythonCTMusicManager: # Are we in range of the localAvatar? self.isInRange = False self.chaseTarget = 0 self.suitFSM = ClassicFSM('DistributedSuit', [ State('off', self.enterSuitOff, self.exitSuitOff), State('walking', self.enterWalking, self.exitWalking), State('flyingDown', self.enterFlyingDown, self.exitFlyingDown), State('flyingUp', self.enterFlyingUp, self.exitFlyingUp), State('lured', self.enterLured, self.exitLured) ], 'off', 'off') self.stateIndex2suitState = {} self.suitFSM.enterInitialState() self.makeStateDict()
def __init__(self, cr): try: self.DistributedRaceGame_initialized return except: self.DistributedRaceGame_initialized = 1 DistributedMinigame.DistributedMinigame.__init__(self, cr) self.movement = RaceGameMovement.RaceGameMovement(base.localAvatar) self.skyUtil = SkyUtil() self.raceFSM = ClassicFSM('DistributedRaceGame', [ State('race', self.enterRace, self.exitRace), State('raceTransition', self.enterRaceTransition, self.exitRaceTransition), State('off', self.enterRaceOff, self.exitRaceOff) ], 'off', 'off') self.raceFSM.enterInitialState() self.cr = cr self.track = None self.sky = None self.countSfx = base.loadSfx("phase_5/audio/sfx/firehydrant_popup.ogg") self.goSfx = base.loadSfx("phase_4/audio/sfx/AA_sound_whistle.ogg") self.game = CIGlobals.RaceGame self.trackPath = "phase_4/models/minigames/sprint_track.egg" self.skyPath = "phase_3.5/models/props/TT_sky.bam" self.lanePos = [(-22.00, -205.00, 0.00), (-11.66, -205.00, 0.00), (0.00, -205.00, 0.00), (-33.66, -205.00, 0.00)] self.initialCamPos = { "pos": (41.10, -145.00, 25.88), "hpr": (135.00, 345.96, 0.0) } self.raceCamPos = (-24.52, -37.22, 25.00) self.lane = 0 return
def __init__(self, book): BookPage.__init__(self, book, 'Options', wantHeader=True) self.fsm = ClassicFSM('OptionPage', [ State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage), State('displayPage', self.enterDisplayPage, self.exitDisplayPage) ], 'off', 'off') self.fsm.enterInitialState()
def __init__(self, doneEvent): StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('Walk', [ State('off', self.enterOff, self.exitOff, ['walking', 'deadWalking']), State('walking', self.enterWalking, self.exitWalking), State('deadWalking', self.enterDeadWalking, self.exitDeadWalking)], 'off', 'off') self.fsm.enterInitialState()
def __init__(self, cr): DistributedMinigame.__init__(self, cr) self.platformPositions = { 0: (-15, 0.5, -0.5), 1: (-5, 0.5, -0.5), 2: (5, 0.5, -0.5), 3: (15, 0.5, -0.5) } self.fsm.addState( State('preGameMovie', self.enterPreGameMovie, self.exitPreGameMovie, ['start'])) self.fsm.addState( State('roundCountdown', self.enterRoundCountdown, self.exitRoundCountdown, ['play'])) self.fsm.addState( State('roundOver', self.enterRoundOver, self.exitRoundOver, ['finalScores', 'roundCountdown'])) self.fsm.addState( State('finalScores', self.enterFinalScores, self.exitFinalScores, ['gameOver'])) self.fsm.getStateNamed('waitForOthers').addTransition('preGameMovie') self.fsm.getStateNamed('waitForOthers').addTransition('roundCountdown') self.fsm.getStateNamed('play').addTransition('roundOver') self.fsm.getStateNamed('gameOver').addTransition('finalScores') self.cannonFSM = ClassicFSM('Cannon', [ State('off', self.enterOff, self.exitOff), State('control', self.enterControlCannon, self.exitControlCannon), State('fly', self.enterFly, self.exitFly) ], 'off', 'off') self.cannonFSM.enterInitialState() self.cannon = None self.hitEagleSfx = None self.toonOof = None self.cannonMoveSfx = None self.fallSfx = None self.bgColor = (0.05, 0.05, 0.05) self.cannonId = None self.cannonBarrel = '**/cannon' self.fog = None self.platforms = [] self.cannons = [] self.round = 0 self.world = None self.world2 = None self.olc = None self.worldModelPath = 'phase_5/models/cogdominium/tt_m_ara_cfg_quadrant2.bam' self.nodesToStash = [ 'lights', 'streamers', 'tt_m_ara_cfg_girders2b:Rwall_col', 'tt_m_ara_cfg_girders2b:Lwall_col' ] self.triggers = [ 'tt_m_ara_cfg_clump2:col_clump2', 'tt_m_ara_cfg_clump4:col_clump4', 'tt_m_ara_cfg_clump5:col_clump5', 'tt_m_ara_cfg_clump6:col_clump6', 'tt_m_ara_cfg_clump7:col_clump7', 'tt_m_ara_cfg_base:ceiling_collision' ]
def __init__(self, cr): DistributedSuit.__init__(self, cr) self.doorDoId = None self.door = None self.takeOverTrack = None self.fsm = ClassicFSM('DTOS-fsm', [State('off', self.enterOff, self.exitOff), State('takeOver', self.enterTakeOver, self.exitTakeOver)], 'off', 'off') self.fsm.enterInitialState()
def __init__(self, air): DistributedBattleZoneAI.__init__(self, air) self.battleType = BattleGlobals.BTArcade self.matchData = None self.fsm = ClassicFSM('DistributedArcadeBattleZoneAI', [ State('off', self.enterOff, self.exitOff), ], 'off', 'off') self.readyAvatars = [] # Variables related to turrets self.turretMgr = None
def __init__(self, book, parentFSM): self.book = book self.parentFSM = parentFSM StateData.__init__(self, 'adminPageDone') self.fsm = ClassicFSM('AdminPage', [State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage), State('kickSection', self.enterKickSection, self.exitKickSection), State('sysMsgSection', self.enterSysMsgSection, self.exitSysMsgSection)], 'off', 'off') self.fsm.enterInitialState() self.parentFSM.getStateNamed('adminPage').addChild(self.fsm)
def __init__(self, book, parentFSM): self.book = book self.parentFSM = parentFSM StateData.__init__(self, 'optionPageDone') self.fsm = ClassicFSM('OptionPage', [ State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage), State('displayPage', self.enterDisplayPage, self.exitDisplayPage) ], 'off', 'off') self.fsm.enterInitialState() self.parentFSM.getStateNamed('optionPage').addChild(self.fsm)
def __init__(self, book, parentFSM): self.book = book self.parentFSM = parentFSM StateData.__init__(self, 'namePageDone') self.fsm = ClassicFSM('NamePage', [ State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage) ], 'off', 'off') self.fsm.enterInitialState() self.parentFSM.getStateNamed('namePage').addChild(self.fsm) self.nameServ = base.cr.nameServicesManager self.baseRequestIndex = 0 self.requestsPerCluster = 5 # GUI elements self.requestsContainer = {} self.loadingLabel = None self.selectedName = None self.nameButtons = [] self.avId2NameData = {} geom = CIGlobals.getDefaultBtnGeom() self.acceptBtn = DirectButton( geom=geom, text_scale=0.04, relief=None, scale=0.5, text="Accept", pos=(0.5, posY, 0), text_pos=(0, -0.01), command=self.acceptName, ) self.acceptBtn.hide() self.declineBtn = DirectButton( geom=geom, text_scale=0.04, relief=None, scale=0.5, text="Decline", pos=(0.75, posY, 0), text_pos=(0, -0.01), command=self.declineName, ) self.declineBtn.hide() self.avIdLbl = OnscreenText(text="", scale=0.08, pos=(0.3, 0, 0.5), align=TextNode.ACenter) self.avIdLbl.hide() self.accIdLbl = OnscreenText(text="", scale=0.08, pos=(0.3, 0, 0.3), align=TextNode.ACenter) self.accIdLbl.hide()
def __init__(self, cr): DistributedObject.__init__(self, cr) self.fsm = ClassicFSM(self.__class__.__name__, [ State('off', self.enterOff, self.exitOff, ['morning']), State('morning', self.enterMorning, self.exitMorning, ['afternoon']), State('afternoon', self.enterAfternoon, self.exitAfternoon, ['evening']), State('evening', self.enterEvening, self.exitEvening, ['midnight']), State('midnight', self.enterMidnight, self.exitMidnight, ['morning'])], 'off', 'off') self.fsm.enterInitialState() self.__interval = None
def __init__(self, parentFSM): StateData.__init__(self, "avChooseDone") self.avChooseFSM = ClassicFSM('avChoose', [State('getToonData', self.enterGetToonData, self.exitGetToonData), State('avChoose', self.enterAvChoose, self.exitAvChoose), State('waitForToonDelResponse', self.enterWaitForToonDelResponse, self.exitWaitForToonDelResponse), State('off', self.enterOff, self.exitOff)], 'off', 'off') self.avChooseFSM.enterInitialState() self.parentFSM = parentFSM self.parentFSM.getStateNamed('avChoose').addChild(self.avChooseFSM) self.pickAToon = None self.setAvatarsNone()
def __init__(self): DirectObject.__init__(self) self.backpack = base.localAvatar.backpack if not self.backpack: return self.backpack.loadoutGUI = self self.oneSlotPos = [(0, 0, 0)] self.twoSlotsPos = [(0, 0, 0.30), (0, 0, -0.2)] self.threeSlotsPos = [(0, 0, 0.5), (0, 0, 0), (0, 0, -0.5)] self.fourSlotPos = [(0, 0, 0.5), (0, 0, 0.15), (0, 0, -0.2), (0, 0, -0.55)] self.availableSlot = 0 self.slots = [] self.activeSlot = None self.defaultSlots = 3 self.prevSlot = None self.ammoLabel = None self.inventoryFrame = DirectFrame(parent=base.a2dRightCenter, pos=(-0.1725, 0, 0)) self.visibilityBtn = DirectButton(text="", relief=None, text_bg=(1, 1, 1, 0), parent=base.a2dRightCenter, pos=(-0.1725, 0, 0), frameSize=(-0.2, 0.2, -0.725, 0.7), clickSound=None, rolloverSound=None) self.visibilityBtn.bind(DGG.WITHIN, self.__handleVisEnter) self.visibilityBtn.bind(DGG.WITHOUT, self.__handleVisExit) self.visibilityBtn.setBin('background', 10) self.visibilityBtn = None self.visibilityBtnStatus = 0 self.switchSound = True self.switchSoundSfx = base.loadSfx( "phase_3/audio/sfx/GUI_balloon_popup.ogg") self.visibilityFSM = ClassicFSM('InventoryGui-VisibilityFSM', [ State('off', self.enterOff, self.exitOff), State('hidden', self.enterHidden, self.exitHidden), State('hidden2visible', self.enterHidden2Visible, self.exitHidden2Visible), State('visible', self.enterVisible, self.exitVisible), State('visible2hidden', self.enterVisible2Hidden, self.exitVisible2Hidden) ], 'off', 'off') self.visibilityFSM.enterInitialState() self.visibilityFSM.request('hidden')
def __init__(self, cr): try: self.DistributedMinigame_initialized return except: self.DistributedMinigame_initialized = 1 DistributedObject.DistributedObject.__init__(self, cr) Timer.Timer.__init__(self) self.headPanels = HeadPanels() self.finalScoreUI = FinalScoreGUI() self.fsm = ClassicFSM('DistributedMinigame', [ State('start', self.enterStart, self.exitStart, ['waitForOthers']), State('waitForOthers', self.enterWaitForOthers, self.exitWaitForOthers, ['play']), State('play', self.enterPlay, self.exitPlay, ['gameOver']), State('gameOver', self.enterGameOver, self.exitGameOver, ['off']), State('off', self.enterOff, self.exitOff) ], 'off', 'off') self.fsm.enterInitialState() self.cr = cr self.localAv = base.localAvatar self.localAvId = self.localAv.doId self.musicPath = "phase_4/audio/bgm/trolley_song.ogg" self.winSfx = base.loadSfx("phase_4/audio/sfx/MG_win.ogg") self.loseSfx = base.loadSfx("phase_4/audio/sfx/MG_lose.ogg") self.prizeHigh = base.loadSfx("phase_6/audio/sfx/KART_Applause_1.ogg") self.prizeLow = base.loadSfx("phase_6/audio/sfx/KART_Applause_4.ogg") self.music = None self.description = "" self.descDialog = None self.winnerPrize = 0 self.loserPrize = 0 self.round = 0 self.numPlayers = 0 self.winnerMsg = "Winner!\nYou have earned: %s Jellybeans" self.loserMsg = "Loser!\nYou have earned: %s Jellybeans" self.allWinnerMsgs = [ "Nice try!\nYou have earned: %s", "Good job!\nYou have earned: %s", "Way to go!\nYou have earned: %s", "Awesome!\nYou have earned: %s" ] self.timer = None self.timeLbl = None self.alertText = None self.alertPulse = None self.popupSound = None self.gameOverLbl = OnscreenText(text="TIME'S\nUP!", scale=0.25, font=CIGlobals.getMickeyFont(), fg=(1, 0, 0, 1)) self.gameOverLbl.setBin('gui-popup', 60) self.gameOverLbl.hide() return
def __init__(self, mg, cr, avId, gunName="pistol"): RemoteAvatar.__init__(self, mg, cr, avId) self.track = None self.gunName = gunName self.fsm = ClassicFSM('RemoteToonBattleAvatar', [ State('off', self.enterOff, self.exitOff), State('shoot', self.enterShoot, self.exitShoot), State('die', self.enterDie, self.exitDie), State('dead', self.enterDead, self.exitDead) ], 'off', 'off') self.fsm.enterInitialState() self.soundGrunt = None self.retrieveAvatar()
def __init__(self): try: self.Suit_initialized return except: self.Suit_initialized = 1 Avatar.Avatar.__init__(self) self.avatarType = CIGlobals.Suit self.name = '' self.chat = '' self.suit = None self.suitHeads = None self.suitHead = None self.loserSuit = None self.healthMeterGlow = None self.healthMeter = None self.weapon = None self.weapon_sfx = None self.anim = None self.suit_dial = None self.shadow = None self.balloon_sfx = None self.add_sfx = None self.explosion = None self.largeExp = None self.smallExp = None self.death_sfx = None self.attack = None self.wtrajectory = None self.throwObjectId = None self.hasSpawned = False self.condition = 0 self.type = "" self.head = "" self.team = "" self.isSkele = 0 self.animFSM = ClassicFSM('Suit', [State('off', self.enterOff, self.exitOff), State('neutral', self.enterNeutral, self.exitNeutral), State('walk', self.enterWalk, self.exitWalk), State('die', self.enterDie, self.exitDie), State('attack', self.enterAttack, self.exitAttack), State('flydown', self.enterFlyDown, self.exitFlyDown), State('pie', self.enterPie, self.exitPie), State('win', self.enterWin, self.exitWin), State('flyaway', self.enterFlyAway, self.exitFlyAway), State('rollodex', self.enterRollodex, self.exitRollodex)], 'off', 'off') animStateList = self.animFSM.getStates() self.animFSM.enterInitialState() self.initializeBodyCollisions()
def __init__(self, cr): try: self.DistributedRaceGame_initialized return except: self.DistributedRaceGame_initialized = 1 DistributedMinigame.DistributedMinigame.__init__(self, cr) self.movement = RaceGameMovement.RaceGameMovement(base.localAvatar) self.skyUtil = SkyUtil() self.raceFSM = ClassicFSM('DistributedRaceGame', [State('race', self.enterRace, self.exitRace), State('raceTransition', self.enterRaceTransition, self.exitRaceTransition), State('off', self.enterRaceOff, self.exitRaceOff)], 'off', 'off') self.raceFSM.enterInitialState() self.cr = cr self.track = None self.sky = None self.countSfx = base.loadSfx('phase_5/audio/sfx/firehydrant_popup.mp3') self.goSfx = base.loadSfx('phase_4/audio/sfx/AA_sound_whistle.mp3') self.game = CIGlobals.RaceGame self.trackPath = 'phase_4/models/minigames/sprint_track.egg' self.skyPath = 'phase_3.5/models/props/TT_sky.bam' self.lanePos = [(-22.0, -205.0, 0.0), (-11.66, -205.0, 0.0), (0.0, -205.0, 0.0), (-33.66, -205.0, 0.0)] self.initialCamPos = {'pos': (41.1, -145.0, 25.88), 'hpr': (135.0, 345.96, 0.0)} self.raceCamPos = (-24.52, -37.22, 25.0) self.lane = 0 return
def __init__(self, book, parentFSM): self.book = book self.parentFSM = parentFSM StateData.__init__(self, 'optionPageDone') self.fsm = ClassicFSM('OptionPage', [State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage), State('displayPage', self.enterDisplayPage, self.exitDisplayPage)], 'off', 'off') self.fsm.enterInitialState() self.parentFSM.getStateNamed('optionPage').addChild(self.fsm)
def __init__(self, loader, parentFSM, doneEvent): Place.Place.__init__(self, loader, doneEvent) self.fsm = ClassicFSM('Playground', [State('start', self.enterStart, self.exitStart, ['walk', 'teleportIn', 'tunnelOut', 'doorOut']), State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, ['walk', 'acknowledgeDeath']), State('walk', self.enterWalk, self.exitWalk, ['teleportOut', 'stop', 'shtickerBook', 'died', 'tunnelIn']), State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, ['teleportIn', 'stop']), State('stop', self.enterStop, self.exitStop, ['walk', 'died', 'station', 'teleportOut', 'doorIn']), State('shtickerBook', self.enterShtickerBook, self.exitShtickerBook, ['teleportOut', 'walk']), State('tunnelOut', self.enterTunnelOut, self.exitTeleportOut, ['walk']), State('final', self.enterFinal, self.exitFinal, ['start']), State('died', self.enterDied, self.exitDied, ['final']), State('station', self.enterStation, self.exitStation, ['teleportOut', 'walk']), State('doorIn', self.enterDoorIn, self.exitDoorIn, ['stop']), State('doorOut', self.enterDoorOut, self.exitDoorOut, ['walk']), State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, ['stop']), State('acknowledgeDeath', self.enterAcknowledgeDeath, self.exitAcknowledgeDeath, ['walk'])], 'start', 'final') self.parentFSM = parentFSM
def __init__(self, suit): self.suit = suit self.panicHP = self.suit.getMaxHealth() * self.PANIC_HP_FACTOR self.fsm = ClassicFSM('CogBrain', [State('off', self.enterOff, self.exitOff), State('neutral', self.enterNeutral, self.exitNeutral), State('followBoss', self.enterFollowBoss, self.exitFollowBoss), State('panic', self.enterPanic, self.exitPanic), State('runAway', self.enterRunAway, self.exitRunAway)], 'off', 'off') self.fsm.enterInitialState()
class ToonInterior(Place.Place): notify = directNotify.newCategory('ToonInterior') def __init__(self, hood, parentFSM, doneEvent): self.parentFSM = parentFSM Place.Place.__init__(self, hood, doneEvent) self.fsm = ClassicFSM('ToonInterior', [State('start', self.enterStart, self.exitStart, ['doorOut', 'teleportIn']), State('walk', self.enterWalk, self.exitWalk, ['stop', 'doorIn', 'shtickerBook', 'teleportOut']), State('shtickerBook', self.enterShtickerBook, self.exitShtickerBook, ['teleportOut', 'walk']), State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, ['teleportIn', 'stop']), State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, ['walk', 'stop']), State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, ['walk']), State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, ['stop']), State('stop', self.enterStop, self.exitStop, ['walk', 'died', 'teleportOut', 'doorIn']), State('doorIn', self.enterDoorIn, self.exitDoorIn, ['stop']), State('doorOut', self.enterDoorOut, self.exitDoorOut, ['walk']), State('final', self.enterFinal, self.exitFinal, ['final'])], 'start', 'final') def enter(self, requestStatus): Place.Place.enter(self) self.fsm.enterInitialState() base.playMusic(self.loader.interiorMusic, volume=0.8, looping=1) self.fsm.request(requestStatus['how'], [requestStatus]) def exit(self): self.loader.interiorMusic.stop() Place.Place.exit(self) def load(self): Place.Place.load(self) self.parentFSM.getStateNamed('toonInterior').addChild(self.fsm) def unload(self): self.parentFSM.getStateNamed('toonInterior').removeChild(self.fsm) del self.fsm del self.parentFSM self.ignoreAll() Place.Place.unload(self)
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId): Hood.Hood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId) self.safeZoneLoader = None self.townLoader = None self.fsm = ClassicFSM('Hood', [State('off', self.enterOff, self.exitOff), State('safeZoneLoader', self.enterSafeZoneLoader, self.exitSafeZoneLoader, ['quietZone', 'townLoader']), State('townLoader', self.enterTownLoader, self.exitTownLoader, ['quietZone', 'safeZoneLoader']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['safeZoneLoader', 'townLoader'])], 'off', 'off') self.fsm.enterInitialState() return
def __init__(self, avatar): DirectObject.__init__(self) self.avatar = avatar self.power = self.MINIMUM_POWER self.boost = 0.0 self.fsm = ClassicFSM('RaceGameMovement', [State('off', self.enterOff, self.exitOff, ['run']), State('run', self.enterRun, self.exitRun, ['fall', 'off']), State('fall', self.enterFall, self.exitFall, ['run', 'off']), State('final', self.enterFinal, self.exitFinal)], 'off', 'final') self.fsm.enterInitialState() self.boostFSM = ClassicFSM('Boost', [State('off', self.enterBoostOff, self.exitBoostOff, ['boost']), State('boost', self.enterBoost, self.exitBoost)], 'off', 'off') self.boostFSM.enterInitialState() self.keysPressed = {'arrow_left': 0, 'arrow_right': 0} self.startTime = 0.0 self.endTime = 0.0 self.fallTrack = None self.isStopped = True self.isBoosting = False return
def __init__(self, mg, cr, avId, gunName = 'pistol'): RemoteAvatar.__init__(self, mg, cr, avId) self.track = None self.gunName = gunName self.fsm = ClassicFSM('RemoteToonBattleAvatar', [State('off', self.enterOff, self.exitOff), State('shoot', self.enterShoot, self.exitShoot), State('die', self.enterDie, self.exitDie), State('dead', self.enterDead, self.exitDead)], 'off', 'off') self.fsm.enterInitialState() self.soundGrunt = None self.retrieveAvatar() return
def __init__(self, parentFSM): StateData.__init__(self, 'avChooseDone') self.avChooseFSM = ClassicFSM('avChoose', [State('getToonData', self.enterGetToonData, self.exitGetToonData), State('avChoose', self.enterAvChoose, self.exitAvChoose), State('waitForToonDelResponse', self.enterWaitForToonDelResponse, self.exitWaitForToonDelResponse), State('off', self.enterOff, self.exitOff)], 'off', 'off') self.avChooseFSM.enterInitialState() self.parentFSM = parentFSM self.parentFSM.getStateNamed('avChoose').addChild(self.avChooseFSM) self.pickAToon = None self.setAvatarsNone() return
def __init__(self, hood, parentFSMState, doneEvent): self.hood = hood self.parentFSMState = parentFSMState StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('TownLoader', [State('start', self.enterStart, self.exitStart, ['quietZone', 'street']), State('street', self.enterStreet, self.exitStreet, ['quietZone']), State('toonInterior', self.enterToonInterior, self.exitToonInterior, ['quietZone']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['street', 'toonInterior']), State('final', self.enterFinal, self.exitFinal, ['start'])], 'start', 'final') self.branchZone = None self.canonicalBranchZone = None self.placeDoneEvent = 'placeDone' self.linkTunnels = [] return
def __init__(self, mg, weaponName = 'pistol'): self.mg = mg self.weaponName = weaponName self.v_model_root = None self.v_model = None self.weapon = None self.track = None self.draw = None self.shoot = None self.reload = None self.empty = None self.cockBack = None self.cockFwd = None self.player_node = None self.shooterTrav = None self.shooterRay = None self.shooterRayNode = None self.shooterHandler = None self.gui = ToonFPSGui(self) self.fsm = ClassicFSM('ToonFPS', [State('off', self.enterOff, self.exitOff), State('alive', self.enterAlive, self.exitAlive), State('dead', self.enterDead, self.exitDead)], 'off', 'off') self.aliveFSM = ClassicFSM('alive', [State('off', self.enterOff, self.exitOff), State('draw', self.enterDraw, self.exitDraw, ['idle']), State('idle', self.enterIdle, self.exitIdle, ['shoot', 'reload']), State('shoot', self.enterShoot, self.exitShoot, ['idle']), State('reload', self.enterReload, self.exitReload, ['idle'])], 'off', 'off') self.fsm.getStateNamed('alive').addChild(self.aliveFSM) self.fsm.enterInitialState() self.aliveFSM.enterInitialState() if self.weaponName == 'pistol': self.ammo = 14 elif self.weaponName == 'shotgun': self.ammo = 7 self.hp = 125 self.max_hp = 125 self.firstPerson = FirstPerson() return
def __init__(self, parentFSM, doneEvent): self.parentFSM = parentFSM StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('ShtickerBook', [State('off', self.enterOff, self.exitOff), State('optionPage', self.enterOptionPage, self.exitOptionPage, ['districtPage', 'off']), State('districtPage', self.enterDistrictPage, self.exitDistrictPage, ['optionPage', 'questPage', 'off']), State('questPage', self.enterQuestPage, self.exitQuestPage, ['inventoryPage', 'districtPage', 'off']), State('inventoryPage', self.enterInventoryPage, self.exitInventoryPage, ['mapPage', 'questPage', 'off']), State('mapPage', self.enterMapPage, self.exitMapPage, ['releaseNotesPage', 'inventoryPage', 'off']), State('releaseNotesPage', self.enterReleaseNotesPage, self.exitReleaseNotesPage, ['mapPage', 'off']), State('adminPage', self.enterAdminPage, self.exitAdminPage, ['releaseNotesPage', 'off'])], 'off', 'off') if base.localAvatar.getAdminToken() > -1: self.fsm.getStateNamed('releaseNotesPage').addTransition('adminPage') self.fsm.enterInitialState() self.entered = 0 self.parentFSM.getStateNamed('shtickerBook').addChild(self.fsm)
def __init__(self, playground): self.playground = playground self.fsm = ClassicFSM('BRWater', [State('off', self.enterOff, self.exitOff), State('freezeUp', self.enterFreezeUp, self.exitFreezeUp), State('coolDown', self.enterCoolDown, self.exitCoolDown), State('frozen', self.enterFrozen, self.exitFrozen)], 'off', 'off') self.fsm.enterInitialState() self.freezeUpSfx = base.loadSfx('phase_8/audio/sfx/freeze_up.mp3') self.frozenSfxArray = [base.loadSfx('phase_8/audio/sfx/frozen_1.mp3'), base.loadSfx('phase_8/audio/sfx/frozen_2.mp3'), base.loadSfx('phase_8/audio/sfx/frozen_3.mp3')] self.coolSfxArray = [base.loadSfx('phase_8/audio/sfx/cool_down_1.mp3'), base.loadSfx('phase_8/audio/sfx/cool_down_2.mp3')] self.freezeUpSfx.setVolume(12) for sfx in self.frozenSfxArray: sfx.setVolume(12) for sfx in self.coolSfxArray: sfx.setVolume(12)
def __init__(self, other = None): Biped.Biped.__init__(self, other, HumanAnimationMixer) self.model = None self.useFaceTex = True self.joints = { } self.jointTrans = { } self.jointTrans2 = { } self.zombie = False self.crazyColorSkin = False self.crazyColorSkinIndex = 0 self.flattenPending = None self.optimizeLOD = base.config.GetBool('optimize-avatar-lod', 1) self.master = 0 self.loaded = 0 self.playingRate = None self.shadowFileName = 'models/misc/drop_shadow' self.setFont(PiratesGlobals.getInterfaceFont()) self._MasterHuman__blinkName = 'blink-' + str(self.this) self.eyeLids = None self.eyeBalls = None self.eyeIris = None self.reducedAnimList = None self.rootScale = 1.0 self.headNode = None self.extraNode = None self.scaleNode = None self.rootNode = None self.floorOffsetZ = 0.0 self.headFudgeHpr = Vec3(0, 0, 0) self.frozeSomething = True self.randGen = random.Random() self.randGen.seed(random.random()) self.eyeFSM = ClassicFSM('eyeFSM', [ State('off', self.enterEyeFSMOff, self.exitEyeFSMOff, [ 'open', 'closed']), State('open', self.enterEyeFSMOpen, self.exitEyeFSMOpen, [ 'closed', 'off']), State('closed', self.enterEyeFSMClosed, self.exitEyeFSMClosed, [ 'open', 'off'])], 'off', 'off') self.eyeFSM.enterInitialState() if other != None: self.copyHuman(other) self.isPaid = False
def __init__(self, mg): self.mg = mg self.cameraFocus = None self.batteryFrame = None self.batteryBg = None self.batteryBar = None self.rechargeSound = None self.fullyChargedSound = None self.hasToonInFocus = False self.toonToTakePicOf = None self.cameraRechargeState = None self.cameraRechargingLabel = None self.cameraFlashSeq = None self.camFSM = ClassicFSM('CameraFSM', [State('off', self.enterOff, self.exitOff), State('ready', self.enterCameraReady, self.exitCameraReady), State('recharge', self.enterCameraRecharge, self.exitCameraRecharge)], 'off', 'off') self.camFSM.enterInitialState() FirstPerson.__init__(self) return
def __init__(self): try: self.ToonHead_initialized except: self.ToonHead_initialized = 1 Actor.Actor.__init__(self) self.toonName = 'ToonHead-' + str(self.this) self.__blinkName = 'blink-' + self.toonName self.__stareAtName = 'stareAt-' + self.toonName self.__lookName = 'look-' + self.toonName self.lookAtTrack = None self.__eyes = None self.__eyelashOpen = None self.__eyelashClosed = None self.__lod500Eyes = None self.__lod250Eyes = None self.__lpupil = None self.__lod500lPupil = None self.__lod250lPupil = None self.__rpupil = None self.__lod500rPupil = None self.__lod250rPupil = None self.__muzzle = None self.__eyesOpen = ToonHead.EyesOpen self.__eyesClosed = ToonHead.EyesClosed self.__height = 0.0 self.__eyelashesHiddenByGlasses = False self.randGen = random.Random() self.randGen.seed(random.random()) self.eyelids = ClassicFSM('eyelids', [ State('off', self.enterEyelidsOff, self.exitEyelidsOff, ['open', 'closed', 'surprised']), State('open', self.enterEyelidsOpen, self.exitEyelidsOpen, ['closed', 'surprised', 'off']), State('surprised', self.enterEyelidsSurprised, self.exitEyelidsSurprised, ['open', 'closed', 'off']), State('closed', self.enterEyelidsClosed, self.exitEyelidsClosed, ['open', 'surprised', 'off']) ], 'off', 'off') self.eyelids.enterInitialState() self.emote = None self.__stareAtNode = NodePath() self.__defaultStarePoint = Point3(0, 0, 0) self.__stareAtPoint = self.__defaultStarePoint self.__stareAtTime = 0 self.lookAtPositionCallbackArgs = None
def __init__(self, cr): DistributedObject.__init__(self, cr) self.fsm = ClassicFSM('DistributedBoat', [State('off', self.enterOff, self.exitOff), State('eastToWest', self.enterEastToWest, self.exitEastToWest), State('westToEast', self.enterWestToEast, self.exitWestToEast)], 'off', 'off') self.boat = None self.eastPier = None self.eastPierPath = 'east_pier' self.westPier = None self.westPierPath = 'west_pier' self.pierUpP = 0.0 self.pierDownP = -45.0 self.fogHorn = 'phase_5/audio/sfx/SZ_DD_foghorn.mp3' self.shipBell = 'phase_6/audio/sfx/SZ_DD_shipbell.mp3' self.waterLap = 'phase_6/audio/sfx/SZ_DD_waterlap.mp3' self.dockCreak = 'phase_6/audio/sfx/SZ_DD_dockcreak.mp3' self.eastWest = 'phase_6/paths/dd-e-w.bam' self.westEast = 'phase_6/paths/dd-w-e.bam' self.boatPath = '*donalds_boat*' self.track = None self.state = None return
def __init__(self, hood, parentFSMState, doneEvent): StateData.__init__(self, doneEvent) self.hood = hood self.parentFSMState = parentFSMState self.fsm = ClassicFSM('safeZoneLoader', [State('off', self.enterOff, self.exitOff), State('playground', self.enterPlayground, self.exitPlayground, ['quietZone']), State('toonInterior', self.enterToonInterior, self.exitToonInterior, ['quietZone']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['playground', 'toonInterior'])], 'off', 'off') self.placeDoneEvent = 'placeDone' self.place = None self.playground = None self.battleMusic = None self.invasionMusic = None self.invasionMusicFiles = None self.interiorMusic = None self.bossBattleMusic = None self.music = None self.tournamentMusic = None self.linkTunnels = [] return
def __init__(self, hood, parentFSM, doneEvent): self.parentFSM = parentFSM Place.Place.__init__(self, hood, doneEvent) self.fsm = ClassicFSM('ToonInterior', [State('start', self.enterStart, self.exitStart, ['doorOut', 'teleportIn']), State('walk', self.enterWalk, self.exitWalk, ['stop', 'doorIn', 'shtickerBook', 'teleportOut']), State('shtickerBook', self.enterShtickerBook, self.exitShtickerBook, ['teleportOut', 'walk']), State('teleportOut', self.enterTeleportOut, self.exitTeleportOut, ['teleportIn', 'stop']), State('teleportIn', self.enterTeleportIn, self.exitTeleportIn, ['walk', 'stop']), State('tunnelOut', self.enterTunnelOut, self.exitTunnelOut, ['walk']), State('tunnelIn', self.enterTunnelIn, self.exitTunnelIn, ['stop']), State('stop', self.enterStop, self.exitStop, ['walk', 'died', 'teleportOut', 'doorIn']), State('doorIn', self.enterDoorIn, self.exitDoorIn, ['stop']), State('doorOut', self.enterDoorOut, self.exitDoorOut, ['walk']), State('final', self.enterFinal, self.exitFinal, ['final'])], 'start', 'final')
def __init__(self): self.toonMade = 0 self.slot = -1 self.currentShop = None self.currentHead = 0 self.currentTorso = 0 self.currentLeg = 0 self.currentShirt = 0 self.currentShorts = 0 self.shirt1Path = 'phase_3/maps/desat_shirt_1.jpg' self.shirt2Path = 'phase_3/maps/desat_shirt_2.jpg' self.sleeve1Path = 'phase_3/maps/desat_sleeve_1.jpg' self.sleeve2Path = 'phase_3/maps/desat_sleeve_2.jpg' self.skirt1Path = 'phase_3/maps/desat_skirt_1.jpg' self.short1Path = 'phase_3/maps/desat_shorts_1.jpg' self.short2Path = 'phase_3/maps/desat_shorts_2.jpg' self.currentShirtTex = self.shirt1Path self.currentSleeveTex = self.sleeve1Path self.currentShortTex = self.short1Path self.toonName = None self.matFSM = ClassicFSM('MakeAToon', [State('off', self.enterOff, self.exitOff), State('genderShop', self.enterGenderShop, self.exitGenderShop, ['exit', 'off', 'bodyShop']), State('bodyShop', self.enterBodyShop, self.exitBodyShop, ['exit', 'off', 'genderShop', 'colorShop']), State('colorShop', self.enterColorShop, self.exitColorShop, ['exit', 'off', 'bodyShop', 'clothShop']), State('clothShop', self.enterClothShop, self.exitClothShop, ['exit', 'off', 'colorShop', 'nameShop']), State('nameShop', self.enterNameShop, self.exitNameShop, ['exit', 'off', 'clothShop', 'done']), State('exit', self.enterExit, self.exitExit)], 'off', 'off') self.matFSM.enterInitialState() return
def __init__(self, other=None): Biped.Biped.__init__(self, other, HumanAnimationMixer) self.zombie = False self.crazyColorSkin = False self.crazyColorSkinIndex = 0 self.flattenPending = None self.flattenSuperLowName = None self.optimizeLOD = base.config.GetBool("optimize-avatar-lod", 1) self.loaded = 0 self.playingRate = None self.shadowFileName = "models/misc/drop_shadow" self.setFont(PiratesGlobals.getInterfaceFont()) self._Human__blinkName = "blink-" + str(self.this) self.eyeLids = None self.eyeBalls = None self.eyeIris = None self.reducedAnimList = None self.headNode = None self.headEffects = NodePath("headEffects") self.extraNode = None self.scaleNode = None self.rootNode = None self.floorOffsetZ = 0.0 self.isGhost = 0 self.headFudgeHpr = Vec3(0, 0, 0) self.randGen = random.Random() self.randGen.seed(random.random()) self.eyeFSM = ClassicFSM( "eyeFSM", [ State("off", self.enterEyeFSMOff, self.exitEyeFSMOff, ["open", "closed"]), State("open", self.enterEyeFSMOpen, self.exitEyeFSMOpen, ["closed", "off"]), State("closed", self.enterEyeFSMClosed, self.exitEyeFSMClosed, ["open", "off"]), ], "off", "off", ) self.eyeFSM.enterInitialState() if other != None: self.copyHuman(other)
def __init__(self, cr): try: self.DistributedMinigame_initialized return except: self.DistributedMinigame_initialized = 1 DistributedObject.DistributedObject.__init__(self, cr) Timer.Timer.__init__(self) self.headPanels = HeadPanels() self.finalScoreUI = FinalScoreGUI() self.fsm = ClassicFSM('DistributedMinigame', [State('start', self.enterStart, self.exitStart, ['waitForOthers']), State('waitForOthers', self.enterWaitForOthers, self.exitWaitForOthers, ['play']), State('play', self.enterPlay, self.exitPlay, ['gameOver']), State('gameOver', self.enterGameOver, self.exitGameOver, ['off']), State('off', self.enterOff, self.exitOff)], 'off', 'off') self.fsm.enterInitialState() self.cr = cr self.localAv = base.localAvatar self.localAvId = self.localAv.doId self.musicPath = 'phase_4/audio/bgm/trolley_song.mid' self.winSfx = base.loadSfx('phase_4/audio/sfx/MG_win.mp3') self.loseSfx = base.loadSfx('phase_4/audio/sfx/MG_lose.mp3') self.prizeHigh = base.loadSfx('phase_6/audio/sfx/KART_Applause_1.mp3') self.prizeLow = base.loadSfx('phase_6/audio/sfx/KART_Applause_4.mp3') self.music = None self.description = '' self.descDialog = None self.winnerPrize = 0 self.loserPrize = 0 self.winnerMsg = 'Winner!\nYou have earned: %s' self.loserMsg = 'Loser!\nYou have earned: %s' self.allWinnerMsgs = ['Nice try!\nYou have earned: %s', 'Good job!\nYou have earned: %s', 'Way to go!\nYou have earned: %s', 'Awesome!\nYou have earned: %s'] self.timer = None self.timeLbl = None return
def __init__(self): try: self.Char_initialized return except: self.Char_initialized = 1 Avatar.Avatar.__init__(self) self.avatarType = CIGlobals.CChar self.avatarName = None self.currentAnim = None self.charType = '' self.eyes = loader.loadTexture('phase_3/maps/eyes1.jpg', 'phase_3/maps/eyes1_a.rgb') self.closedEyes = loader.loadTexture('phase_3/maps/mickey_eyes_closed.jpg', 'phase_3/maps/mickey_eyes_closed_a.rgb') self.animFSM = ClassicFSM('Char', [State('off', self.enterOff, self.exitOff), State('neutral', self.enterNeutral, self.exitNeutral), State('walk', self.enterWalk, self.exitWalk), State('run', self.enterRun, self.exitRun)], 'off', 'off') animStateList = self.animFSM.getStates() self.animFSM.enterInitialState() Avatar.Avatar.initializeBodyCollisions(self, self.avatarType, 3.5, 1) return
def __init__(self, cr): DistributedNode.__init__(self, cr) self.fsm = ClassicFSM('DistributedCityCart', [State('off', self.enterOff, self.exitOff), State('pathFollow', self.enterPathFollow, self.exitPathFollow), State('collision', self.enterCollision, self.exitCollision)], 'off', 'off') self.fsm.enterInitialState() self.suitInCar = None self.cart = None self.honkSfxPath = 'phase_14/audio/sfx/cogtropolis_citycar_driveby_horn.mp3' self.cartModelPath = 'phase_12/models/bossbotHQ/Coggolf_cart3.bam' self.moPaths = ['phase_14/models/paths/ct-citycar-drivepath-1.egg', 'phase_14/models/paths/ct-citycar-drivepath-2.egg', 'phase_14/models/paths/ct-citycar-drivepath-3.egg', 'phase_14/models/paths/ct-citycar-drivepath-4.egg', 'phase_14/models/paths/ct-citycar-drivepath-5.egg', 'phase_14/models/paths/ct-citycar-drivepath-6.egg'] self.moPath = None self.soundEngineLoop = None self.soundDriveByHorn = None self.ivalTDisplace = None self.pathIndex = None self.wheelSpinTrack = None self.collNodePath = None self.soundDriveBy = None return
def __init__(self, cr): DistributedMinigame.__init__(self, cr) self.platformPositions = {0: (-5, 0.5, -0.5), 1: (-15, 0.5, -0.5), 2: (5, 0.5, -0.5), 3: (15, 0.5, -0.5)} self.fsm.addState(State('roundCountdown', self.enterRoundCountdown, self.exitRoundCountdown, ['play'])) self.fsm.addState(State('roundOver', self.enterRoundOver, self.exitRoundOver, ['finalScores', 'roundCountdown'])) self.fsm.addState(State('finalScores', self.enterFinalScores, self.exitFinalScores, ['gameOver'])) self.fsm.getStateNamed('waitForOthers').addTransition('roundCountdown') self.fsm.getStateNamed('play').addTransition('roundOver') self.fsm.getStateNamed('gameOver').addTransition('finalScores') self.cannonFSM = ClassicFSM('Cannon', [State('off', self.enterOff, self.exitOff), State('control', self.enterControlCannon, self.exitControlCannon), State('fly', self.enterFly, self.exitFly)], 'off', 'off') self.cannonFSM.enterInitialState() self.hitEagleSfx = None self.toonOof = None self.cannonMoveSfx = None self.fallSfx = None self.bgColor = (0.05, 0.05, 0.05) self.cannonId = None self.cannonBarrel = '**/cannon' self.fog = None self.platforms = [] self.round = 0 self.world = None self.worldModelPath = 'phase_5/models/cogdominium/tt_m_ara_cfg_quadrant2.bam' self.nodesToStash = ['lights', 'streamers', 'tt_m_ara_cfg_girders2b:Rwall_col', 'tt_m_ara_cfg_girders2b:Lwall_col'] self.triggers = ['tt_m_ara_cfg_clump2:col_clump2', 'tt_m_ara_cfg_clump4:col_clump4', 'tt_m_ara_cfg_clump5:col_clump5', 'tt_m_ara_cfg_clump6:col_clump6', 'tt_m_ara_cfg_clump7:col_clump7', 'tt_m_ara_cfg_base:ceiling_collision'] return
class ToonFPS(DirectObject): notify = directNotify.newCategory('ToonFPS') WeaponName2DamageData = {'pistol': (36.0, 10.0, 150.0, 0.25), 'shotgun': (40.0, 15.0, 155.0, 0.5)} def __init__(self, mg, weaponName = 'pistol'): self.mg = mg self.weaponName = weaponName self.v_model_root = None self.v_model = None self.weapon = None self.track = None self.draw = None self.shoot = None self.reload = None self.empty = None self.cockBack = None self.cockFwd = None self.player_node = None self.shooterTrav = None self.shooterRay = None self.shooterRayNode = None self.shooterHandler = None self.gui = ToonFPSGui(self) self.fsm = ClassicFSM('ToonFPS', [State('off', self.enterOff, self.exitOff), State('alive', self.enterAlive, self.exitAlive), State('dead', self.enterDead, self.exitDead)], 'off', 'off') self.aliveFSM = ClassicFSM('alive', [State('off', self.enterOff, self.exitOff), State('draw', self.enterDraw, self.exitDraw, ['idle']), State('idle', self.enterIdle, self.exitIdle, ['shoot', 'reload']), State('shoot', self.enterShoot, self.exitShoot, ['idle']), State('reload', self.enterReload, self.exitReload, ['idle'])], 'off', 'off') self.fsm.getStateNamed('alive').addChild(self.aliveFSM) self.fsm.enterInitialState() self.aliveFSM.enterInitialState() if self.weaponName == 'pistol': self.ammo = 14 elif self.weaponName == 'shotgun': self.ammo = 7 self.hp = 125 self.max_hp = 125 self.firstPerson = FirstPerson() return def movementTask(self, task): if not inputState.isSet('jump') and not base.localAvatar.walkControls.isAirborne and inputState.isSet('forward') or inputState.isSet('reverse') or inputState.isSet('slideLeft') or inputState.isSet('slideRight'): if base.localAvatar.getAnimState() != 'run': base.localAvatar.setAnimState('run') base.localAvatar.playMovementSfx('run') self.mg.sendUpdate('runningAvatar', [base.localAvatar.doId]) elif inputState.isSet('jump') or base.localAvatar.walkControls.isAirborne: if base.localAvatar.getAnimState() != 'jump': base.localAvatar.setAnimState('jump') base.localAvatar.playMovementSfx(None) self.mg.sendUpdate('jumpingAvatar', [base.localAvatar.doId]) elif base.localAvatar.getAnimState() != 'neutral': base.localAvatar.setAnimState('neutral') base.localAvatar.playMovementSfx(None) self.mg.sendUpdate('standingAvatar', [base.localAvatar.doId]) return Task.cont def enterAlive(self): if self.mg.fsm.getCurrentState().getName() not in ('gameOver', 'announceGameOver', 'finalScores'): base.localAvatar.disableChatInput() self.start() self.resetHp() self.resetAmmo() if self.mg.fsm.getCurrentState().getName() == 'play': self.reallyStart() def exitAlive(self): self.end() self.v_model.reparentTo(hidden) if self.mg.fsm.getCurrentState().getName() != 'play': self.reallyEnd() base.localAvatar.createChatInput() def updatePoints(self): self.points = self.kills - self.deaths def enterDead(self, killer): base.localAvatar.getGeomNode().show() self.gui.end() base.localAvatar.attachCamera() self.freezeCamSfx = base.loadSfx('phase_4/audio/sfx/freeze_cam.wav') self.freezeCamImage = None self.freezeCamImageFile = None base.camera.setZ(base.camera.getZ() + 2.0) taskMgr.add(self.cameraLookAtKillerTask, 'lookAtKiller', extraArgs=[killer], appendTask=True) taskMgr.doMethodLater(2.0, self.startZoomOnKiller, 'startFreezeCam', extraArgs=[killer], appendTask=True) return def startZoomOnKiller(self, killer, task): taskMgr.add(self.__zoomOnKillerTask, 'zoomOnKiller', extraArgs=[killer], appendTask=True) return task.done def __zoomOnKillerTask(self, killer, task): if base.camera.getDistance(killer) <= 10.0 and self.freezeCamSfx.status() == self.freezeCamSfx.READY: base.playSfx(self.freezeCamSfx) if base.camera.getDistance(killer) < 7.0: self.doFreezeCam() return task.done base.camera.setY(base.camera, 60 * globalClock.getDt()) return task.again def doFreezeCam(self): taskMgr.remove('lookAtKiller') self.frameBuffer = PNMImage() base.win.getScreenshot(self.frameBuffer) self.freezeCamTex = Texture() self.freezeCamTex.load(self.frameBuffer) self.freezeCamImage = OnscreenImage(image=self.freezeCamTex, parent=render2d) def cameraLookAtKillerTask(self, killer, task): base.camera.lookAt(killer, 0, 0, 3) return task.cont def exitDead(self): taskMgr.remove('zoomOnKiller') taskMgr.remove('lookAtKiller') taskMgr.remove('startFreezeCam') del self.freezeCamSfx if self.freezeCamImage: self.freezeCamImage.destroy() del self.freezeCamImage self.frameBuffer.clear() self.freezeCamTex.clear() del self.frameBuffer del self.freezeCamTex base.localAvatar.detachCamera() base.localAvatar.getGeomNode().hide() self.gui.start() def load(self): if self.weaponName == 'pistol': self.draw = base.loadSfx('phase_4/audio/sfx/draw_secondary.wav') self.shoot = base.loadSfx('phase_4/audio/sfx/pistol_shoot.wav') self.reload = base.loadSfx('phase_4/audio/sfx/pistol_worldreload.wav') elif self.weaponName == 'shotgun': self.draw = base.loadSfx('phase_4/audio/sfx/draw_primary.wav') self.shoot = base.loadSfx('phase_4/audio/sfx/shotgun_shoot.wav') self.cockBack = base.loadSfx('phase_4/audio/sfx/shotgun_cock_back.wav') self.cockFwd = base.loadSfx('phase_4/audio/sfx/shotgun_cock_forward.wav') self.empty = base.loadSfx('phase_4/audio/sfx/shotgun_empty.wav') self.v_model_root = base.camera.attachNewNode('v_model_root') self.v_model = Actor('phase_4/models/minigames/v_dgm.egg', {'pidle': 'phase_4/models/minigames/v_dgm-pistol-idle.egg', 'pshoot': 'phase_4/models/minigames/v_dgm-pistol-shoot.egg', 'preload': 'phase_4/models/minigames/v_dgm-pistol-reload.egg', 'pdraw': 'phase_4/models/minigames/v_dgm-pistol-draw.egg', 'sidle': 'phase_4/models/minigames/v_dgm-shotgun-idle.egg', 'sshoot': 'phase_4/models/minigames/v_dgm-shotgun-shoot.egg'}) if self.weaponName == 'pistol': self.weapon = loader.loadModel('phase_4/models/props/water-gun.bam') self.weapon.reparentTo(self.v_model.exposeJoint(None, 'modelRoot', 'Bone.011')) self.weapon.setX(-0.125) self.weapon.setY(0.5) self.weapon.setScale(0.65) elif self.weaponName == 'shotgun': self.weapon = loader.loadModel('phase_4/models/props/shotgun.egg') self.weapon.reparentTo(self.v_model.exposeJoint(None, 'modelRoot', 'Bone.029')) self.weapon.setScale(0.75) self.weapon.setPos(0.45, -1.03, -1.17) self.weapon.setHpr(9.46, 308.19, 75.78) color = random.choice([VBase4(1, 0.25, 0.25, 1), VBase4(0.25, 1, 0.25, 1), VBase4(0.25, 0.25, 1, 1)]) self.weapon.setColorScale(color) self.gui.load() return def start(self): base.camLens.setNear(0.1) self.shooterTrav = CollisionTraverser('ToonFPS.shooterTrav') ray = CollisionRay() rayNode = CollisionNode('ToonFPS.rayNode') rayNode.addSolid(ray) rayNode.setCollideMask(BitMask32(0)) rayNode.setFromCollideMask(CIGlobals.WallBitmask | CIGlobals.FloorBitmask) self.shooterRay = ray self.shooterRayNode = base.camera.attachNewNode(rayNode) self.shooterHandler = CollisionHandlerQueue() self.shooterTrav.addCollider(self.shooterRayNode, self.shooterHandler) self.firstPerson.start() self.v_model_root.reparentTo(base.camera) self.v_model.reparentTo(self.v_model_root) if self.weaponName == 'pistol': self.v_model_root.setZ(-1.8) self.v_model_root.setY(0.3) self.v_model_root.setX(-0.1) self.v_model_root.setH(2) elif self.weaponName == 'shotgun': self.v_model_root.setPos(-0.42, -0.81, -1.7) self.v_model_root.setHpr(359, 352.87, 0.0) self.gui.start() self.firstPerson.disableMouse() self.aliveFSM.request('draw') def reallyStart(self): self.firstPerson.reallyStart() taskMgr.add(self.movementTask, 'toonBattleMovement') def end(self): self.aliveFSM.request('off') if self.firstPerson: self.firstPerson.enableMouse() self.firstPerson.end() taskMgr.remove('toonBattleMovement') if self.mg.fsm.getCurrentState().getName() != 'play': self.fsm.request('off') def reallyEnd(self): if self.shooterRayNode: self.shooterRayNode.removeNode() self.shooterRayNode = None self.shooterRay = None self.shooterTrav = None self.shooterHandler = None if self.firstPerson: self.firstPerson.reallyEnd() if self.v_model_root: self.v_model_root.reparentTo(hidden) if self.v_model: self.v_model.reparentTo(hidden) self.v_model.setPosHpr(0, 0, 0, 0, 0, 0) if self.gui: self.gui.end() base.camLens.setNear(1.0) return def cleanup(self): taskMgr.remove('lookAtKiller') taskMgr.remove('toonBattleMovement') if self.firstPerson: self.firstPerson.cleanup() self.firstPerson = None self.draw = None self.shoot = None self.reload = None self.empty = None self.ammo = None self.fsm = None self.aliveFSM = None self.player_node = None self.min_camerap = None self.max_camerap = None self.hp = None self.max_hp = None if self.v_model: self.v_model.cleanup() self.v_model = None if self.weapon: self.weapon.removeNode() self.weapon = None if self.weapon: self.v_model_root.removeNode() self.v_model_root = None if self.gui: self.gui.cleanup() return def damageTaken(self, amount, avId): if self.hp <= 0.0: killer = self.mg.cr.doId2do.get(avId, None) self.fsm.request('dead', [killer]) self.gui.adjustHpMeter() return def enterDraw(self): self.draw.play() if self.weaponName == 'pistol': self.track = ActorInterval(self.v_model, 'pdraw', playRate=1.6, name='drawTrack') elif self.weaponName == 'shotgun': self.v_model.pose('sidle', 15) self.track = LerpQuatInterval(self.v_model, duration=0.5, quat=(0, 0, 0), startHpr=(70, -50, 0), blendType='easeOut', name='drawTrack') self.track.setDoneEvent(self.track.getName()) self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request, ['idle']) self.track.start() def exitDraw(self): if self.track: self.ignore(self.track.getDoneEvent()) self.track.finish() self.track = None return def enterIdle(self): if self.weaponName == 'pistol': self.v_model.loop('pidle') elif self.weaponName == 'shotgun': self.track = Sequence(LerpQuatInterval(self.v_model, duration=2.0, quat=(0, 1, 0), startHpr=(0, 0, 0), blendType='easeInOut'), LerpQuatInterval(self.v_model, duration=2.0, quat=(0, 0, 0), startHpr=(0, 1, 0), blendType='easeInOut')) self.track.loop() self.accept('mouse1', self.requestShoot) if self.ammo <= 0: self.gui.notifyNoAmmo() if self.ammo < 14: self.accept('r', self.aliveFSM.request, ['reload']) def requestShoot(self): if self.mg.fsm.getCurrentState().getName() != 'play': return if self.ammo > 0: self.aliveFSM.request('shoot') else: self.empty.play() def exitIdle(self): self.v_model.stop() if self.track: self.track.finish() self.track = None self.ignore('mouse1') self.ignore('r') return def enterShoot(self): self.shoot.play() if self.weaponName == 'pistol': self.track = ActorInterval(self.v_model, 'pshoot', playRate=2, name='shootTrack') elif self.weaponName == 'shotgun': self.track = Parallel(Sequence(LerpQuatInterval(self.v_model, duration=0.05, quat=(0, 3, 0), startHpr=(0, 0, 0)), LerpQuatInterval(self.v_model, duration=0.1, quat=(0, 0, 0), startHpr=(0, 3, 0))), Sequence(LerpPosInterval(self.v_model, duration=0.05, pos=(0, -0.3, 0), startPos=(0, 0, 0)), LerpPosInterval(self.v_model, duration=0.1, pos=(0, 0, 0), startPos=(0, -0.3, 0)), Wait(0.1))) self.track.setDoneEvent('shootTrack') self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request, ['idle']) self.track.start() self.ammo -= 1 self.gui.adjustAmmoGui() self.mg.makeSmokeEffect(self.weapon.find('**/joint_nozzle').getPos(render)) self.traverse() def traverse(self): mpos = base.mouseWatcherNode.getMouse() self.shooterRay.setFromLens(base.camNode, mpos.getX(), mpos.getY()) self.shooterTrav.traverse(render) def calcDamage(self, avatar): dmgData = self.WeaponName2DamageData[self.weaponName] maxDamage = dmgData[0] minDistance = dmgData[1] maxDistance = dmgData[2] factor = dmgData[3] distance = base.localAvatar.getDistance(avatar) if distance < minDistance: distance = minDistance elif distance > maxDistance: distance = maxDistance damage = maxDamage - (distance - minDistance) * factor return damage def exitShoot(self): self.ignore('shootTrack') if self.track: self.track.finish() self.track = None return def enterReload(self): self.gui.deleteNoAmmoLabel() if self.weaponName == 'pistol': self.track = Parallel(Sequence(Wait(0.3), Func(self.reload.play), Func(self.resetAmmo)), ActorInterval(self.v_model, 'preload', playRate=1.5), name='reloadTrack') elif self.weaponName == 'shotgun': self.track = Sequence(Func(self.draw.play), LerpQuatInterval(self.v_model, duration=0.5, quat=(70, -50, 0), startHpr=(0, 0, 0), blendType='easeIn'), SoundInterval(self.cockBack), SoundInterval(self.cockFwd), Func(self.resetAmmo), Func(self.draw.play), LerpQuatInterval(self.v_model, duration=0.5, quat=(0, 0, 0), startHpr=(70, -50, 0), blendType='easeOut'), name='reloadTrack') self.track.setDoneEvent('reloadTrack') self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request, ['idle']) self.track.start() def exitReload(self): self.ignore('reloadTrack') if self.track: self.track.finish() self.track = None return def resetAmmo(self): if self.weaponName == 'pistol': self.ammo = 14 elif self.weaponName == 'shotgun': self.ammo = 7 self.gui.resetAmmo() def resetHp(self): self.hp = self.max_hp self.gui.adjustHpMeter() def enterOff(self): pass def exitOff(self): pass
class OptionPage(StateData): def __init__(self, book, parentFSM): self.book = book self.parentFSM = parentFSM StateData.__init__(self, 'optionPageDone') self.fsm = ClassicFSM('OptionPage', [State('off', self.enterOff, self.exitOff), State('basePage', self.enterBasePage, self.exitBasePage), State('displayPage', self.enterDisplayPage, self.exitDisplayPage)], 'off', 'off') self.fsm.enterInitialState() self.parentFSM.getStateNamed('optionPage').addChild(self.fsm) def enterOff(self): pass def exitOff(self): pass def load(self): StateData.load(self) def unload(self): StateData.unload(self) def enter(self): StateData.enter(self) self.fsm.request('basePage') def exit(self): self.fsm.request('off') StateData.exit(self) def openDisplayPage(self): self.fsm.request('displayPage') def enterDisplayPage(self): self.book.createPageButtons(False, False) self.book.setTitle('Display Options') dialog_gui = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui.bam') width, height, fs, music, sfx, tex_detail, model_detail, aa, af = SettingsManager().getSettings('settings.json') self.width = width self.height = height self.windowType = [fs] self.buttons = [DirectRadioButton(text='Windowed', variable=self.windowType, value=[False], scale=0.1, pos=(-0.45, 0.15, 0.15)), DirectRadioButton(text='Fullscreen', variable=self.windowType, value=[True], scale=0.1, pos=(-0.45, -0.15, -0.15))] for button in self.buttons: button.setOthers(self.buttons) self.resoLbl = DirectLabel(text='%sx%s' % (width, height), scale=0.08, relief=None, pos=(0.25, 0, 0)) self.resSlider = DirectSlider(range=(0, 200), pageSize=50, command=self.setResoText, scale=0.3, orientation=DGG.VERTICAL, pos=(0.6, 0, 0)) self.okBtn = DirectButton(text='OK', geom=CIGlobals.getOkayBtnGeom(), relief=None, pos=(-0.5, -0.5, -0.5), text_scale=0.05, text_pos=(0, -0.11), command=self.applyDisplaySettings) self.cancelBtn = DirectButton(text='Cancel', geom=CIGlobals.getCancelBtnGeom(), relief=None, pos=(-0.3, -0.5, -0.5), text_scale=0.05, text_pos=(0, -0.11), command=self.cancelDisplaySettings) if self.resoLbl['text'] == '640x480': self.resSlider['value'] = 0 elif self.resoLbl['text'] == '800x600': self.resSlider['value'] = 50 elif self.resoLbl['text'] == '1024x768': self.resSlider['value'] = 100 elif self.resoLbl['text'] == '1280x1024': self.resSlider['value'] = 150 elif self.resoLbl['text'] == '1600x1200': self.resSlider['value'] = 200 return def exitDisplayPage(self): for button in self.buttons: button.destroy() del button self.resoLbl.destroy() del self.resoLbl self.resSlider.destroy() del self.resSlider self.okBtn.destroy() del self.okBtn self.cancelBtn.destroy() del self.cancelBtn del self.width del self.height del self.windowType del self.buttons self.book.clearTitle() def changeSetting(self, setting, value): if setting == 'music': if value: value = False elif not value: value = True base.enableMusic(value) self.music_btn['extraArgs'] = ['music', value] if value: valueTxt = 'On' else: valueTxt = 'Off' self.music_lbl['text'] = str(valueTxt).capitalize() elif setting == 'sfx': if value: value = False elif not value: value = True base.enableSoundEffects(value) self.sfx_btn['extraArgs'] = ['sfx', value] if value: valueTxt = 'On' else: valueTxt = 'Off' self.sfx_lbl['text'] = str(valueTxt).capitalize() elif setting == 'model-detail': if value == 'high': value = 'low' elif value == 'medium': value = 'high' elif value == 'low': value = 'medium' self.moddet_lbl['text'] = value.capitalize() self.moddet_btn['extraArgs'] = ['model-detail', value] elif setting == 'texture-detail': if value == 'normal': value = 'low' loadPrcFileData('', 'compressed-textures 1') elif value == 'low': value = 'normal' loadPrcFileData('', 'compressed-textures 0') self.texdet_lbl['text'] = value.capitalize() self.texdet_btn['extraArgs'] = ['texture-detail', value] elif setting == 'aa': if value == 'on': value = 'off' render.clear_antialias() elif value == 'off': value = 'on' render.set_antialias(AntialiasAttrib.MAuto) self.aa_lbl['text'] = value.capitalize() self.aa_btn['extraArgs'] = ['aa', value] elif setting == 'af': if value == 'on': value = 'off' elif value == 'off': value = 'on' self.af_lbl['text'] = value.capitalize() self.af_btn['extraArgs'] = ['af', value] SettingsManager().writeSettingToFile(setting, value, 'settings.json') def setResoText(self): if self.resSlider['value'] == 200: self.width = 1600 self.height = 1200 elif 150 <= self.resSlider['value'] <= 199: self.width = 1280 self.height = 1024 elif 100 <= self.resSlider['value'] <= 149: self.width = 1024 self.height = 768 elif 50 <= self.resSlider['value'] <= 99: self.width = 800 self.height = 600 elif self.resSlider['value'] == 0: self.width = 640 self.height = 480 self.resoLbl['text'] = str(self.width) + 'x' + str(self.height) def applyDisplaySettings(self): SettingsManager().writeSettingToFile('resolution', (self.width, self.height), 'settings.json', apply=1) SettingsManager().writeSettingToFile('fullscreen', self.windowType, 'settings.json', apply=1) self.fsm.request('basePage') def cancelDisplaySettings(self): self.fsm.request('basePage') def enterBasePage(self): self.book.createPageButtons(None, 'districtPage') self.book.setTitle('Options') width, height, fs, music, sfx, tex_detail, model_detail, aa, af = SettingsManager().getSettings('settings.json') if music: musicTxt = 'On' else: musicTxt = 'Off' if sfx: sfxTxt = 'On' else: sfxTxt = 'Off' if fs: fsTxt = 'On' else: fsTxt = 'Off' self.music_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Music', scale=1, text_scale=0.055, command=self.changeSetting, extraArgs=['music', music], pos=(-0.45, 0.55, 0.55), text_pos=(0, -0.01)) self.music_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, 0.55, 0.52), text_align=TextNode.ACenter) self.music_lbl['text'] = str(musicTxt).capitalize() self.sfx_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='SFX', scale=1, text_scale=0.055, command=self.changeSetting, extraArgs=['sfx', sfx], pos=(-0.45, 0.45, 0.45), text_pos=(0, -0.01)) self.sfx_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, 0.45, 0.42), text_align=TextNode.ACenter) self.sfx_lbl['text'] = str(sfxTxt).capitalize() self.moddet_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Model Detail', scale=1, text_scale=0.055, command=self.changeSetting, extraArgs=['model-detail', model_detail], pos=(-0.45, 0.35, 0.35), text_pos=(0, -0.01)) self.moddet_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, 0.35, 0.32), text_align=TextNode.ACenter) self.moddet_lbl['text'] = model_detail.capitalize() self.moddet_btn.bind(DGG.ENTER, self.createMustRestartGui) self.moddet_btn.bind(DGG.EXIT, self.removeMustRestartGui) self.texdet_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Texture Detail', scale=1, text_scale=0.0535, command=self.changeSetting, extraArgs=['texture-detail', tex_detail], pos=(-0.45, 0.25, 0.25), text_pos=(0, -0.01)) self.texdet_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, 0.25, 0.22), text_align=TextNode.ACenter) self.texdet_lbl['text'] = tex_detail.capitalize() self.texdet_btn.bind(DGG.ENTER, self.createMustRestartGui) self.texdet_btn.bind(DGG.EXIT, self.removeMustRestartGui) self.display_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Display', command=self.openDisplayPage, scale=1, text_scale=0.0535, pos=(-0.45, -0.25, 0.02), text_pos=(0, -0.01)) self.display_lbl = DirectLabel(relief=None, scale=0.06, pos=(0.45, -0.25, 0.02), text_align=TextNode.ACenter) self.display_lbl['text'] = 'Fullscreen: %s\nResolution: %s' % (str(fsTxt).capitalize(), (width, height)) self.aa_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Anti-Aliasing', command=self.changeSetting, extraArgs=['aa', aa], scale=1, text_scale=0.0535, pos=(-0.45, -0.35, -0.18), text_pos=(0, -0.01)) self.aa_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, -0.35, -0.21), text_align=TextNode.ACenter) self.aa_lbl['text'] = aa.capitalize() self.af_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Anisotropic Filtering', command=self.changeSetting, extraArgs=['af', af], scale=1, text_scale=0.0435, pos=(-0.45, -0.35, -0.28), text_pos=(0, -0.01)) self.af_lbl = DirectLabel(relief=None, scale=0.09, pos=(0.45, -0.35, -0.31), text_align=TextNode.ACenter) self.af_lbl['text'] = af.capitalize() self.af_btn.bind(DGG.ENTER, self.createMustRestartGui) self.af_btn.bind(DGG.EXIT, self.removeMustRestartGui) self.exit_btn = DirectButton(geom=(qt_btn.find('**/QuitBtn_UP'), qt_btn.find('**/QuitBtn_DN'), qt_btn.find('**/QuitBtn_RLVR')), relief=None, text='Exit Toontown', scale=1.2, text_scale=0.0535, command=self.book.finished, extraArgs=['exit'], pos=(-0.45, -0.65, -0.6), text_pos=(0, -0.01)) return def createMustRestartGui(self, foo): self.mustRestartLbl = DirectLabel(text='Changing this setting requires a game restart.', text_fg=(0.9, 0, 0, 1), text_shadow=(0, 0, 0, 1), text_scale=0.06, text_align=TextNode.ACenter, pos=(0, 0, -0.435), relief=None) return def removeMustRestartGui(self, foo): if hasattr(self, 'mustRestartLbl'): self.mustRestartLbl.destroy() del self.mustRestartLbl def exitBasePage(self): self.music_btn.destroy() del self.music_btn self.sfx_btn.destroy() del self.sfx_btn self.moddet_btn.destroy() del self.moddet_btn self.texdet_btn.destroy() del self.texdet_btn self.display_btn.destroy() del self.display_btn self.aa_btn.destroy() del self.aa_btn self.exit_btn.destroy() del self.exit_btn self.music_lbl.destroy() del self.music_lbl self.sfx_lbl.destroy() del self.sfx_lbl self.moddet_lbl.destroy() del self.moddet_lbl self.texdet_lbl.destroy() del self.texdet_lbl self.display_lbl.destroy() del self.display_lbl self.aa_lbl.destroy() del self.aa_lbl self.af_btn.destroy() del self.af_btn self.af_lbl.destroy() del self.af_lbl self.book.deletePageButtons(False, True) self.book.clearTitle()
class TownLoader(StateData): notify = directNotify.newCategory('TownLoader') def __init__(self, hood, parentFSMState, doneEvent): self.hood = hood self.parentFSMState = parentFSMState StateData.__init__(self, doneEvent) self.fsm = ClassicFSM('TownLoader', [State('start', self.enterStart, self.exitStart, ['quietZone', 'street']), State('street', self.enterStreet, self.exitStreet, ['quietZone']), State('toonInterior', self.enterToonInterior, self.exitToonInterior, ['quietZone']), State('quietZone', self.enterQuietZone, self.exitQuietZone, ['street', 'toonInterior']), State('final', self.enterFinal, self.exitFinal, ['start'])], 'start', 'final') self.branchZone = None self.canonicalBranchZone = None self.placeDoneEvent = 'placeDone' self.linkTunnels = [] return def findAndMakeLinkTunnels(self, requestStatus): for tunnel in self.geom.findAllMatches('**/*linktunnel*'): dnaRootStr = tunnel.getName() zone = LinkTunnel.getZoneFromDNARootStr(dnaRootStr) zone = LinkTunnel.maybeFixZone(zone) tunnelClass = LinkTunnel.getRecommendedTunnelClassFromZone(zone) link = tunnelClass(tunnel, dnaRootStr) self.linkTunnels.append(link) def load(self, zoneId): StateData.load(self) self.zoneId = zoneId self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.interiorMusic = base.loadMusic(self.interiorMusicFile) def unload(self): self.parentFSMState.removeChild(self.fsm) del self.parentFSMState del self.fsm del self.streetClass self.landmarkBlocks.removeNode() del self.landmarkBlocks self.hood.dnaStore.resetSuitPoints() self.hood.dnaStore.resetBattleCells() del self.hood del self.nodeDict del self.zoneDict del self.fadeInDict del self.fadeOutDict del self.nodeList self.geom.removeNode() del self.geom del self.music del self.interiorMusic ModelPool.garbageCollect() TexturePool.garbageCollect() StateData.unload(self) def enter(self, requestStatus): StateData.enter(self) self.findAndMakeLinkTunnels(requestStatus) self.fsm.enterInitialState() self.setState(requestStatus['where'], requestStatus) def exit(self): self.fsm.requestFinalState() self.ignoreAll() ModelPool.garbageCollect() TexturePool.garbageCollect() StateData.exit(self) def setState(self, state, requestStatus): self.fsm.request(state, [requestStatus]) def enterStart(self): pass def exitStart(self): pass def enterStreet(self, requestStatus): self.acceptOnce(self.placeDoneEvent, self.streetDone) self.place = self.streetClass(self, self.fsm, self.placeDoneEvent) self.place.load() def exitStreet(self): self.ignore(self.placeDoneEvent) self.place.exit() self.place.unload() self.place = None base.cr.playGame.setPlace(self.place) return def streetDone(self): self.requestStatus = self.place.doneStatus status = self.place.doneStatus if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(status['zoneId']) == self.branchZone and status['shardId'] == None or status['how'] == 'doorOut': self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return def enterToonInterior(self, requestStatus): self.acceptOnce(self.placeDoneEvent, self.handleToonInteriorDone) self.place = ToonInterior.ToonInterior(self, self.fsm, self.placeDoneEvent) self.place.load() def exitToonInterior(self): self.ignore(self.placeDoneEvent) self.place.exit() self.place.unload() self.place = None base.cr.playGame.setPlace(self.place) return def enterThePlace(self, requestStatus): base.cr.playGame.setPlace(self.place) self.place.enter(requestStatus) def handleToonInteriorDone(self): status = self.place.doneStatus if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(status['zoneId']) == self.branchZone and status['shardId'] == None or status['how'] == 'doorOut': self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return def enterQuietZone(self, requestStatus): self.fsm.request(requestStatus['where'], [requestStatus], exitCurrent=0) self.quietZoneDoneEvent = uniqueName('quietZoneDone') self.acceptOnce(self.quietZoneDoneEvent, self.handleQuietZoneDone) self.quietZoneStateData = QuietZoneState(self.quietZoneDoneEvent) self.quietZoneStateData.load() self.quietZoneStateData.enter(requestStatus) def exitQuietZone(self): self.ignore(self.quietZoneDoneEvent) del self.quietZoneDoneEvent self.quietZoneStateData.exit() self.quietZoneStateData.unload() self.quietZoneStateData = None return def handleQuietZoneDone(self): status = self.quietZoneStateData.getRequestStatus() self.exitQuietZone() self.enterThePlace(status) def enterFinal(self): pass def exitFinal(self): pass def createHood(self, dnaFile, loadStorage = 1): if loadStorage: loader.loadDNAFile(self.hood.dnaStore, 'phase_5/dna/storage_town.dna') loader.loadDNAFile(self.hood.dnaStore, self.townStorageDNAFile) node = loader.loadDNAFile(self.hood.dnaStore, dnaFile) if node.getNumParents() == 1: self.geom = NodePath(node.getParent(0)) self.geom.reparentTo(hidden) else: self.geom = hidden.attachNewNode(node) self.makeDictionaries(self.hood.dnaStore) self.reparentLandmarkBlockNodes() self.renameFloorPolys(self.nodeList) gsg = base.win.getGsg() if gsg: self.geom.prepareScene(gsg) self.geom.flattenLight() self.geom.setName('town_top_level') def reparentLandmarkBlockNodes(self): bucket = self.landmarkBlocks = hidden.attachNewNode('landmarkBlocks') npc = self.geom.findAllMatches('**/sb*:*_landmark_*_DNARoot') for i in xrange(npc.getNumPaths()): nodePath = npc.getPath(i) nodePath.wrtReparentTo(bucket) npc = self.geom.findAllMatches('**/sb*:*animated_building*_DNARoot') for i in xrange(npc.getNumPaths()): nodePath = npc.getPath(i) nodePath.wrtReparentTo(bucket) def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.zoneVisDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroupsAI() for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) groupName = base.cr.hoodMgr.extractGroupName(groupFullName) zoneId = int(groupName) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) groupNode = self.geom.find('**/' + groupFullName) if groupNode.isEmpty(): continue else: if ':' in groupName: groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):]) else: groupName = '%s' % zoneId groupNode.setName(groupName) groupNode.flattenMedium() self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(zoneId)) self.zoneVisDict[zoneId] = visibles fadeDuration = 0.5 self.fadeOutDict[groupNode] = Sequence(Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), name='fadeZone-' + str(zoneId), autoPause=1) self.fadeInDict[groupNode] = Sequence(Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1) for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)): visName = dnaStore.getVisibleName(i, j) groupName = base.cr.hoodMgr.extractGroupName(visName) nextZoneId = int(groupName) nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId) visNode = self.zoneDict[nextZoneId] self.nodeDict[zoneId].append(visNode) self.hood.dnaStore.resetPlaceNodes() self.hood.dnaStore.resetDNAGroups() self.hood.dnaStore.resetDNAVisGroups() self.hood.dnaStore.resetDNAVisGroupsAI() def renameFloorPolys(self, nodeList): for i in nodeList: collNodePaths = i.findAllMatches('**/+CollisionNode') numCollNodePaths = collNodePaths.getNumPaths() visGroupName = i.node().getName() for j in xrange(numCollNodePaths): collNodePath = collNodePaths.getPath(j) bitMask = collNodePath.node().getIntoCollideMask() if bitMask.getBit(1): collNodePath.node().setName(visGroupName)