示例#1
0
    def __init__(self,
                 exhaustEffectsDescriptor,
                 drawOrder,
                 uniqueEffects=None):
        if uniqueEffects is None:
            self.__uniqueEffects = {}
        else:
            self.__uniqueEffects = {
                name: effect.clone()
                for name, effect in uniqueEffects.iteritems()
            }
        self.__tables = []
        self.__maxDrawOrder = drawOrder - 1
        self.__node = None
        for rangeTable in exhaustEffectsDescriptor.tables:
            effectsValues = []
            for name in rangeTable.values:
                effect = self.__uniqueEffects.get(name)
                if effect is None:
                    elemDesc = [name, effectsValues]
                    Pixie.createBG(
                        name,
                        restrictBySpace(self._callbackExhaustPixieLoaded,
                                        elemDesc))
                else:
                    effectsValues.append(effect)

            self.__tables.append(RangeTable(rangeTable.keys, effectsValues))

        if self.__maxDrawOrder < drawOrder:
            self.__maxDrawOrder = drawOrder
        self.__activeEffect = None
        return
示例#2
0
    def __createTrailParticlesIfNeeded(self, node, iTrack, effectGroup, effectIndex, drawOrder, isActiveNode):
        if effectIndex is None:
            return
        effectDesc = self.__vehicle.typeDescriptor.chassis['effects'].get(effectGroup)
        if effectDesc is None:
            return
        effectName = effectDesc[0].get(effectIndex)
        if effectName is None or effectName == 'none' or effectName == 'None':
            return
        if isinstance(effectName, list):
            effectIdx = iTrack
            effectIdx += 0 if isActiveNode else 2
            effectName = effectName[effectIdx]
        nodeEffects = self.__trailParticles.get(node)
        if nodeEffects is None:
            nodeEffects = []
            self.__trailParticles[node] = nodeEffects
        else:
            for nodeEffect in nodeEffects:
                createdForActiveNode = nodeEffect[5]
                if nodeEffect[1] == effectIndex and createdForActiveNode == isActiveNode:
                    return

        elemDesc = [drawOrder,
         node,
         effectName,
         effectIndex,
         isActiveNode,
         nodeEffects]
        Pixie.createBG(effectName, partial(self._callbackTrailParticleLoaded, elemDesc))
示例#3
0
    def __createTrailParticlesIfNeeded(self, node, iTrack, effectGroup, effectIndex, drawOrder, isActiveNode):
        if effectIndex is None:
            return
        else:
            effectDesc = self.__vehicle.typeDescriptor.chassis['effects'].get(effectGroup)
            if effectDesc is None:
                return
            effectName = effectDesc[0].get(effectIndex)
            if effectName is None or effectName == 'none' or effectName == 'None':
                return
            if isinstance(effectName, list):
                effectIdx = iTrack
                effectIdx += 0 if isActiveNode else 2
                effectName = effectName[effectIdx]
            nodeEffects = self.__trailParticles.get(node)
            if nodeEffects is None:
                nodeEffects = []
                self.__trailParticles[node] = nodeEffects
            else:
                for nodeEffect in nodeEffects:
                    createdForActiveNode = nodeEffect[5]
                    if nodeEffect[1] == effectIndex and createdForActiveNode == isActiveNode:
                        return

            elemDesc = [drawOrder,
             node,
             effectName,
             effectIndex,
             isActiveNode,
             nodeEffects]
            Pixie.createBG(effectName, partial(self._callbackTrailParticleLoaded, elemDesc))
            return
示例#4
0
 def create(self, model, list, args):
     elem = {}
     elem['newPos'] = args.get('position', None)
     nodePos = self._pos
     if elem['newPos'] is not None:
         nodePos = string.split(elem['newPos'][0], '/') if elem['newPos'][0] else []
     scale = args.get('scale')
     if scale is not None:
         elem['scale'] = scale
     elem['surfaceNormal'] = args.get('surfaceNormal', None)
     surfaceMatKind = args.get('surfaceMatKind', None)
     if surfaceMatKind is not None and self._surfaceMatKinds is not None:
         if surfaceMatKind not in self._surfaceMatKinds:
             return
     elem['node'] = _findTargetNode(model, nodePos, elem['newPos'][1] if elem['newPos'] else None, self._orientByClosestSurfaceNormal, elem['surfaceNormal'])
     elem['model'] = model
     elem['typeDesc'] = self
     elem['pixie'] = None
     elem['cancelLoadCallback'] = False
     elem['callbackID'] = None
     if self._havokFiles is None:
         file = random.choice(self._files)
     else:
         file, fileToClear = random.choice(zip(self._files, self._havokFiles))
         if args.get('havokEnabled', False):
             file, fileToClear = fileToClear, file
         self.__prototypePixies.pop(fileToClear, None)
     prototypePixie = self.__prototypePixies.get(file)
     if prototypePixie is not None:
         elem['pixie'] = prototypePixie.clone()
         self._callbackCreate(elem)
     else:
         elem['file'] = file
         Pixie.createBG(file, partial(self._callbackAfterLoading, elem))
     list.append(elem)
