text: from panda3d.core import NodePath
  from direct.directnotify import DirectNotifyGlobal
  from toontown.toonbase import ToontownGlobals
  from toontown.estate import DistributedStatuary
  from toontown.estate import GardenGlobals
  
  class DistributedChangingStatuary(DistributedStatuary.DistributedStatuary):
      notify = DirectNotifyGlobal.directNotify.newCategory('DistributedChangingStatuary')
  
      def __init__(self, cr):
          self.notify.debug('constructing DistributedChangingStatuary')
          DistributedStatuary.DistributedStatuary.__init__(self, cr)
  
      def loadModel(self):
          self.rotateNode = self.plantPath.attachNewNode('rotate')
          self.model = loader.loadModel(self.modelPath)
          colNode = self.model.find('**/+CollisionNode')
          if not colNode.isEmpty():
              score, multiplier = ToontownGlobals.PinballScoring[ToontownGlobals.PinballStatuary]
              if self.pinballScore:
                  score = self.pinballScore[0]
                  multiplier = self.pinballScore[1]
              scoreNodePath = NodePath('statuary-%d-%d' % (score, multiplier))
              colNode.setName('statuaryCol')
              scoreNodePath.reparentTo(colNode.getParent())
              colNode.reparentTo(scoreNodePath)
          self.model.setScale(self.worldScale)
          self.model.reparentTo(self.rotateNode)
          self.hideParts()
          self.stick2Ground()
  
      def hideParts(self):
          stage = -1
          attrib = GardenGlobals.PlantAttributes[self.typeIndex]
          growthThresholds = attrib['growthThresholds']
          for index, threshold in enumerate(growthThresholds):
              if self.growthLevel < threshold:
                  stage = index
                  break
  
          if stage == -1:
              stage = len(growthThresholds)
          self.notify.debug('growth Stage=%d' % stage)
          for index in xrange(len(growthThresholds) + 1):
              if index != stage:
                  partName = '**/growthStage_%d' % index
                  self.notify.debug('trying to remove %s' % partName)
                  hideThis = self.model.find(partName)
                  if not hideThis.isEmpty():
                      hideThis.removeNode()
  
      def setupShadow(self):
          DistributedStatuary.DistributedStatuary.setupShadow(self)
          self.hideShadow()
  
      def setGrowthLevel(self, growthLevel):
          self.growthLevel = growthLevel
          if self.model:
              self.model.removeNode()
              self.loadModel()
  