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()