99 lines
3.9 KiB
Python
99 lines
3.9 KiB
Python
from toontown.toonbase.ToonBaseGlobal import *
|
|
from panda3d.core import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
import random
|
|
from direct.distributed import DistributedObject
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
import ToonInteriorColors
|
|
from toontown.dna.DNAParser import *
|
|
from toontown.hood import ZoneUtil
|
|
from toontown.toon.DistributedNPCToonBase import DistributedNPCToonBase
|
|
|
|
class DistributedGagshopInterior(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 xrange(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/gagShop_interior')
|
|
self.interior.reparentTo(render)
|
|
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.025, 0)
|
|
doorColor = self.randomGenerator.choice(self.colors['TI_door'])
|
|
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()
|
|
for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
|
|
npcToon.initToonState()
|
|
|
|
def disable(self):
|
|
self.interior.removeNode()
|
|
del self.interior
|
|
DistributedObject.DistributedObject.disable(self)
|