ToonTownRewritten/toontown/battle/BattlePlace.py

100 lines
3.6 KiB
Python

from pandac.PandaModules import *
from toontown.toon import Toon
from toontown.hood import Place
class BattlePlace(Place.Place):
def __init__(self, loader, doneEvent):
Place.Place.__init__(self, loader, doneEvent)
def load(self):
Place.Place.load(self)
Toon.loadBattleAnims()
def setState(self, state, battleEvent = None):
if battleEvent:
if not self.fsm.request(state, [battleEvent]):
self.notify.warning("fsm.request('%s') returned 0 (zone id %s, avatar pos %s)." % (state, self.zoneId, base.localAvatar.getPos(render)))
elif not self.fsm.request(state):
self.notify.warning("fsm.request('%s') returned 0 (zone id %s, avatar pos %s)." % (state, self.zoneId, base.localAvatar.getPos(render)))
def enterWalk(self, flag = 0):
Place.Place.enterWalk(self, flag)
self.accept('enterBattle', self.handleBattleEntry)
def exitWalk(self):
Place.Place.exitWalk(self)
self.ignore('enterBattle')
def enterWaitForBattle(self):
base.localAvatar.b_setAnimState('neutral', 1)
def exitWaitForBattle(self):
pass
def enterBattle(self, event):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: COGBATTLE: Enter Battle')
self.loader.music.stop()
base.playMusic(self.loader.battleMusic, looping=1, volume=0.9)
self.enterTownBattle(event)
base.localAvatar.b_setAnimState('off', 1)
self.accept('teleportQuery', self.handleTeleportQuery)
base.localAvatar.setTeleportAvailable(1)
base.localAvatar.cantLeaveGame = 1
def enterTownBattle(self, event):
self.loader.townBattle.enter(event, self.fsm.getStateNamed('battle'))
def exitBattle(self):
self.loader.townBattle.exit()
self.loader.battleMusic.stop()
base.playMusic(self.loader.music, looping=1, volume=0.8)
base.localAvatar.cantLeaveGame = 0
base.localAvatar.setTeleportAvailable(0)
self.ignore('teleportQuery')
def handleBattleEntry(self):
self.fsm.request('battle')
def enterFallDown(self, extraArgs = []):
base.localAvatar.laffMeter.start()
base.localAvatar.b_setAnimState('FallDown', callback=self.handleFallDownDone, extraArgs=extraArgs)
def handleFallDownDone(self):
base.cr.playGame.getPlace().setState('walk')
def exitFallDown(self):
base.localAvatar.laffMeter.stop()
def enterSquished(self):
base.localAvatar.laffMeter.start()
base.localAvatar.b_setAnimState('Squish')
taskMgr.doMethodLater(2.0, self.handleSquishDone, base.localAvatar.uniqueName('finishSquishTask'))
def handleSquishDone(self, extraArgs = []):
base.cr.playGame.getPlace().setState('walk')
def exitSquished(self):
taskMgr.remove(base.localAvatar.uniqueName('finishSquishTask'))
base.localAvatar.laffMeter.stop()
def enterZone(self, newZone):
if isinstance(newZone, CollisionEntry):
try:
newZoneId = int(newZone.getIntoNode().getName())
except:
self.notify.warning('Invalid floor collision node in street: %s' % newZone.getIntoNode().getName())
return
else:
newZoneId = newZone
self.doEnterZone(newZoneId)
def doEnterZone(self, newZoneId):
if newZoneId != self.zoneId:
if newZoneId != None:
base.cr.sendSetZoneMsg(newZoneId)
self.notify.debug('Entering Zone %d' % newZoneId)
self.zoneId = newZoneId
return