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

116 lines
3.7 KiB
Python
Raw Normal View History

2024-07-07 18:08:39 -05:00
from panda3d.core import *
from direct.distributed import DistributedObject
from direct.distributed.ClockDelta import *
from direct.directnotify import DirectNotifyGlobal
from direct.gui.DirectGui import *
from toontown.toonbase.ToonBaseGlobal import *
import HouseGlobals
class DistributedGarden(DistributedObject.DistributedObject):
notify = directNotify.newCategory('DistributedGarden')
def __init__(self, cr):
self.notify.debug('init')
DistributedObject.DistributedObject.__init__(self, cr)
self.props = []
self.pos = None
self.radius = 0
self.gridCells = 20
self.propTable = [None] * self.gridCells
for i in xrange(len(self.propTable)):
self.propTable[i] = [None] * self.gridCells
self.dx = 1.0 / self.gridCells
self.occupied = []
def generate(self):
DistributedObject.DistributedObject.generate(self)
def announceGenerate(self):
DistributedObject.DistributedObject.announceGenerate(self)
def disable(self):
DistributedObject.DistributedObject.disable(self)
def unload(self):
pass
def delete(self):
for prop in self.props:
prop[0].removeNode()
del prop[0]
del prop
del self.props
self.props = None
self.unload()
return
def sendNewProp(self, prop, x, y, z):
self.notify.debug('sendNewProp')
print 'new prop (%d) = %s,%s,%s' % (prop,
x,
y,
z)
if prop == HouseGlobals.PROP_ICECUBE:
model = loader.loadModel('phase_8/models/props/icecube.bam')
elif prop == HouseGlobals.PROP_FLOWER:
model = loader.loadModel('phase_8/models/props/flower_treasure.bam')
elif prop == HouseGlobals.PROP_SNOWFLAKE:
model = loader.loadModel('phase_8/models/props/snowflake_treasure.bam')
model.reparentTo(hidden)
model.setPos(x, y, z)
model.setScale(0.2)
model.setBillboardPointEye()
model.reparentTo(render)
self.props.append([model,
x,
y,
z])
def getPropPos(self, i, j):
pos = [self.pos[0] - self.radius + 2 * self.radius * i, self.pos[1] - self.radius + 2 * self.radius * j, self.pos[2]]
return pos
def loadProp(self, prop, i, j):
pos = self.getPropPos(i, j)
if prop == HouseGlobals.PROP_ICECUBE:
model = loader.loadModel('phase_8/models/props/icecube.bam')
elif prop == HouseGlobals.PROP_FLOWER:
model = loader.loadModel('phase_8/models/props/flower_treasure.bam')
elif prop == HouseGlobals.PROP_SNOWFLAKE:
model = loader.loadModel('phase_8/models/props/snowflake_treasure.bam')
else:
self.notify.error('cant find prop: %s' % prop)
model.reparentTo(hidden)
model.setPos(pos[0], pos[1], pos[2])
model.setScale(0.2)
model.setBillboardPointEye()
model.reparentTo(render)
def setAddProp(self, prop, i, j):
self.notify.debug('addProp')
self.props.append([prop, i, j])
self.loadProp(prop, i, j)
self.b_setProps(self, props)
def b_setProps(self, props):
self.notify.debug('b_setProps')
self.setProps(props)
self.d_setProps(props)
def d_setProps(self, props):
self.notify.debug('d_setProps')
aProps = []
for prop in props:
aProps = aProps + prop
self.sendUpdate('setProps', [aProps])
def setProps(self, props):
self.notify.debug('setProps')
self.props = props
for prop in self.props:
pInd, i, j = prop
self.propTable[i, j] = pInd