toontown-just-works/toontown/estate/DistributedHouseInteriorAI.py

150 lines
4.5 KiB
Python
Raw Normal View History

2024-07-07 18:08:39 -05:00
from direct.distributed.DistributedObjectAI import DistributedObjectAI
from DistributedFurnitureManagerAI import *
from toontown.catalog import CatalogItem
from toontown.catalog.CatalogWindowItem import CatalogWindowItem
from toontown.catalog.CatalogWallpaperItem import CatalogWallpaperItem
from toontown.catalog.CatalogMouldingItem import CatalogMouldingItem
from toontown.catalog.CatalogFlooringItem import CatalogFlooringItem
from toontown.catalog.CatalogWainscotingItem import CatalogWainscotingItem
from DNAFurnitureReaderAI import DNAFurnitureReaderAI
from toontown.dna.DNAParser import *
import HouseGlobals
import random
# The house interior DNA files for each
houseInteriors = [
'phase_5.5/dna/house_interior3.pdna',
'phase_5.5/dna/house_interior4.pdna',
'phase_5.5/dna/house_interior5.pdna',
'phase_5.5/dna/house_interior7.pdna',
'phase_5.5/dna/house_interior8.pdna',
'phase_5.5/dna/house_interior10.pdna',
]
defaultWindows = [
CatalogWindowItem(20, placement=2), CatalogWindowItem(20, placement=4), CatalogWindowItem(20, placement=6)
]
defaultWallpaper = [
CatalogWallpaperItem(1110, 0, 1010, 0),
CatalogMouldingItem(1000, 2),
CatalogFlooringItem(1000, 4),
CatalogWainscotingItem(1010, 4),
CatalogWallpaperItem(1110, 0, 1010, 0),
CatalogMouldingItem(1000, 2),
CatalogFlooringItem(1000, 4),
CatalogWainscotingItem(1010, 4),
CatalogWallpaperItem(1110, 0, 1010, 0),
CatalogMouldingItem(1000, 2),
CatalogFlooringItem(1000, 4),
CatalogWainscotingItem(1010, 4),
CatalogWallpaperItem(1110, 0, 1010, 0),
CatalogMouldingItem(1000, 2),
CatalogFlooringItem(1000, 4),
CatalogWainscotingItem(1010, 4),
]
class DistributedHouseInteriorAI(DistributedObjectAI):
notify = directNotify.newCategory("DistributedHouseInteriorAI")
def __init__(self, air, house):
DistributedObjectAI.__init__(self, air)
self.house = house
self.houseId = 0
self.houseIndex = 0
self.wallpaper = ''
self.windows = ''
self.furnitureManager = DistributedFurnitureManagerAI(self.air, self.house, self)
def announceGenerate(self):
DistributedObjectAI.announceGenerate(self)
self.furnitureManager.generateWithRequired(self.zoneId)
def delete(self):
DistributedObjectAI.delete(self)
self.furnitureManager.delete()
def initialize(self):
# Get DNA file appropriate to this house...
dnaFile = houseInteriors[self.houseIndex]
# Load DNA...
dnaStorage = DNAStorage()
dnaData = loadDNAFileAI(dnaStorage, dnaFile)
# Read it into furniture...
furnitureReader = DNAFurnitureReaderAI(dnaData, self.house.gender, [-11, 2, 0, 0, 0, 0])
# Set furniture:
self.furnitureManager.setItems(furnitureReader.getBlob())
# Set default windows and wallpaper:
del self.furnitureManager.windows[:]
self.furnitureManager.windows.extend(defaultWindows)
self.furnitureManager.applyWindows()
del self.furnitureManager.wallpaper[:]
self.furnitureManager.wallpaper.extend(defaultWallpaper)
self.furnitureManager.applyWallpaper()
# Save:
self.furnitureManager.saveToHouse()
def setHouseId(self, houseId):
self.houseId = houseId
def d_setHouseId(self, houseId):
self.sendUpdate('setHouseId', [houseId])
def b_setHouseId(self, houseId):
self.setHouseId(houseId)
self.d_setHouseId(houseId)
def getHouseId(self):
return self.houseId
def setHouseIndex(self, index):
self.houseIndex = index
def d_setHouseIndex(self, index):
self.sendUpdate('setHouseIndex', [index])
def b_setHouseIndex(self, index):
self.setHouseIndex(index)
self.d_setHouseIndex(index)
def getHouseIndex(self):
return self.houseIndex
def setWallpaper(self, wallpaper):
self.wallpaper = wallpaper
def d_setWallpaper(self, wallpaper):
self.sendUpdate('setWallpaper', [wallpaper])
def b_setWallpaper(self, wallpaper):
self.setWallpaper(wallpaper)
if self.isGenerated():
self.d_setWallpaper(wallpaper)
def getWallpaper(self):
return self.wallpaper
def setWindows(self, windows):
self.windows = windows
def d_setWindows(self, windows):
self.sendUpdate('setWindows', [windows])
def b_setWindows(self, windows):
self.setWindows(windows)
if self.isGenerated():
self.d_setWindows(windows)
def getWindows(self):
return self.windows