def __assembleModel(self): resources = self.__resources self.__model = resources[self.__vDesc.name] self.__setupEmblems(self.__vDesc) if not self.__isVehicleDestroyed: self.__fashions = VehiclePartsTuple( BigWorld.WGVehicleFashion(False), None, None, None) model_assembler.setupTracksFashion(self.__fashions.chassis, self.__vDesc, self.__isVehicleDestroyed) self.__model.setupFashions(self.__fashions) chassisFashion = self.__fashions.chassis model_assembler.setupSplineTracks(chassisFashion, self.__vDesc, self.__model, self.__resources) self.wheelsAnimator = model_assembler.createWheelsAnimator( self.__model, self.__vDesc, None) self.trackNodesAnimator = model_assembler.createTrackNodesAnimator( self.__model, self.__vDesc, self.wheelsAnimator) else: self.__fashions = VehiclePartsTuple(None, None, None, None) self.wheelsAnimator = None self.trackNodesAnimator = None self.updateCamouflage() yaw = self.__vDesc.gun.staticTurretYaw pitch = self.__vDesc.gun.staticPitch if yaw is None: yaw = 0.0 if pitch is None: pitch = 0.0 gunMatrix = mathUtils.createRTMatrix(Math.Vector3(yaw, pitch, 0.0), (0.0, 0.0, 0.0)) self.__model.node('gun', gunMatrix) return self.__model
def start(self, prereqs=None): self.collisions = prereqs['collisionAssembler'] self.__typeDesc.chassis.hitTester.bbox = self.collisions.getBoundingBox( TankPartNames.getIdx(TankPartNames.CHASSIS)) self.__typeDesc.hull.hitTester.bbox = self.collisions.getBoundingBox( TankPartNames.getIdx(TankPartNames.HULL)) self.__typeDesc.turret.hitTester.bbox = self.collisions.getBoundingBox( TankPartNames.getIdx(TankPartNames.TURRET)) self.__typeDesc.gun.hitTester.bbox = self.collisions.getBoundingBox( TankPartNames.getIdx(TankPartNames.GUN)) self.__compoundModel = prereqs[self.__typeDesc.name] self.__boundEffects = bound_effects.ModelBoundEffects( self.__compoundModel) isCurrentModelDamaged = self.__currentDamageState.isCurrentModelDamaged fashions = camouflages.prepareFashions(isCurrentModelDamaged) if not isCurrentModelDamaged: model_assembler.setupTracksFashion(self.__typeDesc, fashions.chassis) self.__setFashions(fashions, self.__isTurretDetached) self.__setupModels() if not isCurrentModelDamaged: self.__splineTracks = model_assembler.setupSplineTracks( self.__fashion, self.__typeDesc, self.__compoundModel, prereqs) self.crashedTracksController = CrashedTrackController( self.__typeDesc, self.__fashion) else: self.__trackScrollCtl = None if self.__currentDamageState.effect is not None: self.__playEffect(self.__currentDamageState.effect, SpecialKeyPointNames.STATIC) self.__chassisDecal.create() return
def start(self, prereqs=None): for hitTester in self.__typeDesc.getHitTesters(): hitTester.loadBspModel() self.__compoundModel = prereqs[self.__typeDesc.name] self.__boundEffects = bound_effects.ModelBoundEffects( self.__compoundModel) isCurrentModelDamaged = self.__currentDamageState.isCurrentModelDamaged fashions = camouflages.prepareFashions( self.__typeDesc, isCurrentModelDamaged, self.__getCamouflageParams(self.__typeDesc, self.__vID)[0]) if not isCurrentModelDamaged: model_assembler.setupVehicleFashion(fashions[0], self.__typeDesc) self.__compoundModel.setupFashions(fashions) fashions = camouflages.applyCamouflage( self.__typeDesc, fashions, isCurrentModelDamaged, self.__getCamouflageParams(self.__typeDesc, self.__vID)[0]) fashions = camouflages.applyRepaint(self.__typeDesc, fashions) self.__setFashions(fashions, self.__isTurretDetached) self.__setupModels() if not isCurrentModelDamaged: self.__splineTracks = model_assembler.setupSplineTracks( self.__fashion, self.__typeDesc, self.__compoundModel, prereqs) self.__crashedTracksCtrl = CrashedTrackController( self.__typeDesc, self.__fashion) else: self.__trackScrollCtl = None if self.__currentDamageState.effect is not None: self.__playEffect(self.__currentDamageState.effect, SpecialKeyPointNames.STATIC) self.__chassisDecal.create() return
def __assembleModel(self): from vehicle_systems import model_assembler resources = self.__resources self.__vEntity.model = resources[self.__vDesc.name] if not self.__isVehicleDestroyed: self.__fashions = VehiclePartsTuple(BigWorld.WGVehicleFashion(False), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion()) model_assembler.setupTracksFashion(self.__vDesc, self.__fashions.chassis) self.__vEntity.model.setupFashions(self.__fashions) self.__initMaterialHandlers() model_assembler.assembleCollisionObstaclesCollector(self, None) model_assembler.assembleTessellationCollisionSensor(self, None) self.wheelsAnimator = model_assembler.createWheelsAnimator(self.__vEntity.model, self.__vDesc, None) self.trackNodesAnimator = model_assembler.createTrackNodesAnimator(self.__vEntity.model, self.__vDesc, self.wheelsAnimator) chassisFashion = self.__fashions.chassis splineTracksImpl = model_assembler.setupSplineTracks(chassisFashion, self.__vDesc, self.__vEntity.model, self.__resources) model_assembler.assembleTracks(self.__resources, self.__vDesc, self, splineTracksImpl, True) self.updateCustomization(self.__outfit) dirtEnabled = BigWorld.WG_dirtEnabled() and 'HD' in self.__vDesc.type.tags if dirtEnabled: dirtHandlers = [BigWorld.PyDirtHandler(True, self.__vEntity.model.node(TankPartNames.CHASSIS).position.y), BigWorld.PyDirtHandler(False, self.__vEntity.model.node(TankPartNames.HULL).position.y), BigWorld.PyDirtHandler(False, self.__vEntity.model.node(TankPartNames.TURRET).position.y), BigWorld.PyDirtHandler(False, self.__vEntity.model.node(TankPartNames.GUN).position.y)] modelHeight, _ = self.computeVehicleHeight() self.dirtComponent = Vehicular.DirtComponent(dirtHandlers, modelHeight) for fashionIdx, _ in enumerate(TankPartNames.ALL): self.__fashions[fashionIdx].addMaterialHandler(dirtHandlers[fashionIdx]) self.dirtComponent.setBase() else: self.__fashions = VehiclePartsTuple(BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion()) self.__vEntity.model.setupFashions(self.__fashions) self.wheelsAnimator = None self.trackNodesAnimator = None self.dirtComponent = None cfg = hangarCFG() turretYaw = self.__vDesc.gun.staticTurretYaw gunPitch = self.__vDesc.gun.staticPitch if not ('AT-SPG' in self.__vDesc.type.tags or 'SPG' in self.__vDesc.type.tags): if turretYaw is None: turretYaw = cfg['vehicle_turret_yaw'] turretYawLimits = self.__vDesc.gun.turretYawLimits if turretYawLimits is not None: turretYaw = mathUtils.clamp(turretYawLimits[0], turretYawLimits[1], turretYaw) if gunPitch is None: gunPitch = cfg['vehicle_gun_pitch'] gunPitchLimits = self.__vDesc.gun.pitchLimits['absolute'] gunPitch = mathUtils.clamp(gunPitchLimits[0], gunPitchLimits[1], gunPitch) else: if turretYaw is None: turretYaw = 0.0 if gunPitch is None: gunPitch = 0.0 turretYawMatrix = mathUtils.createRotationMatrix((turretYaw, 0.0, 0.0)) self.__vEntity.model.node(TankPartNames.TURRET, turretYawMatrix) gunPitchMatrix = mathUtils.createRotationMatrix((0.0, gunPitch, 0.0)) self.__vEntity.model.node(TankPartNames.GUN, gunPitchMatrix) return
def __assembleModel(self): from vehicle_systems import model_assembler resources = self.__resources self.__vEntity.model = resources[self.__vDesc.name] if not self.__isVehicleDestroyed: self.__fashions = VehiclePartsTuple(BigWorld.WGVehicleFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion()) model_assembler.setupTracksFashion(self.__vDesc, self.__fashions.chassis) self.__vEntity.model.setupFashions(self.__fashions) model_assembler.assembleCollisionObstaclesCollector( self, None, self.__vDesc, BigWorld.player().spaceID) model_assembler.assembleTessellationCollisionSensor(self, None) wheelsScroll = None wheelsSteering = None if self.__vDesc.chassis.generalWheelsAnimatorConfig is not None: scrollableWheelsCount = self.__vDesc.chassis.generalWheelsAnimatorConfig.getWheelsCount( ) wheelsScroll = [(lambda: 0.0) for _ in xrange(scrollableWheelsCount)] steerableWheelsCount = self.__vDesc.chassis.generalWheelsAnimatorConfig.getSteerableWheelsCount( ) wheelsSteering = [(lambda: 0.0) for _ in xrange(steerableWheelsCount)] chassisFashion = self.__fashions.chassis splineTracksImpl = model_assembler.setupSplineTracks( chassisFashion, self.__vDesc, self.__vEntity.model, self.__resources, self.__outfit.modelsSet) self.wheelsAnimator = model_assembler.createWheelsAnimator( self, ColliderTypes.VEHICLE_COLLIDER, self.__vDesc, lambda: 0, wheelsScroll, wheelsSteering, splineTracksImpl) self.trackNodesAnimator = model_assembler.createTrackNodesAnimator( self, self.__vDesc) model_assembler.assembleTracks(self.__resources, self.__vDesc, self, splineTracksImpl, True) dirtEnabled = BigWorld.WG_dirtEnabled( ) and 'HD' in self.__vDesc.type.tags if dirtEnabled: dirtHandlers = [ BigWorld.PyDirtHandler( True, self.__vEntity.model.node( TankPartNames.CHASSIS).position.y), BigWorld.PyDirtHandler( False, self.__vEntity.model.node( TankPartNames.HULL).position.y), BigWorld.PyDirtHandler( False, self.__vEntity.model.node( TankPartNames.TURRET).position.y), BigWorld.PyDirtHandler( False, self.__vEntity.model.node( TankPartNames.GUN).position.y) ] modelHeight, _ = self.computeVehicleHeight() self.dirtComponent = self.createComponent( Vehicular.DirtComponent, dirtHandlers, modelHeight) for fashionIdx, _ in enumerate(TankPartNames.ALL): self.__fashions[fashionIdx].addMaterialHandler( dirtHandlers[fashionIdx]) self.dirtComponent.setBase() outfitData = camouflages.getOutfitData( self, self.__outfit, self.__vDesc, self.__vState != 'undamaged') self.c11nComponent = self.createComponent( Vehicular.C11nEditComponent, self.__fashions, self.compoundModel, outfitData) self.__updateDecals(self.__outfit) self.__updateSequences(self.__outfit) else: self.__fashions = VehiclePartsTuple(BigWorld.WGVehicleFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion(), BigWorld.WGBaseFashion()) self.__vEntity.model.setupFashions(self.__fashions) self.wheelsAnimator = None self.trackNodesAnimator = None self.dirtComponent = None self.flagComponent = None self.__staticTurretYaw = self.__vDesc.gun.staticTurretYaw self.__staticGunPitch = self.__vDesc.gun.staticPitch if not ('AT-SPG' in self.__vDesc.type.tags or 'SPG' in self.__vDesc.type.tags): if self.__staticTurretYaw is None: self.__staticTurretYaw = self._getTurretYaw() turretYawLimits = self.__vDesc.gun.turretYawLimits if turretYawLimits is not None: self.__staticTurretYaw = math_utils.clamp( turretYawLimits[0], turretYawLimits[1], self.__staticTurretYaw) if self.__staticGunPitch is None: self.__staticGunPitch = self._getGunPitch() gunPitchLimits = self.__vDesc.gun.pitchLimits['absolute'] self.__staticGunPitch = math_utils.clamp( gunPitchLimits[0], gunPitchLimits[1], self.__staticGunPitch) else: if self.__staticTurretYaw is None: self.__staticTurretYaw = 0.0 if self.__staticGunPitch is None: self.__staticGunPitch = 0.0 turretYawMatrix = math_utils.createRotationMatrix( (self.__staticTurretYaw, 0.0, 0.0)) self.__vEntity.model.node(TankPartNames.TURRET, turretYawMatrix) gunPitchMatrix = math_utils.createRotationMatrix( (0.0, self.__staticGunPitch, 0.0)) self.__setGunMatrix(gunPitchMatrix) return
def construct(self, isPlayer, resourceRefs): self.__isObserver = 'observer' in self.typeDescriptor.type.tags self._compoundModel = resourceRefs[self.typeDescriptor.name] self.removeComponentByType(GenericComponents.DynamicModelComponent) self.createComponent(GenericComponents.DynamicModelComponent, self._compoundModel) if not self._compoundModel.isValid(): _logger.error('compoundModel is not valid') if self.typeDescriptor.gun.edgeByVisualModel: self._compoundModel.setPartProperties( TankPartIndexes.GUN, PartProperties.HIGHLIGHTABLE | PartProperties.HIGHLIGHTBYVISUAL) self._compoundModel.setPartProperties( TankPartIndexes.CHASSIS, PartProperties.HIGHLIGHTABLE | PartProperties.HIGHLIGHTBYVISUAL) self.__boundEffects = bound_effects.ModelBoundEffects( self.compoundModel) isCurrentModelDamaged = self.damageState.isCurrentModelDamaged fashions = camouflages.prepareFashions(isCurrentModelDamaged) if not isCurrentModelDamaged: model_assembler.setupTracksFashion(self.typeDescriptor, fashions.chassis) self.collisions = self.createComponent( BigWorld.CollisionComponent, resourceRefs['collisionAssembler']) model_assembler.setupCollisions(self.typeDescriptor, self.collisions) self._setFashions(fashions, self.isTurretDetached) self._setupModels() if not isCurrentModelDamaged: modelsSet = self.outfit.modelsSet if IS_EDITOR: modelsSet = self.currentModelsSet self._splineTracks = model_assembler.setupSplineTracks( self.fashion, self.typeDescriptor, self.compoundModel, resourceRefs, modelsSet) self.crashedTracksController = CrashedTrackController( self.typeDescriptor, self.fashion, modelsSet) else: self.__trackScrollCtl = None self._chassisDecal.create() if self.modelsSetParams.state == 'undamaged': self.__modelAnimators = camouflages.getModelAnimators( self.outfit, self.typeDescriptor, self.spaceID, resourceRefs, self.compoundModel) self.__modelAnimators.extend( camouflages.getAttachmentsAnimators(self.__attachments, self.spaceID, resourceRefs, self.compoundModel)) self.transform = self.createComponent( GenericComponents.TransformComponent, Math.Vector3(0, 0, 0)) self.areaTriggerTarget = self.createComponent( Triggers.AreaTriggerTarget) self.__filter = model_assembler.createVehicleFilter( self.typeDescriptor) compoundModel = self.compoundModel if self.isAlive: self.detailedEngineState, self.gearbox = model_assembler.assembleDrivetrain( self, isPlayer) if not gEffectsDisabled(): self.customEffectManager = CustomEffectManager(self) if self.typeDescriptor.hasSiegeMode: self.siegeEffects = SiegeEffectsController(self, isPlayer) model_assembler.assembleVehicleAudition(isPlayer, self) self.detailedEngineState.onEngineStart = self._onEngineStart self.detailedEngineState.onStateChanged = self.engineAudition.onEngineStateChanged if isPlayer: turret = self.typeDescriptor.turret gunRotatorAudition = self.createComponent( Vehicular.GunRotatorAudition, turret.turretRotatorSoundManual, turret.weight / 1000.0, compoundModel.node(TankPartNames.TURRET)) gunRotatorAudition.vehicleMatrixLink = self.compoundModel.root gunRotatorAudition.damaged = lambda: self.turretDamaged() gunRotatorAudition.maxTurretRotationSpeed = lambda: self.maxTurretRotationSpeed( ) self.gunRotatorAudition = gunRotatorAudition self.frictionAudition = self.createComponent( Vehicular.FrictionAudition, TANK_FRICTION_EVENT) isLodTopPriority = isPlayer lodCalcInst = self.createComponent( Vehicular.LodCalculator, DataLinks.linkMatrixTranslation(compoundModel.matrix), True, VEHICLE_PRIORITY_GROUP, isLodTopPriority) self.lodCalculator = lodCalcInst self.allLodCalculators.append(lodCalcInst) lodLink = DataLinks.createFloatLink(lodCalcInst, 'lodDistance') lodStateLink = lodCalcInst.lodStateLink if IS_EDITOR: matrixBinding = None changeCamera = None else: matrixBinding = BigWorld.player( ).consistentMatrices.onVehicleMatrixBindingChanged changeCamera = BigWorld.player().inputHandler.onCameraChanged self.shadowManager = VehicleShadowManager(compoundModel, matrixBinding, changeCamera) if not self.damageState.isCurrentModelDamaged: self.__assembleNonDamagedOnly(resourceRefs, isPlayer, lodLink, lodStateLink) dirtEnabled = BigWorld.WG_dirtEnabled( ) and 'HD' in self.typeDescriptor.type.tags if dirtEnabled and self.fashions is not None: dirtHandlers = [ BigWorld.PyDirtHandler( True, compoundModel.node(TankPartNames.CHASSIS).position.y), BigWorld.PyDirtHandler( False, compoundModel.node(TankPartNames.HULL).position.y), BigWorld.PyDirtHandler( False, compoundModel.node(TankPartNames.TURRET).position.y), BigWorld.PyDirtHandler( False, compoundModel.node(TankPartNames.GUN).position.y) ] modelHeight, _ = self.computeVehicleHeight() self.dirtComponent = self.createComponent( Vehicular.DirtComponent, dirtHandlers, modelHeight) for fashionIdx, _ in enumerate(TankPartNames.ALL): self.fashions[fashionIdx].addMaterialHandler( dirtHandlers[fashionIdx]) self.fashions[fashionIdx].addTrackMaterialHandler( dirtHandlers[fashionIdx]) model_assembler.setupTurretRotations(self) self.waterSensor = model_assembler.assembleWaterSensor( self.typeDescriptor, self, lodStateLink, self.spaceID) if self.engineAudition is not None: self.engineAudition.setIsUnderwaterInfo( DataLinks.createBoolLink(self.waterSensor, 'isUnderWater')) self.engineAudition.setIsInWaterInfo( DataLinks.createBoolLink(self.waterSensor, 'isInWater')) self.__postSetupFilter() compoundModel.setPartBoundingBoxAttachNode( TankPartIndexes.GUN, TankNodeNames.GUN_INCLINATION) camouflages.updateFashions(self) model_assembler.assembleCustomLogicComponents(self, self.typeDescriptor, self.__attachments, self.__modelAnimators) self._createStickers() while self._loadingQueue: prefab, go, vector, callback = self._loadingQueue.pop() CGF.loadGameObjectIntoHierarchy(prefab, go, vector, callback) return