text: 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)
  