mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 20:52:26 -06:00
95 lines
3.8 KiB
Python
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)
|