Poodletooth-iLand/toontown/safezone/DistributedPillow.py
2015-06-01 16:14:34 -05:00

95 lines
3.8 KiB
Python

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
from toontown.toonbase import ToontownGlobals
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
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.gravityHigh)
self.accept("enterdonalds_dreamland", self.gravityLow)
for wall in DistributedPillow.walls:
ab = DistributedPillow.points[wall[0]]
bb = DistributedPillow.points[wall[1]]
cb = Point3(bb.getX(), bb.getY(), bb.getZ() + 20)
db = Point3(ab.getX(), ab.getY(), ab.getZ() + 20)
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
def delete(self):
if self.np:
self.np.removeNode()
self.np = None
DistributedObject.delete(self)
def gravityLow(self, entry):
base.localAvatar.controlManager.currentControls.setGravity(ToontownGlobals.GravityValue * 1.25)
def gravityHigh(self, entry):
base.localAvatar.controlManager.currentControls.setGravity(ToontownGlobals.GravityValue * 2.00)