示例#5
0
 def create(self, model, list, args):
     elem = {}
     elem['newPos'] = args.get('position', None)
     nodePos = self._pos
     if elem['newPos'] is not None:
         nodePos = string.split(elem['newPos'][0], '/') if elem['newPos'][0] else []
     scale = args.get('scale')
     if scale is not None:
         elem['scale'] = scale
     elem['surfaceNormal'] = args.get('surfaceNormal', None)
     surfaceMatKind = args.get('surfaceMatKind', None)
     if surfaceMatKind is not None and self._surfaceMatKinds is not None:
         if surfaceMatKind not in self._surfaceMatKinds:
             return
     elem['node'] = _findTargetNode(model, nodePos, elem['newPos'][1] if elem['newPos'] else None, self._orientByClosestSurfaceNormal, elem['surfaceNormal'])
     elem['model'] = model
     elem['typeDesc'] = self
     elem['pixie'] = None
     elem['cancelLoadCallback'] = False
     elem['callbackID'] = None
     if self._alwaysUpdate:
         BigWorld.addAlwaysUpdateModel(model)
     file = random.choice(self._files)
     prototypePixie = self.__prototypePixies.get(file)
     if prototypePixie is not None:
         elem['pixie'] = prototypePixie.clone()
         elem['callbackID'] = BigWorld.callback(0.001, partial(self._callbackCreate, elem))
     else:
         elem['file'] = file
         Pixie.createBG(file, partial(self._callbackAfterLoading, elem))
     list.append(elem)
     return
 def __init__(self, properties, attachProperties, effectManager):
     EffectBase.__init__(self, properties, attachProperties, effectManager)
     self.__pixie = None
     particleFile = self.properties['particleFile']
     if particleFile is not None and particleFile != '':
         Pixie.createBG(particleFile, self.__onParticleLoaded)
     return
示例#7
0
 def __init__(self, name, onLoadCallback, pixie = None):
     if pixie is None:
         self.__loader = stricted_loading.restrictBySpace(self.__onLoad)
         self.__callback = onLoadCallback
     else:
         self.__loader = None
         self.__callback = None
     self.name = name
     self.pixie = pixie
     Pixie.createBG(name, self.__loader)
     return
示例#8
0
 def __init__(self, name, onLoadCallback, pixie = None):
     if pixie is None:
         self.__loader = stricted_loading.restrictBySpace(self.__onLoad)
         self.__callback = onLoadCallback
     else:
         self.__loader = None
         self.__callback = None
     self.name = name
     self.pixie = pixie
     Pixie.createBG(name, self.__loader)
     return
 def __init__(self, properties, attachProperties, effectManager):
     EffectBase.__init__(self, properties, attachProperties, effectManager)
     self.callbackId = None
     self.__pixie = None
     self.__triggered = properties.get('alias', None) is not None
     self.force = 0
     if 'force' in self.properties:
         self.force = int(self.properties['force'])
     particleFile = self.properties['particleFile']
     if particleFile is not None and particleFile != '':
         Pixie.createBG(particleFile, self.__onParticleLoaded)
     return
示例#10
0
 def __init__(self, name, onLoadCallback, pixie=None, data=None, modifiers=None):
     self.name = name
     self.pixie = pixie
     self.__data = data
     if pixie is None:
         self.__loader = stricted_loading.restrictBySpace(self.__onLoad)
         self.__callback = onLoadCallback
         Pixie.createBG(name, self.__loader, modifiers)
     else:
         self.__loader = None
         self.__callback = None
         if modifiers is not None:
             self.pixie.applyModifiers(modifiers)
     return
示例#11
0
 def __update(self):
     self.__cbID = None
     visibility = self.__motor.warplaneAlpha
     if self.__sound is not None and self.__sound.isPlaying:
         self.__sound.volume = visibility
     if visibility == 1.0 and not self.__fadedIn:
         self.__fadedIn = True
         ds = self.__curve.getChannelProperty(0, 'effectName')
         effectName = ds.asString if ds is not None else ''
         if effectName != '':
             Pixie.createBG(effectName, self.__onParticlesLoaded)
     elif visibility <= 0.1 and self.__fadedIn:
         self.stop()
         return
     self.__cbID = BigWorld.callback(0, self.__update)
     return
