Poodletooth-iLand/toontown/safezone/DistributedPillow.py

116 lines
4.1 KiB
Python
Raw Normal View History

from panda3d.core import Point3, NodePath
from pandac.PandaModules import CollisionPolygon
from otp.otpbase import OTPGlobals
from direct.distributed.DistributedObject import DistributedObject
from direct.fsm import ClassicFSM, State
class DistributedPillow(DistributedObject):
points = [
Point3(-62.2896, 59.2746, -6.0),
Point3(-119.969, 59.2746, -6.0),
Point3(-67.1297, 55.2920, -1.6),
Point3(-120.063, 55.2920, -1.6),
Point3(-64.9566, 35.6930, 1.0),
Point3(-119.993, 35.6930, 1.0),
Point3(-63.4717, 0.00000, 1.6),
Point3(-119.670, 0.00000, 1.6),
Point3(-64.9566, -35.6930, 1.0),
Point3(-119.993, -35.6930, 1.0),
Point3(-67.1297, -55.2920, -1.6),
Point3(-120.063, -55.2920, -1.6),
Point3(-62.2896, -58.3746, -6.0),
Point3(-119.969, -58.3746, -6.0),
Point3(-104.100, 59.2746, -6.0),
Point3(-104.100, -58.3746, -6.0),
Point3(-104.100, 55.2920, -6.0),
Point3(-104.100, -55.2920, -6.0),
]
polygons = [[0, 1, 3, 2], [2, 3, 5, 4], [4, 5, 7, 6],
[6, 7, 9, 8], [8, 9, 11, 10], [10, 11, 13, 12]]
walls = [[0, 2], [2, 4], [4, 6], [6, 8], [8, 10], [10, 12],
[3, 1], [5, 3], [7, 5], [9, 7], [11, 9], [13, 11],
[3, 16], [17, 11], [16, 14], [15, 17]]
def __init__(self, cr):
DistributedObject.__init__(self, cr)
self.floorpolys = []
self.wallpolys = []
self.npaths = []
self.np = None
self.fsm = ClassicFSM.ClassicFSM(
'DistributedPillow',
[
State.State('off', self.enterOff, self.exitOff,
['entering']),
State.State('bounce', self.enterBounce, self.exitBounce,
['off']),
], 'off', 'off')
self.fsm.enterInitialState()
def generate(self):
DistributedObject.generate(self)
self.loader = self.cr.playGame.hood.loader
self.np = NodePath('Pillow')
self.np.reparentTo(render)
for point in DistributedPillow.polygons:
orderedPoints = []
for index in point:
orderedPoints.append(DistributedPillow.points[index])
self.floorpolys.append(CollisionPolygon(*orderedPoints))
for n, p in enumerate(self.floorpolys):
polyNode = CollisionNode("FloorPoly-%d" % n)
polyNode.addSolid(p)
polyNode.setFromCollideMask(OTPGlobals.FloorBitmask)
polyNodePath = self.np.attachNewNode(polyNode)
self.npaths.append(polyNodePath)
self.accept("enterFloorPoly-%d" % n, self.printEntry)
for wall in DistributedPillow.walls:
ab = DistributedPillow.points[wall[0]]
bb = DistributedPillow.points[wall[1]]
cb = Point3(bb.getX(), bb.getY(), bb.getZ() + 15)
db = Point3(ab.getX(), ab.getY(), ab.getZ() + 15)
self.wallpolys.append(CollisionPolygon(ab, bb, cb, db))
for n, p in enumerate(self.wallpolys):
polyNode = CollisionNode("WallPoly-%d" % n)
polyNode.addSolid(p)
polyNode.setFromCollideMask(OTPGlobals.FloorBitmask)
polyNodePath = self.np.attachNewNode(polyNode)
self.npaths.append(polyNodePath)
def disable(self):
DistributedObject.disable(self)
self.floorpolys = []
self.wallpolys = []
self.npaths = []
if self.np:
self.np.removeNode()
self.np = None
if hasattr(self, 'loader'):
del self.loader
self.ignoreAll()
self.fsm.request('off')
def delete(self):
if self.np:
self.np.removeNode()
self.np = None
self.ignoreAll()
DistributedObject.delete(self)
del self.fsm
def enterOff(self):
pass
def exitOff(self):
pass
def enterBounce(self):
pass
def exitBounce(self):
pass
def printEntry(self, entry):
print(entry)