text: from toontown.toonbase.ToonBaseGlobal import *
  from pandac.PandaModules import *
  from libtoontown import *
  from toontown.toonbase.ToontownGlobals import *
  import random
  from direct.distributed import DistributedObject
  from direct.directnotify import DirectNotifyGlobal
  from direct.actor import Actor
  from . import ToonInteriorColors
  from toontown.hood import ZoneUtil
  
  class DistributedPetshopInterior(DistributedObject.DistributedObject):
  
      def __init__(self, cr):
          DistributedObject.DistributedObject.__init__(self, cr)
          self.dnaStore = cr.playGame.dnaStore
  
      def generate(self):
          DistributedObject.DistributedObject.generate(self)
  
      def announceGenerate(self):
          DistributedObject.DistributedObject.announceGenerate(self)
          self.setup()
  
      def randomDNAItem(self, category, findFunc):
          codeCount = self.dnaStore.getNumCatalogCodes(category)
          index = self.randomGenerator.randint(0, codeCount - 1)
          code = self.dnaStore.getCatalogCode(category, index)
          return findFunc(code)
  
      def replaceRandomInModel(self, model):
          baseTag = 'random_'
          npc = model.findAllMatches('**/' + baseTag + '???_*')
          for i in range(npc.getNumPaths()):
              np = npc.getPath(i)
              name = np.getName()
              b = len(baseTag)
              category = name[b + 4:]
              key1 = name[b]
              key2 = name[b + 1]
              if key1 == 'm':
                  model = self.randomDNAItem(category, self.dnaStore.findNode)
                  newNP = model.copyTo(np)
                  if key2 == 'r':
                      self.replaceRandomInModel(newNP)
              elif key1 == 't':
                  texture = self.randomDNAItem(category, self.dnaStore.findTexture)
                  np.setTexture(texture, 100)
                  newNP = np
              if key2 == 'c':
                  if category == 'TI_wallpaper' or category == 'TI_wallpaper_border':
                      self.randomGenerator.seed(self.zoneId)
                      newNP.setColorScale(self.randomGenerator.choice(self.colors[category]))
                  else:
                      newNP.setColorScale(self.randomGenerator.choice(self.colors[category]))
  
      def setZoneIdAndBlock(self, zoneId, block):
          self.zoneId = zoneId
          self.block = block
  
      def chooseDoor(self):
          doorModelName = 'door_double_round_ul'
          if doorModelName[-1:] == 'r':
              doorModelName = doorModelName[:-1] + 'l'
          else:
              doorModelName = doorModelName[:-1] + 'r'
          door = self.dnaStore.findNode(doorModelName)
          return door
  
      def setup(self):
          self.dnaStore = base.cr.playGame.dnaStore
          self.randomGenerator = random.Random()
          self.randomGenerator.seed(self.zoneId)
          self.interior = loader.loadModel('phase_4/models/modules/PetShopInterior')
          self.interior.reparentTo(render)
          self.fish = Actor.Actor('phase_4/models/props/interiorfish-zero', {'swim': 'phase_4/models/props/interiorfish-swim'})
          self.fish.reparentTo(self.interior)
          self.fish.setColorScale(0.8, 0.9, 1, 0.8)
          self.fish.setScale(0.8)
          self.fish.setPos(0, 6, -4)
          self.fish.setPlayRate(0.7, 'swim')
          self.fish.loop('swim')
          hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
          self.colors = ToonInteriorColors.colors[hoodId]
          self.replaceRandomInModel(self.interior)
          door = self.chooseDoor()
          doorOrigin = render.find('**/door_origin;+s')
          doorNP = door.copyTo(doorOrigin)
          doorOrigin.setScale(0.8, 0.8, 0.8)
          doorOrigin.setPos(doorOrigin, 0, -0.25, 0)
          doorColor = self.randomGenerator.choice(self.colors['TI_door'])
          DNADoor.setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore, str(self.block), doorColor)
          doorFrame = doorNP.find('door_*_flat')
          doorFrame.wrtReparentTo(self.interior)
          doorFrame.setColor(doorColor)
          del self.colors
          del self.dnaStore
          del self.randomGenerator
          self.interior.flattenMedium()
  
      def disable(self):
          self.fish.stop()
          self.fish.cleanup()
          del self.fish
          self.interior.removeNode()
          del self.interior
          DistributedObject.DistributedObject.disable(self)
  