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