oldschool-toontown/toontown/coghq/DistributedLaserField.py

716 lines
27 KiB
Python
Raw Normal View History

from panda3d.core import *
2019-11-02 17:27:54 -05:00
from direct.interval.IntervalGlobal import *
from .StomperGlobals import *
2019-11-02 17:27:54 -05:00
from direct.distributed import ClockDelta
from direct.showbase.PythonUtil import lerp
import math
from otp.level import DistributedEntity
from direct.directnotify import DirectNotifyGlobal
from panda3d.core import NodePath
2019-11-02 17:27:54 -05:00
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
2020-01-14 13:28:52 -06:00
self.successSound = loader.loadSfx('phase_11/audio/sfx/LB_capacitor_discharge_3.ogg')
2019-11-02 17:27:54 -05:00
self.successTrack = Parallel(SoundInterval(self.successSound, node=self, volume=0.8))
2020-01-14 13:28:52 -06:00
self.failSound = loader.loadSfx('phase_11/audio/sfx/LB_sparks_1.ogg')
2019-11-02 17:27:54 -05:00
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 initCollisionGeom(self):
pass
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 range(0, sizeTrace):
self.traceWireTris.addVertex(countVertex + 1)
self.traceWireTris.closePrimitive()
for countVertex in range(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 range(0, self.gridNumX):
columnLeft = 0.0 + gridScaleX * column
columnRight = columnLeft + gridScaleX
rowBottom = 0
for row in range(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 range(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 range(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 range(0, self.gridNumX):
for row in range(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 range(sizeSymbol):
self.gridTris.addVertex(vertexCounter + iVertex)
self.gridTris.closePrimitive()
for iVertex in range(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 range(sizeSymbol):
self.gridTris.addVertex(vertexCounter + iVertex)
self.gridTris.closePrimitive()
for iVertex in range(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 range(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 range(0, self.gridNumX):
for row in range(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 range(0, self.game.gridNumX):
for row in range(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 range(0, self.gridNumX):
for row in range(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')
2019-11-02 17:27:54 -05:00
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()