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))