toontown-just-works/toontown/minigame/TwoDSpawnPointMgr.py
2024-07-07 18:08:39 -05:00

88 lines
3.4 KiB
Python

from panda3d.core import *
from direct.directnotify import DirectNotifyGlobal
from direct.showbase.DirectObject import DirectObject
from toontown.minigame import ToonBlitzGlobals
from toontown.toonbase import ToontownGlobals
class TwoDSpawnPointMgr(DirectObject):
notify = DirectNotifyGlobal.directNotify.newCategory('TwoDSpawnPointMgr')
def __init__(self, section, spawnPointList):
self.section = section
self.game = self.section.sectionMgr.game
self.spawnPointList = spawnPointList
self.lastSavePoint = 0
self.showCollSpheres = False
self.savePoints = []
self.loadPoints = []
self.collNPList = []
self.collDict = {}
self.load()
def destroy(self):
while len(self.collNPList):
item = self.collNPList[0]
self.ignore('enter' + self.collNPList[0].node().getName())
self.collNPList.remove(item)
item.removeNode()
self.section = None
self.game = None
self.savePoints = None
self.loadPoints = None
self.collNPList = None
self.collDict = None
return
def load(self):
if len(self.spawnPointList):
self.spawnPointsNP = NodePath('SpawnPoints')
self.spawnPointsNP.reparentTo(self.section.sectionNP)
for point in self.spawnPointList:
if len(point) == 1:
savePoint = point[0]
loadPoint = point[0]
else:
savePoint = point[0]
loadPoint = point[1]
index = len(self.savePoints)
self.savePoints.append(savePoint)
self.loadPoints.append(loadPoint)
self.setupCollision(index)
def setupCollision(self, index):
collSphere = CollisionSphere(0, 0, 0, 3)
collSphereName = 'savePoint%s' % self.section.getSectionizedId(index)
collSphere.setTangible(0)
collNode = CollisionNode(self.game.uniqueName(collSphereName))
collNode.setIntoCollideMask(ToontownGlobals.WallBitmask)
collNode.addSolid(collSphere)
collNodePath = self.spawnPointsNP.attachNewNode(collNode)
collNodePath.hide()
if self.showCollSpheres:
collNodePath.show()
posX, posY, posZ = self.savePoints[index]
collNodePath.setPos(posX, posY, posZ)
self.collNPList.append(collNodePath)
self.collDict[collNodePath.getName()] = index
self.accept(self.game.uniqueName('enter' + collSphereName), self.handleSavePointCollision)
def handleSavePointCollision(self, cevent):
savePointName = cevent.getIntoNodePath().getName()
self.lastSavePoint = self.collDict[savePointName]
self.section.sectionMgr.updateActiveSection(self.section.indexNum)
def getSpawnPoint(self):
if len(self.loadPoints) > 0:
point = self.loadPoints[self.lastSavePoint]
return Point3(point[0], point[1], point[2])
else:
return Point3(ToonBlitzGlobals.ToonStartingPosition[0], ToonBlitzGlobals.ToonStartingPosition[1], ToonBlitzGlobals.ToonStartingPosition[2])
def setupLastSavePointHandle(self):
if len(self.collNPList) > 0:
self.accept('enter' + self.collNPList[-1].getName(), self.handleLastSavePointCollision)
self.gameEndX = self.collNPList[-1].getX(render)
def handleLastSavePointCollision(self, cevent):
self.game.localToonVictory()