107 lines
4.2 KiB
Python
107 lines
4.2 KiB
Python
from toontown.toonbase.ToonBaseGlobal import *
|
|
from pandac.PandaModules import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
import random
|
|
from direct.distributed import DistributedObject
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.actor import Actor
|
|
import ToonInteriorColors
|
|
from toontown.dna.DNADoor import DNADoor
|
|
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)
|