from DistributedNPCToonBase import * from direct.gui.DirectGui import * from panda3d.core import * import NPCToons from direct.task.Task import Task from toontown.toonbase import TTLocalizer from toontown.racing.KartShopGui import * from toontown.racing.KartShopGlobals import * class DistributedNPCKartClerk(DistributedNPCToonBase): def __init__(self, cr): DistributedNPCToonBase.__init__(self, cr) self.isLocalToon = 0 self.av = None self.button = None self.popupInfo = None self.kartShopGui = None self.cameraLerp = None return def disable(self): self.ignoreAll() taskMgr.remove(self.uniqueName('popupKartShopGUI')) if self.cameraLerp: self.cameraLerp.finish() self.cameraLerp = None if self.popupInfo: self.popupInfo.destroy() self.popupInfo = None if self.kartShopGui: self.kartShopGui.destroy() self.kartShopGui = None self.av = None if self.isLocalToon: base.localAvatar.posCamera(0, 0) DistributedNPCToonBase.disable(self) return def generate(self): DistributedNPCToonBase.generate(self) def getCollSphereRadius(self): return 2.25 def handleCollisionSphereEnter(self, collEntry): base.cr.playGame.getPlace().fsm.request('purchase') self.sendUpdate('avatarEnter', []) def __handleUnexpectedExit(self): self.notify.warning('unexpected exit') self.av = None return def resetKartShopClerk(self): self.ignoreAll() taskMgr.remove(self.uniqueName('popupKartShopGUI')) if self.cameraLerp: self.cameraLerp.finish() self.cameraLerp = None if self.kartShopGui: self.kartShopGui.destroy() self.kartShopGui = None self.show() self.startLookAround() self.detectAvatars() self.clearMat() if self.isLocalToon: self.freeAvatar() return Task.done def ignoreEventDict(self): for event in KartShopGlobals.EVENTDICT: self.ignore(event) def setMovie(self, mode, npcId, avId, extraArgs, timestamp): timeStamp = ClockDelta.globalClockDelta.localElapsedTime(timestamp) self.remain = NPCToons.CLERK_COUNTDOWN_TIME - timeStamp self.npcId = npcId self.isLocalToon = avId == base.localAvatar.doId if mode == NPCToons.SELL_MOVIE_CLEAR: return if mode == NPCToons.SELL_MOVIE_TIMEOUT: if self.cameraLerp: self.cameraLerp.finish() self.cameraLerp = None if self.isLocalToon: self.ignoreEventDict() if self.popupInfo: self.popupInfo.reparentTo(hidden) if self.kartShopGui: self.kartShopGui.destroy() self.kartShopGui = None self.setChatAbsolute(TTLocalizer.STOREOWNER_TOOKTOOLONG, CFSpeech | CFTimeout) self.resetKartShopClerk() elif mode == NPCToons.SELL_MOVIE_START: self.av = base.cr.doId2do.get(avId) if self.av is None: self.notify.warning('Avatar %d not found in doId' % avId) return else: self.accept(self.av.uniqueName('disable'), self.__handleUnexpectedExit) self.setupAvatars(self.av) if self.isLocalToon: camera.wrtReparentTo(render) self.cameraLerp = LerpPosQuatInterval(camera, 1, Point3(-5, 9, base.localAvatar.getHeight() - 0.5), Point3(-150, -2, 0), other=self, blendType='easeOut', name=self.uniqueName('lerpCamera')) self.cameraLerp.start() if self.isLocalToon: taskMgr.doMethodLater(1.0, self.popupKartShopGUI, self.uniqueName('popupKartShopGUI')) elif mode == NPCToons.SELL_MOVIE_COMPLETE: self.setChatAbsolute(TTLocalizer.STOREOWNER_GOODBYE, CFSpeech | CFTimeout) self.resetKartShopClerk() elif mode == NPCToons.SELL_MOVIE_PETCANCELED: self.setChatAbsolute(TTLocalizer.STOREOWNER_GOODBYE, CFSpeech | CFTimeout) self.resetKartShopClerk() elif mode == NPCToons.SELL_MOVIE_NO_MONEY: self.notify.warning('SELL_MOVIE_NO_MONEY should not be called') self.resetKartShopClerk() return def __handleBuyKart(self, kartID): self.sendUpdate('buyKart', [kartID]) def __handleBuyAccessory(self, accID): self.sendUpdate('buyAccessory', [accID]) def __handleGuiDone(self, bTimedOut = False): self.ignoreAll() if hasattr(self, 'kartShopGui') and self.kartShopGui != None: self.kartShopGui.destroy() self.kartShopGui = None if not bTimedOut: self.sendUpdate('transactionDone') return def popupKartShopGUI(self, task): self.setChatAbsolute('', CFSpeech) self.accept(KartShopGlobals.EVENTDICT['buyAccessory'], self.__handleBuyAccessory) self.accept(KartShopGlobals.EVENTDICT['buyKart'], self.__handleBuyKart) self.acceptOnce(KartShopGlobals.EVENTDICT['guiDone'], self.__handleGuiDone) self.kartShopGui = KartShopGuiMgr(KartShopGlobals.EVENTDICT)