toontown-just-works/toontown/estate/DNAFurnitureReaderAI.py
2024-07-07 18:08:39 -05:00

88 lines
2.8 KiB
Python

from toontown.catalog.CatalogItemList import CatalogItemList
from toontown.catalog.CatalogFurnitureItem import CatalogFurnitureItem
from toontown.catalog import CatalogItem
# Mapping of DNA prop codes to furniture ID values. Use None to ignore a code.
DNA2Furniture = {
'house_interiorA': None,
'GardenA': None,
'chairA': 100,
'chair': 110,
'regular_bed': (200, 210),
'FireplaceSq': 400,
'closetBoy': (500, 510),
'lamp_short': 600,
'lamp_tall': 610,
'couch_1person': 700,
'couch_2person': 710,
'desk_only_wo_phone': 800,
'desk_only': 800,
'coatrack': 910,
'paper_trashcan': 920,
'rug': 1000,
'rugA': 1010,
'rugB': 1020,
'cabinetYwood': 1110,
'bookcase': 1120,
'bookcase_low': 1130,
'ending_table': 1200,
'jellybeanBank': 1300,
'trunkBoy': (4000, 4010)
}
class DNAFurnitureReaderAI:
# This object processes the house_interior*.dna files and produces a
# CatalogItemList representing the furniture in the DNA file. The resulting
# list is passed to the FurnitureManager in order to initialize a blank
# house to the default furniture arrangement.
notify = directNotify.newCategory("DNAFurnitureReaderAI")
def __init__(self, dnaData, gender, phonePos):
self.dnaData = dnaData
self.gender = gender
self.phonePos = phonePos
self.itemList = None
def buildList(self):
self.itemList = CatalogItemList(store=(CatalogItem.Customization |
CatalogItem.Location))
# Find the interior node:
for i in xrange(self.dnaData.getNumChildren()):
child = self.dnaData.at(i)
if child.getName() == 'interior':
interior = child
break
else:
self.notify.error('Could not find "interior" in DNA!')
self.itemList.append(CatalogFurnitureItem(1399, posHpr=self.phonePos))
# Every child in the interior node is a prop, thus:
for i in xrange(interior.getNumChildren()):
child = interior.at(i)
code = child.getCode()
if code not in DNA2Furniture:
self.notify.warning('Unrecognized furniture code %r!' % code)
continue
itemId = DNA2Furniture[code]
if itemId is None:
continue
if hasattr(itemId, '__getitem__'):
itemId = itemId[self.gender]
x, y, z = child.getPos()
h, p, r = child.getHpr()
self.itemList.append(CatalogFurnitureItem(itemId,
posHpr=(x, y, z, h, p, r)))
def getList(self):
if not self.itemList:
self.buildList()
return self.itemList
def getBlob(self):
return self.getList().getBlob()