示例#12
0
 def __update(self):
     self.__cbID = None
     visibility = self.__motor.warplaneAlpha
     if self.__sound is not None and self.__sound.isPlaying:
         self.__sound.volume = visibility
     if visibility == 1.0 and not self.__fadedIn:
         self.__fadedIn = True
         ds = self.__curve.getChannelProperty(0, 'effectName')
         effectName = ds.asString if ds is not None else ''
         if effectName != '':
             Pixie.createBG(effectName, self.__onParticlesLoaded)
     elif visibility <= 0.1 and self.__fadedIn:
         self.stop()
         return
     self.__cbID = BigWorld.callback(0, self.__update)
     return
示例#13
0
 def getPixie(name, onLoadCallback):
     pixieInfo = PixieCache.pixieCache.get(name, (None, set()))
     if pixieInfo[0] is None:
         cbksSize = len(pixieInfo[1])
         pixieInfo[1].add(onLoadCallback)
         if cbksSize == 0:
             Pixie.createBG(name, partial(PixieCache.onPixieLoaded, name))
             PixieCache.pixieCache[name] = pixieInfo
         return
     else:
         if len(pixieInfo) == 1:
             newPixie = pixieInfo[0].clone()
         else:
             newPixie = pixieInfo.pop()
         return newPixie
         return
示例#14
0
 def __update(self):
     self.__cbID = None
     visibility = self.__motor.warplaneAlpha
     if visibility == 1.0 and not self.__fadedIn:
         self.__fadedIn = True
         ds = self.__curve.getChannelProperty(0, 'effectName')
         effectName = ds.asString if ds is not None else ''
         if effectName != '':
             Pixie.createBG(effectName, partial(self.__onParticlesLoaded, effectName))
     elif visibility <= 0.1 and self.__fadedIn or Timer.getTime() > self.__endTime:
         self.pause()
         return
     if self.__sound is not None:
         if self.__sound.isPlaying:
             self.__sound.volume = visibility
     else:
         self.__playSound()
     self.__cbID = BigWorld.callback(0.25, self.__update)
 def __init__(self,
              name,
              onLoadCallback,
              pixie=None,
              data=None,
              modifiers=None):
     self.name = name
     self.pixie = pixie
     self.__data = data
     if pixie is None:
         self.__loader = functools.partial(self.onLoad, weakref.ref(self))
         self.__callback = onLoadCallback
         Pixie.createBG(name, self.__loader, modifiers)
     else:
         self.__loader = None
         self.__callback = None
         if modifiers is not None:
             self.pixie.applyModifiers(modifiers)
     return
示例#16
0
 def __update(self):
     self.__cbID = None
     visibility = self.__motor.warplaneAlpha
     if visibility == 1.0 and not self.__fadedIn:
         self.__fadedIn = True
         ds = self.__curve.getChannelProperty(0, 'effectName')
         effectName = ds.asString if ds is not None else ''
         if effectName != '':
             Pixie.createBG(effectName,
                            partial(self.__onParticlesLoaded, effectName))
     elif visibility <= 0.1 and self.__fadedIn or Timer.getTime(
     ) > self.__endTime:
         self.pause()
         return
     if self.__sound is not None:
         if self.__sound.isPlaying:
             self.__sound.volume = visibility
     else:
         self.__playSound()
     self.__cbID = BigWorld.callback(0.25, self.__update)
示例#17
0
    def __init__(self, exhaustEffectsDescriptor, drawOrder, uniqueEffects=None):
        if uniqueEffects is None:
            self.__uniqueEffects = {}
        else:
            self.__uniqueEffects = {name: effect.clone() for name, effect in uniqueEffects.iteritems()}
        self.__tables = []
        self.__maxDrawOrder = drawOrder - 1
        self.__node = None
        for rangeTable in exhaustEffectsDescriptor.tables:
            effectsValues = []
            for name in rangeTable.values:
                effect = self.__uniqueEffects.get(name)
                if effect is None:
                    elemDesc = [name, effectsValues]
                    Pixie.createBG(name, partial(self._callbackExhaustPixieLoaded, elemDesc))
                else:
                    effectsValues.append(effect)

            self.__tables.append(RangeTable(rangeTable.keys, effectsValues))

        if self.__maxDrawOrder < drawOrder:
            self.__maxDrawOrder = drawOrder
        self.__activeEffect = None