62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
from otp.ai.AIBaseGlobal import *
|
|
from direct.distributed import DistributedObjectAI
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed import ClockDelta
|
|
from FireworkShow import FireworkShow
|
|
from FireworkShows import getShowDuration
|
|
import random
|
|
from direct.task import Task
|
|
|
|
class DistributedFireworkShowAI(DistributedObjectAI.DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFireworkShowAI')
|
|
|
|
def __init__(self, air, fireworkMgr = None):
|
|
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
|
self.fireworkMgr = fireworkMgr
|
|
self.eventId = None
|
|
self.style = None
|
|
self.timestamp = None
|
|
self.throwAwayShow = FireworkShow()
|
|
return
|
|
|
|
def delete(self):
|
|
del self.throwAwayShow
|
|
taskMgr.remove(self.taskName('waitForShowDone'))
|
|
DistributedObjectAI.DistributedObjectAI.delete(self)
|
|
|
|
def d_startShow(self, eventId, style):
|
|
timestamp = ClockDelta.globalClockDelta.getRealNetworkTime()
|
|
self.eventId = eventId
|
|
self.style = style
|
|
self.timestamp = timestamp
|
|
self.sendUpdate('startShow', (self.eventId, self.style, self.timestamp))
|
|
if simbase.air.config.GetBool('want-old-fireworks', 0):
|
|
duration = getShowDuration(self.eventId, self.style)
|
|
taskMgr.doMethodLater(duration, self.fireworkShowDone, self.taskName('waitForShowDone'))
|
|
else:
|
|
duration = self.throwAwayShow.getShowDuration(self.eventId)
|
|
duration += 20.0
|
|
taskMgr.doMethodLater(duration, self.fireworkShowDone, self.taskName('waitForShowDone'))
|
|
|
|
def fireworkShowDone(self, task):
|
|
self.notify.debug('fireworkShowDone')
|
|
if self.fireworkMgr:
|
|
self.fireworkMgr.stopShow(self.zoneId)
|
|
return Task.done
|
|
|
|
def requestFirework(self, x, y, z, style, color1, color2):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
self.notify.debug('requestFirework: avId: %s, style: %s' % (avId, style))
|
|
if self.fireworkMgr:
|
|
if self.fireworkMgr.isShowRunning(self.zoneId):
|
|
self.d_shootFirework(x, y, z, style, color1, color2)
|
|
else:
|
|
self.d_shootFirework(x, y, z, style, color1, color2)
|
|
|
|
def d_shootFirework(self, x, y, z, style, color1, color2):
|
|
self.sendUpdate('shootFirework', (x,
|
|
y,
|
|
z,
|
|
style,
|
|
color1,
|
|
color2))
|