mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 11:42:39 -06:00
713 lines
27 KiB
Python
713 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()
|