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 _start(self, data, burstCount): if not _isAllowedToStart(): return vehicle = data['entity'] gunDescr = vehicle.typeDescriptor.gun stages, effects, _ = gunDescr['effects'] data['_effectsListPlayer'] = EffectsListPlayer(effects, stages) data['_burst'] = (burstCount, gunDescr['burst'][1]) data['_gunModel'] = vehicle.appearance.modelsDesc['gun']['model'] if vehicle.isPlayer: BigWorld.addAlwaysUpdateModel(data['_gunModel']) self.__doShot(data)
def reattach(self, elem, model): nodePos = self._pos if self._alwaysUpdate: BigWorld.delAlwaysUpdateModel(elem['model']) BigWorld.addAlwaysUpdateModel(model) elem['model'] = model if elem['newPos'] is not None: nodePos = string.split(elem['newPos'][0], '/') if elem['newPos'][0] else [] if elem['pixie'] is not None and elem['pixie'] in elem['node'].attachments: elem['node'].detach(elem['pixie']) elem['node'] = _findTargetNode(model, nodePos, elem['newPos'][1] if elem['newPos'] else None, self._orientByClosestSurfaceNormal, elem['surfaceNormal']) elem['node'].attach(elem['pixie']) else: elem['node'] = _findTargetNode(model, nodePos, None, self._orientByClosestSurfaceNormal, elem['surfaceNormal']) return
def addNew(self, position, effectsList, stages, callbackOnStop, **args): replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress: return -1 else: model = BigWorld.player().newFakeModel() model.position = position BigWorld.addModel(model) BigWorld.addAlwaysUpdateModel(model) dir = args.get('dir', None) if dir is not None: model.rotate(dir.yaw, (0.0, 1.0, 0.0)) self.__incrementalEffectID += 1 effectID = self.__incrementalEffectID desc = dict() desc['model'] = model desc['effectsPlayer'] = EffectsListPlayer(effectsList, stages, **args) desc['effectsPlayer'].play(model, None, partial(self.__callbackBeforeDestroy, effectID, callbackOnStop)) self._models[effectID] = desc return effectID
def addNew(self, position, effectsList, stages, callbackOnStop, **args): replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress: return -1 else: model = BigWorld.player().newFakeModel() model.position = position BigWorld.addModel(model) BigWorld.addAlwaysUpdateModel(model) dir = args.get('dir', None) if dir is not None: model.rotate(dir.yaw, (0.0, 1.0, 0.0)) self.__incrementalEffectID += 1 effectID = self.__incrementalEffectID desc = dict() desc['model'] = model desc['effectsPlayer'] = EffectsListPlayer(effectsList, stages, **args) desc['effectsPlayer'].play( model, None, partial(self.__callbackBeforeDestroy, effectID, callbackOnStop)) self._models[effectID] = desc return effectID