from panda3d.core import * from direct.interval.IntervalGlobal import * from toontown.toonbase.ToontownGlobals import * from toontown.coghq import BarrelBase from otp.level import BasicEntities from direct.directnotify import DirectNotifyGlobal class DistributedBarrelBase(BasicEntities.DistributedNodePathEntity, BarrelBase.BarrelBase): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBarrelBase') def __init__(self, cr): self.rewardPerGrabMax = 0 BasicEntities.DistributedNodePathEntity.__init__(self, cr) self.grabSoundPath = 'phase_4/audio/sfx/SZ_DD_treasure.ogg' self.rejectSoundPath = 'phase_4/audio/sfx/ring_miss.ogg' self.animTrack = None self.shadow = 0 self.barrelScale = 0.5 self.sphereRadius = 3.2 self.playSoundForRemoteToons = 1 self.gagNode = None self.gagModel = None self.barrel = None return def disable(self): BasicEntities.DistributedNodePathEntity.disable(self) self.ignoreAll() if self.animTrack: self.animTrack.pause() self.animTrack = None return def generate(self): BasicEntities.DistributedNodePathEntity.generate(self) def delete(self): BasicEntities.DistributedNodePathEntity.delete(self) self.gagNode.removeNode() del self.gagNode if self.barrel: self.barrel.removeNode() del self.barrel self.barrel = None return def announceGenerate(self): BasicEntities.DistributedNodePathEntity.announceGenerate(self) self.setTag('doId', str(self.getDoId())) self.loadModel() self.collSphere = CollisionSphere(0, 0, 0, self.sphereRadius) self.collSphere.setTangible(0) self.collNode = CollisionNode(self.uniqueName('barrelSphere')) self.collNode.setIntoCollideMask(WallBitmask) self.collNode.addSolid(self.collSphere) self.collNodePath = self.barrel.attachNewNode(self.collNode) self.collNodePath.hide() self.applyLabel() self.accept(self.uniqueName('enterbarrelSphere'), self.handleEnterSphere) def loadModel(self): self.grabSound = base.loader.loadSfx(self.grabSoundPath) self.rejectSound = base.loader.loadSfx(self.rejectSoundPath) self.barrel = loader.loadModel('phase_4/models/cogHQ/gagTank') self.barrel.setScale(self.barrelScale) self.barrel.reparentTo(self) dcsNode = self.barrel.find('**/gagLabelDCS') dcsNode.setColor(0.15, 0.15, 0.1) self.gagNode = self.barrel.attachNewNode('gagNode') self.gagNode.setPosHpr(0.0, -2.62, 4.0, 0, 0, 0) self.gagNode.setColorScale(0.7, 0.7, 0.6, 1) def handleEnterSphere(self, collEntry = None): localAvId = base.localAvatar.getDoId() self.d_requestGrab() def d_requestGrab(self): self.sendUpdate('requestGrab', []) def setGrab(self, avId): self.notify.debug('handleGrab %s' % avId) self.avId = avId if avId == base.localAvatar.doId: self.ignore(self.uniqueName('entertreasureSphere')) self.barrel.setColorScale(0.5, 0.5, 0.5, 1) if self.playSoundForRemoteToons or self.avId == base.localAvatar.getDoId(): base.playSfx(self.grabSound) if self.animTrack: self.animTrack.finish() self.animTrack = None flytime = 1.0 self.animTrack = Sequence(LerpScaleInterval(self.barrel, 0.2, 1.1 * self.barrelScale, blendType='easeInOut'), LerpScaleInterval(self.barrel, 0.2, self.barrelScale, blendType='easeInOut'), Func(self.resetBarrel), name=self.uniqueName('animTrack')) self.animTrack.start() return def setReject(self): self.notify.debug('I was rejected!!!!!') def resetBarrel(self): self.barrel.setScale(self.barrelScale) self.accept(self.uniqueName('entertreasureSphere'), self.handleEnterSphere)