89 lines
3.4 KiB
Python
89 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()
|