toontown-just-works/toontown/coghq/DistributedLaserField.py
2024-07-07 18:08:39 -05:00

712 lines
27 KiB
Python

from panda3d.core import *
from direct.interval.IntervalGlobal import *
from StomperGlobals import *
from direct.distributed import ClockDelta
from direct.showbase.PythonUtil import lerp
import math
from otp.level import DistributedEntity
from direct.directnotify import DirectNotifyGlobal
from pandac.PandaModules import NodePath
from otp.level import BasicEntities
from direct.task import Task
from toontown.toonbase import ToontownGlobals
from toontown.coghq import BattleBlocker
from toontown.toonbase import TTLocalizer
import random
class DistributedLaserField(BattleBlocker.BattleBlocker):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLaserField')
laserFieldModels = ['phase_9/models/cogHQ/square_stomper']
def __init__(self, cr):
BattleBlocker.BattleBlocker.__init__(self, cr)
node = hidden.attachNewNode('DistributedNodePathEntity')
if not hasattr(self, 'radius'):
self.radius = 5
if not hasattr(self, 'blockerX'):
self.blockerX = 0.0
if not hasattr(self, 'blockerY'):
self.blockerY = 0.0
self.blockerZ = -10000
self.gridWireGN = None
self.gridBeamGN = None
self.traceWireGN = None
self.traceBeamGN = None
self.gridSeed = 0
self.gridScaleX = 2.0
self.gridScaleY = 2.0
self.zFloat = 0.05
self.projector = Point3(0, 0, 25)
self.tracePath = []
self.gridData = [[0, 0]] * 2
self.gridNumX = 2
self.gridNumY = 2
self.tracePath.append((0.51, 0.51, 1))
self.tracePath.append((0.59, 0.51, 1))
self.tracePath.append((0.55, 0.59, 1))
self.tracePath.append((0.51, 0.51, 1))
self.gridSymbols = []
self.makeGridSymbols()
self.isToonIn = 0
self.toonX = -1
self.toonY = -1
self.isToonInRange = 0
self.detectCount = 0
self.cameraHold = None
self.gridGame = 'some game'
self.gridGameText = ' '
self.activeLF = 1
self.successSound = loader.loadSfx('phase_11/audio/sfx/LB_capacitor_discharge_3.ogg')
self.successTrack = Parallel(SoundInterval(self.successSound, node=self, volume=0.8))
self.failSound = loader.loadSfx('phase_11/audio/sfx/LB_sparks_1.ogg')
self.failTrack = Parallel(SoundInterval(self.failSound, node=self, volume=0.8))
return
def generateInit(self):
self.notify.debug('generateInit')
BattleBlocker.BattleBlocker.generateInit(self)
def generate(self):
self.notify.debug('generate')
BasicEntities.DistributedNodePathEntity.generate(self)
def announceGenerate(self):
self.notify.debug('announceGenerate')
BattleBlocker.BattleBlocker.announceGenerate(self)
self.gridWireNode = self.attachNewNode('grid Wire Node')
self.gridWireGN = GeomNode('grid wire')
self.gridWireNode.attachNewNode(self.gridWireGN)
self.gridWireNode.setRenderModeWireframe()
self.gridWireNode.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))
self.gridWireNode.setTwoSided(True)
self.gridWireNode.setBin('fixed', 1)
self.gridWireNode.setDepthWrite(False)
self.gridBeamNode = self.attachNewNode('grid Beam Node')
self.gridBeamGN = GeomNode('grid beam')
self.gridBeamNode.attachNewNode(self.gridBeamGN)
self.gridBeamNode.setTransparency(TransparencyAttrib.MAlpha)
self.gridBeamNode.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))
self.gridBeamNode.setTwoSided(True)
self.gridBeamNode.setBin('fixed', 1)
self.gridBeamNode.setDepthWrite(False)
self.traceWireNode = self.attachNewNode('trace Wire Node')
self.traceWireGN = GeomNode('trace Wire')
self.traceWireNode.attachNewNode(self.traceWireGN)
self.traceWireNode.setRenderModeWireframe()
self.traceWireNode.setTransparency(TransparencyAttrib.MAlpha)
self.traceWireNode.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))
self.traceWireNode.setTwoSided(True)
self.traceWireNode.setBin('fixed', 1)
self.traceWireNode.setDepthWrite(False)
self.traceBeamNode = self.attachNewNode('trace Beam Node')
self.traceBeamGN = GeomNode('trace Beam')
self.traceBeamNode.attachNewNode(self.traceBeamGN)
self.traceBeamNode.setTransparency(TransparencyAttrib.MAlpha)
self.traceBeamNode.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))
self.traceBeamNode.setTwoSided(True)
self.traceBeamNode.setBin('fixed', 1)
self.traceBeamNode.setDepthWrite(False)
self.loadModel()
self.detectName = 'laserField %s' % self.doId
taskMgr.doMethodLater(0.1, self.__detect, self.detectName)
def setGridGame(self, gameName):
self.gridGame = gameName
self.gridGameText = gameName
if gameName == 'MineSweeper':
self.gridGameText = TTLocalizer.LaserGameMine
elif gameName == 'Roll':
self.gridGameText = TTLocalizer.LaserGameRoll
elif gameName == 'Avoid':
self.gridGameText = TTLocalizer.LaserGameAvoid
elif gameName == 'Drag':
self.gridGameText = TTLocalizer.LaserGameDrag
else:
self.gridGameText = TTLocalizer.LaserGameDefault
def setActiveLF(self, active = 1):
if active:
self.activeLF = 1
else:
self.activeLF = 0
def setSuccess(self, success):
if success:
self.successTrack.start()
else:
self.startBattle()
self.failTrack.start()
self.cSphereNodePath.setPos(self.blockerX, self.blockerY, 0)
def makeGridSymbols(self):
symbolBlank = [0, (1.0, 0.0, 0.0), ()]
symbolOne = [None, (1.0, 0.0, 0.0), ((0.45, 0.8),
(0.55, 0.8),
(0.55, 0.2),
(0.45, 0.2),
(0.45, 0.8))]
symbolTwo = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.7, 0.8),
(0.7, 0.45),
(0.4, 0.45),
(0.4, 0.3),
(0.7, 0.3),
(0.7, 0.2),
(0.3, 0.2),
(0.3, 0.55),
(0.6, 0.55),
(0.6, 0.7),
(0.3, 0.7),
(0.3, 0.8))]
symbolThree = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.3, 0.2),
(0.3, 0.3),
(0.6, 0.3),
(0.6, 0.45),
(0.4, 0.45),
(0.4, 0.55),
(0.6, 0.55),
(0.6, 0.7),
(0.3, 0.7),
(0.3, 0.8))]
symbolFour = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolFive = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolSix = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolSeven = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolEight = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolNine = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.4, 0.8),
(0.4, 0.6),
(0.6, 0.6),
(0.6, 0.8),
(0.7, 0.8),
(0.7, 0.2),
(0.6, 0.2),
(0.6, 0.5),
(0.3, 0.5),
(0.3, 0.8))]
symbolSquare = [None, (1.0, 0.0, 0.0), ((0.1, 0.9),
(0.9, 0.9),
(0.9, 0.1),
(0.1, 0.1),
(0.1, 0.9))]
symbolTriangle = [None, (0.0, 1.0, 0.0), ((0.1, 0.1),
(0.5, 0.9),
(0.9, 0.1),
(0.1, 0.1))]
symbolBlueSquare = [None, (0.3, 0.3, 1.0), ((0.1, 0.9),
(0.9, 0.9),
(0.9, 0.1),
(0.1, 0.1),
(0.1, 0.9))]
symbolHiddenBomb = [self.sendFail, (1.0, 0.0, 0.0), ((0.1, 0.9),
(0.9, 0.9),
(0.9, 0.1),
(0.1, 0.1),
(0.1, 0.9))]
symbolBomb = [self.sendFail, (1.0, 0.0, 0.0), ((0.8, 1.0),
(1.0, 0.8),
(0.8, 0.6),
(0.8, 0.4),
(0.6, 0.2),
(0.4, 0.2),
(0.2, 0.4),
(0.2, 0.6),
(0.4, 0.8),
(0.6, 0.8),
(0.8, 1.0))]
symbolSkull = [self.sendFail, (1.0, 0.0, 0.0), ((0.5, 0.9),
(0.7, 0.8),
(0.7, 0.6),
(0.6, 0.5),
(0.6, 0.4),
(0.5, 0.4),
(0.5, 0.3),
(0.7, 0.4),
(0.8, 0.4),
(0.8, 0.3),
(0.7, 0.3),
(0.6, 0.25),
(0.7, 0.2),
(0.8, 0.2),
(0.8, 0.1),
(0.7, 0.1),
(0.5, 0.2),
(0.3, 0.1),
(0.2, 0.1),
(0.2, 0.2),
(0.3, 0.2),
(0.4, 0.25),
(0.3, 0.3),
(0.2, 0.3),
(0.2, 0.4),
(0.3, 0.4),
(0.5, 0.3),
(0.5, 0.4),
(0.4, 0.4),
(0.4, 0.5),
(0.3, 0.6),
(0.3, 0.8),
(0.5, 0.9))]
symbolDot = [None, (1.0, 0.0, 0.0), ((0.4, 0.6),
(0.6, 0.6),
(0.6, 0.4),
(0.4, 0.4),
(0.4, 0.6))]
symbolRedX = [None, (1.0, 0.0, 0.0), ((0.3, 0.8),
(0.5, 0.6),
(0.7, 0.8),
(0.8, 0.7),
(0.6, 0.5),
(0.8, 0.3),
(0.7, 0.2),
(0.5, 0.4),
(0.3, 0.2),
(0.2, 0.3),
(0.4, 0.5),
(0.2, 0.7),
(0.3, 0.8))]
self.symbolSelect = [(1.0, 0.0, 0.0), ((0.05, 0.95),
(0.95, 0.95),
(0.95, 0.05),
(0.05, 0.05),
(0.05, 0.95))]
symbolBlueDot = [None, (0.5, 0.5, 1.0), ((0.5, 0.7),
(0.7, 0.5),
(0.5, 0.3),
(0.3, 0.5),
(0.5, 0.7))]
self.gridSymbols = []
self.gridSymbols.append(symbolBlank)
self.gridSymbols.append(symbolOne)
self.gridSymbols.append(symbolTwo)
self.gridSymbols.append(symbolThree)
self.gridSymbols.append(symbolFour)
self.gridSymbols.append(symbolFive)
self.gridSymbols.append(symbolSix)
self.gridSymbols.append(symbolSeven)
self.gridSymbols.append(symbolEight)
self.gridSymbols.append(symbolNine)
self.gridSymbols.append(symbolSquare)
self.gridSymbols.append(symbolHiddenBomb)
self.gridSymbols.append(symbolSkull)
self.gridSymbols.append(symbolTriangle)
self.gridSymbols.append(symbolDot)
self.gridSymbols.append(symbolBlueSquare)
self.gridSymbols.append(symbolRedX)
self.gridSymbols.append(symbolBlueDot)
return None
def sendFail(self):
self.sendUpdate('trapFire', [])
def __detect(self, task):
distance = self.centerNode.getDistance(localAvatar)
greaterDim = self.gridScaleX
if self.gridScaleY > self.gridScaleX:
greaterDim = self.gridScaleY
self.detectCount += 1
if self.detectCount > 5:
self.detectCount = 0
if distance < greaterDim * 0.75:
if not self.isToonInRange:
self.doToonInRange()
if localAvatar.getPos(self)[0] > 0 and localAvatar.getPos(self)[0] < self.gridScaleX and localAvatar.getPos(self)[1] > 0 and localAvatar.getPos(self)[1] < self.gridScaleY:
self.__toonHit()
else:
if self.isToonIn:
self.toonX = -1
self.toonY = -1
self.isToonIn = 0
self.genGrid()
self.isToonIn = 0
elif self.isToonInRange:
self.doToonOutOfRange()
taskMgr.doMethodLater(0.1, self.__detect, self.detectName)
return Task.done
def doToonInRange(self):
self.isToonInRange = 1
if self.activeLF:
camHeight = base.localAvatar.getClampedAvatarHeight()
heightScaleFactor = camHeight * 0.3333333333
defLookAt = Point3(0.0, 1.5, camHeight)
cameraPoint = Point3(0.0, -20.0 * heightScaleFactor, camHeight + 8.0)
base.localAvatar.setIdealCameraPos(cameraPoint)
self.level.stage.showInfoText(self.gridGameText)
def doToonOutOfRange(self):
self.isToonInRange = 0
base.localAvatar.setCameraPositionByIndex(base.localAvatar.cameraIndex)
self.cameraHold = None
return
def __toonHit(self):
posX = localAvatar.getPos(self)[0]
posY = localAvatar.getPos(self)[1]
tileX = int(posX / (self.gridScaleX / self.gridNumX))
tileY = int(posY / (self.gridScaleY / self.gridNumY))
oldX = self.toonX
oldY = self.toonY
if self.toonX != tileX or self.toonY != tileY or not self.isToonIn:
self.toonX = tileX
self.toonY = tileY
self.isToonIn = 1
if self.gridData[tileX][tileY] < len(self.gridSymbols):
tileFunction = self.gridSymbols[self.gridData[tileX][tileY]][0]
if tileFunction:
tileFunction()
self.sendHit(self.toonX, self.toonY, oldX, oldY)
self.genGrid()
self.isToonIn = 1
def __testTile(self):
if self.toonX >= 0 and self.toonY >= 0 and self.toonX < self.gridNumX and self.toonY < self.gridNumY:
if self.gridData[self.toonX][self.toonY] < len(self.gridSymbols):
tileFunction = self.gridSymbols[self.gridData[self.toonX][self.toonY]][0]
if tileFunction:
tileFunction()
def sendHit(self, newX, newY, oldX, oldY):
if self.toonX >= 0:
self.sendUpdate('hit', [newX,
newY,
oldX,
oldY])
def disable(self):
self.notify.debug('disable')
if self.failTrack.isPlaying():
self.failTrack.finish()
if self.successTrack.isPlaying():
self.successTrack.finish()
self.ignoreAll()
taskMgr.remove(self.detectName)
BattleBlocker.BattleBlocker.disable(self)
def delete(self):
self.notify.debug('delete')
self.unloadModel()
BattleBlocker.BattleBlocker.delete(self)
def loadModel(self):
self.rotateNode = self.attachNewNode('rotate')
self.model = None
self.centerNode = self.attachNewNode('center')
self.centerNode.setPos(self.gridScaleX * 0.5, self.gridScaleY * 0.5, 0.0)
self.genGrid()
return
def unloadModel(self):
if self.model:
self.model.removeNode()
del self.model
self.model = None
return
def genTrace(self):
wireRed = 1.0
wireGreen = 0.0
wireBlue = 0.0
wireAlpha = 0.5
beamRed = 0.04
beamGreen = 0.0
beamBlue = 0.0
beamAlpha = 0.1
self.gFormat = GeomVertexFormat.getV3cp()
self.traceWireVertexData = GeomVertexData('holds my vertices', self.gFormat, Geom.UHDynamic)
self.traceWireVertexWriter = GeomVertexWriter(self.traceWireVertexData, 'vertex')
self.traceWireColorWriter = GeomVertexWriter(self.traceWireVertexData, 'color')
self.traceBeamVertexData = GeomVertexData('holds my vertices', self.gFormat, Geom.UHDynamic)
self.traceBeamVertexWriter = GeomVertexWriter(self.traceBeamVertexData, 'vertex')
self.traceBeamColorWriter = GeomVertexWriter(self.traceBeamVertexData, 'color')
self.traceWireVertexWriter.addData3f(self.projector[0], self.projector[1], self.projector[2])
self.traceWireColorWriter.addData4f(wireRed, wireGreen, wireBlue, wireAlpha)
self.traceBeamVertexWriter.addData3f(self.projector[0], self.projector[1], self.projector[2])
self.traceBeamColorWriter.addData4f(0.0, 0.0, 0.0, 0.0)
for vertex in self.tracePath:
self.traceWireVertexWriter.addData3f(vertex[0] * self.gridScaleX, vertex[1] * self.gridScaleY, self.zFloat)
self.traceWireColorWriter.addData4f(wireRed, wireGreen, wireBlue, wireAlpha)
self.traceBeamVertexWriter.addData3f(vertex[0] * self.gridScaleX, vertex[1] * self.gridScaleY, self.zFloat)
self.traceBeamColorWriter.addData4f(beamRed, beamGreen, beamBlue, beamAlpha)
self.traceBeamTris = GeomTriangles(Geom.UHStatic)
self.traceWireTris = GeomLinestrips(Geom.UHStatic)
vertexCounter = 1
sizeTrace = len(self.tracePath)
chainTrace = sizeTrace - 1
previousTrace = 1
for countVertex in xrange(0, sizeTrace):
self.traceWireTris.addVertex(countVertex + 1)
self.traceWireTris.closePrimitive()
for countVertex in xrange(0, chainTrace):
self.traceBeamTris.addVertex(0)
self.traceBeamTris.addVertex(countVertex + 1)
self.traceBeamTris.addVertex(countVertex + 2)
self.traceBeamTris.closePrimitive()
self.traceWireGeom = Geom(self.traceWireVertexData)
self.traceWireGeom.addPrimitive(self.traceWireTris)
self.traceWireGN.addGeom(self.traceWireGeom)
self.traceBeamGeom = Geom(self.traceBeamVertexData)
self.traceBeamGeom.addPrimitive(self.traceBeamTris)
self.traceBeamGN.addGeom(self.traceBeamGeom)
def createGrid(self):
gridScaleX = self.gridScaleX / self.gridNumX
gridScaleY = self.gridScaleY / self.gridNumY
red = 0.25
green = 0.25
blue = 0.25
alpha = 0.5
beamRed = 0.04
beamGreen = 0.04
beamBlue = 0.04
beamAlpha = 0.1
self.gFormat = GeomVertexFormat.getV3cp()
self.gridVertexData = GeomVertexData('holds my vertices', self.gFormat, Geom.UHDynamic)
self.gridVertexWriter = GeomVertexWriter(self.gridVertexData, 'vertex')
self.gridColorWriter = GeomVertexWriter(self.gridVertexData, 'color')
self.beamVertexData = GeomVertexData('holds my vertices', self.gFormat, Geom.UHDynamic)
self.beamVertexWriter = GeomVertexWriter(self.beamVertexData, 'vertex')
self.beamColorWriter = GeomVertexWriter(self.beamVertexData, 'color')
self.gridVertexWriter.addData3f(self.projector[0], self.projector[1], self.projector[2])
self.gridColorWriter.addData4f(red, green, blue, 0.0)
self.beamVertexWriter.addData3f(self.projector[0], self.projector[1], self.projector[2])
self.beamColorWriter.addData4f(0.0, 0.0, 0.0, 0.0)
border = 0.4
for column in xrange(0, self.gridNumX):
columnLeft = 0.0 + gridScaleX * column
columnRight = columnLeft + gridScaleX
rowBottom = 0
for row in xrange(0, self.gridNumY):
rowTop = rowBottom + gridScaleY
if self.gridData[column][row] and self.gridData[column][row] < len(self.gridSymbols):
gridColor = self.gridSymbols[self.gridData[column][row]][1]
gridSymbol = self.gridSymbols[self.gridData[column][row]][2]
sizeSymbol = len(gridSymbol)
for iVertex in xrange(sizeSymbol):
vertex = gridSymbol[iVertex]
self.gridVertexWriter.addData3f(columnLeft + vertex[0] * gridScaleX, rowBottom + vertex[1] * gridScaleY, self.zFloat)
self.gridColorWriter.addData4f(gridColor[0] * red, gridColor[1] * green, gridColor[2] * blue, alpha)
self.beamVertexWriter.addData3f(columnLeft + vertex[0] * gridScaleX, rowBottom + vertex[1] * gridScaleY, self.zFloat)
self.beamColorWriter.addData4f(gridColor[0] * beamRed, gridColor[1] * beamGreen, gridColor[2] * beamBlue, beamAlpha)
rowBottom = rowTop
if self.isToonIn:
gridSymbol = self.symbolSelect[1]
gridColor = self.symbolSelect[0]
sizeSymbol = len(gridSymbol)
for iVertex in xrange(sizeSymbol):
vertex = gridSymbol[iVertex]
self.gridVertexWriter.addData3f(self.toonX * gridScaleX + vertex[0] * gridScaleX, self.toonY * gridScaleY + vertex[1] * gridScaleY, self.zFloat)
self.gridColorWriter.addData4f(gridColor[0] * red, gridColor[1] * green, gridColor[2] * blue, alpha)
self.beamVertexWriter.addData3f(self.toonX * gridScaleX + vertex[0] * gridScaleX, self.toonY * gridScaleY + vertex[1] * gridScaleY, self.zFloat)
self.beamColorWriter.addData4f(gridColor[0] * beamRed, gridColor[1] * beamGreen, gridColor[2] * beamBlue, beamAlpha)
self.gridTris = GeomLinestrips(Geom.UHDynamic)
self.beamTris = GeomTriangles(Geom.UHDynamic)
vertexCounter = 1
for column in xrange(0, self.gridNumX):
for row in xrange(0, self.gridNumY):
if self.gridData[column][row] and self.gridData[column][row] < len(self.gridSymbols):
gridSymbol = self.gridSymbols[self.gridData[column][row]][2]
sizeSymbol = len(gridSymbol)
for iVertex in xrange(sizeSymbol):
self.gridTris.addVertex(vertexCounter + iVertex)
self.gridTris.closePrimitive()
for iVertex in xrange(sizeSymbol - 1):
self.beamTris.addVertex(0)
self.beamTris.addVertex(vertexCounter + iVertex + 0)
self.beamTris.addVertex(vertexCounter + iVertex + 1)
self.beamTris.closePrimitive()
vertexCounter += sizeSymbol
if self.isToonIn:
gridSymbol = self.symbolSelect[1]
sizeSymbol = len(gridSymbol)
for iVertex in xrange(sizeSymbol):
self.gridTris.addVertex(vertexCounter + iVertex)
self.gridTris.closePrimitive()
for iVertex in xrange(sizeSymbol - 1):
self.beamTris.addVertex(0)
self.beamTris.addVertex(vertexCounter + iVertex + 0)
self.beamTris.addVertex(vertexCounter + iVertex + 1)
self.beamTris.closePrimitive()
self.wireGeom = Geom(self.gridVertexData)
self.wireGeom.addPrimitive(self.gridTris)
self.gridWireGN.addGeom(self.wireGeom)
self.beamGeom = Geom(self.beamVertexData)
self.beamGeom.addPrimitive(self.beamTris)
self.gridBeamGN.addGeom(self.beamGeom)
def setGrid(self, gridNumX, gridNumY):
self.gridNumX = gridNumX
self.gridNumY = gridNumY
self.gridData = []
for i in xrange(0, gridNumX):
self.gridData.append([0] * gridNumY)
self.genGrid()
def getGrid(self):
return (self.gridNumX, self.gridNumY)
def setGridScaleX(self, gridScale):
self.gridScaleX = gridScale
self.centerNode.setPos(self.gridScaleX * 0.5, self.gridScaleY * 0.5, 0.0)
self.blockerX = self.gridScaleX * 0.5
self.cSphereNodePath.setPos(self.blockerX, self.blockerY, self.blockerZ)
self.genGrid()
def setGridScaleY(self, gridScale):
self.gridScaleY = gridScale
self.centerNode.setPos(self.gridScaleX * 0.5, self.gridScaleY * 0.5, 0.0)
self.blockerY = self.gridScaleY
self.cSphereNodePath.setPos(self.blockerX, self.blockerY, self.blockerZ)
self.genGrid()
def setField(self, fieldData):
if fieldData[0] != self.gridNumX or fieldData[1] != self.gridNumY:
self.setGrid(fieldData[0], fieldData[1])
fieldCounter = 2
for column in xrange(0, self.gridNumX):
for row in xrange(0, self.gridNumY):
if len(fieldData) > fieldCounter:
self.gridData[column][row] = fieldData[fieldCounter]
fieldCounter += 1
self.genGrid()
self.__testTile()
def getField(self):
fieldData.append(self.game.gridNumX)
fieldData.append(self.game.gridNumY)
fieldData = []
for column in xrange(0, self.game.gridNumX):
for row in xrange(0, self.game.gridNumY):
fieldData.append(self.game.gridData[column][row])
return fieldData
def setSeed(self, seed):
self.gridSeed = seed
random.seed(seed)
for column in xrange(0, self.gridNumX):
for row in xrange(0, self.gridNumY):
rint = random.randint(0, 2)
self.gridData[column][row] = rint
self.genGrid()
def getSeed(self):
return self.gridSeed
def setMode(self, mode):
self.mode = mode
def getMode(self):
return self.mode
def setProjector(self, projPoint):
self.projector = projPoint
if self.gridWireGN and self.gridBeamGN:
self.genGrid()
def genGrid(self):
if self.activeLF:
if self.gridWireGN:
self.gridWireGN.removeAllGeoms()
if self.gridBeamGN:
self.gridBeamGN.removeAllGeoms()
if self.gridWireGN and self.gridBeamGN:
self.createGrid()
def hideSuit(self, suitIdarray):
for suitId in suitIdarray:
suit = base.cr.doId2do.get(suitId)
if suit:
suit.stash()
def showSuit(self, suitIdarray):
for suitId in suitIdarray:
suit = base.cr.doId2do.get(suitId)
if suit:
suit.unstash()
suit.setVirtual()
def initCollisionGeom(self):
print 'Laser Field initCollisionGeom'
self.blockerX = self.gridScaleX * 0.5
self.blockerY = self.gridScaleY
self.cSphere = CollisionSphere(0, 0, 0, self.blockerX)
self.cSphereNode = CollisionNode('battleBlocker-%s-%s' % (self.level.getLevelId(), self.entId))
self.cSphereNode.addSolid(self.cSphere)
self.cSphereNodePath = self.attachNewNode(self.cSphereNode)
self.cSphereNodePath.setPos(self.blockerX, self.blockerY, self.blockerZ)
self.cSphereNode.setCollideMask(ToontownGlobals.WallBitmask)
self.cSphere.setTangible(0)
self.enterEvent = 'enter' + self.cSphereNode.getName()
self.accept(self.enterEvent, self.__handleToonEnter)
def __handleToonEnter(self, collEntry):
self.notify.debug('__handleToonEnter, %s' % self.entId)
self.sendFail()