2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
|
|
from direct.interval.IntervalGlobal import *
|
|
|
|
from direct.distributed.ClockDelta import *
|
2019-12-30 00:07:56 -06:00
|
|
|
from .HouseGlobals import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.effects import DistributedFireworkShow
|
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
from toontown.toonbase import TTLocalizer
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import CollisionSphere
|
|
|
|
from panda3d.core import CollisionNode
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import FireworksGui
|
2019-11-02 17:27:54 -05:00
|
|
|
|
|
|
|
class DistributedFireworksCannon(DistributedFireworkShow.DistributedFireworkShow):
|
|
|
|
notify = directNotify.newCategory('DistributedFireworksCannon')
|
|
|
|
|
|
|
|
def __init__(self, cr):
|
|
|
|
DistributedFireworkShow.DistributedFireworkShow.__init__(self, cr)
|
|
|
|
self.fireworksGui = None
|
|
|
|
self.load()
|
|
|
|
return
|
|
|
|
|
|
|
|
def generateInit(self):
|
|
|
|
DistributedFireworkShow.DistributedFireworkShow.generateInit(self)
|
|
|
|
self.fireworksSphereEvent = self.uniqueName('fireworksSphere')
|
|
|
|
self.fireworksSphereEnterEvent = 'enter' + self.fireworksSphereEvent
|
|
|
|
self.fireworksGuiDoneEvent = 'fireworksGuiDone'
|
|
|
|
self.shootEvent = 'fireworkShootEvent'
|
|
|
|
self.collSphere = CollisionSphere(0, 0, 0, 2.5)
|
|
|
|
self.collSphere.setTangible(1)
|
|
|
|
self.collNode = CollisionNode(self.fireworksSphereEvent)
|
|
|
|
self.collNode.setIntoCollideMask(ToontownGlobals.WallBitmask)
|
|
|
|
self.collNode.addSolid(self.collSphere)
|
|
|
|
self.collNodePath = self.geom.attachNewNode(self.collNode)
|
|
|
|
|
|
|
|
def generate(self):
|
|
|
|
DistributedFireworkShow.DistributedFireworkShow.generate(self)
|
|
|
|
|
|
|
|
def announceGenerate(self):
|
|
|
|
self.notify.debug('announceGenerate')
|
|
|
|
self.accept(self.fireworksSphereEnterEvent, self.__handleEnterSphere)
|
|
|
|
|
|
|
|
def disable(self):
|
|
|
|
self.notify.debug('disable')
|
|
|
|
self.ignore(self.fireworksSphereEnterEvent)
|
|
|
|
self.ignore(self.shootEvent)
|
|
|
|
self.ignore(self.fireworksGuiDoneEvent)
|
|
|
|
if self.fireworksGui:
|
|
|
|
self.fireworksGui.destroy()
|
|
|
|
self.fireworksGui = None
|
|
|
|
DistributedFireworkShow.DistributedFireworkShow.disable(self)
|
|
|
|
return
|
|
|
|
|
|
|
|
def delete(self):
|
|
|
|
self.notify.debug('delete')
|
|
|
|
self.geom.removeNode()
|
|
|
|
DistributedFireworkShow.DistributedFireworkShow.delete(self)
|
|
|
|
|
|
|
|
def load(self):
|
|
|
|
self.geom = loader.loadModel('phase_5/models/props/trashcan_TT.bam')
|
|
|
|
self.geom.reparentTo(base.cr.playGame.hood.loader.geom)
|
|
|
|
self.geom.setScale(0.5)
|
|
|
|
|
|
|
|
def __handleEnterSphere(self, collEntry):
|
|
|
|
self.notify.debug('handleEnterSphere()')
|
|
|
|
self.ignore(self.fireworksSphereEnterEvent)
|
|
|
|
self.sendUpdate('avatarEnter', [])
|
|
|
|
|
|
|
|
def __handleFireworksDone(self):
|
|
|
|
self.ignore(self.fireworksGuiDoneEvent)
|
|
|
|
self.ignore(self.shootEvent)
|
|
|
|
self.sendUpdate('avatarExit')
|
|
|
|
self.fireworksGui.destroy()
|
|
|
|
self.fireworksGui = None
|
|
|
|
return
|
|
|
|
|
|
|
|
def freeAvatar(self):
|
|
|
|
base.localAvatar.posCamera(0, 0)
|
|
|
|
base.cr.playGame.getPlace().setState('walk')
|
|
|
|
self.accept(self.fireworksSphereEnterEvent, self.__handleEnterSphere)
|
|
|
|
|
|
|
|
def setMovie(self, mode, avId, timestamp):
|
|
|
|
timeStamp = globalClockDelta.localElapsedTime(timestamp)
|
|
|
|
isLocalToon = avId == base.localAvatar.doId
|
|
|
|
if mode == FIREWORKS_MOVIE_CLEAR:
|
|
|
|
self.notify.debug('setMovie: clear')
|
|
|
|
return
|
|
|
|
elif mode == FIREWORKS_MOVIE_GUI:
|
|
|
|
self.notify.debug('setMovie: gui')
|
|
|
|
if isLocalToon:
|
|
|
|
self.fireworksGui = FireworksGui.FireworksGui(self.fireworksGuiDoneEvent, self.shootEvent)
|
|
|
|
self.accept(self.fireworksGuiDoneEvent, self.__handleFireworksDone)
|
|
|
|
self.accept(self.shootEvent, self.localShootFirework)
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
self.notify.warning('unknown mode in setMovie: %s' % mode)
|
|
|
|
|
|
|
|
def setPosition(self, x, y, z):
|
|
|
|
self.pos = [x, y, z]
|
|
|
|
self.geom.setPos(x, y, z)
|
|
|
|
|
|
|
|
def localShootFirework(self, index):
|
|
|
|
style = index
|
|
|
|
col1, col2 = self.fireworksGui.getCurColor()
|
|
|
|
amp = 30
|
|
|
|
dummy = base.localAvatar.attachNewNode('dummy')
|
|
|
|
dummy.setPos(0, 100, 60)
|
|
|
|
pos = dummy.getPos(render)
|
|
|
|
dummy.removeNode()
|
2019-12-30 00:07:56 -06:00
|
|
|
print('lauFirework: %s, col=%s' % (index, col1))
|
2019-11-02 17:27:54 -05:00
|
|
|
self.d_requestFirework(pos[0], pos[1], pos[2], style, col1, col2)
|