def __updateCurrTerrainMatKinds(self): if self.terrainMatKindSensor is None: return else: matKinds = self.terrainMatKindSensor.matKinds matKindsCount = len(matKinds) for i in xrange(_MATKIND_COUNT): matKind = matKinds[i] if i < matKindsCount else 0 self.__currTerrainMatKind[i] = matKind effectIndex = calcEffectMaterialIndex(matKind) effectMaterialName = '' if effectIndex is not None: effectMaterialName = material_kinds.EFFECT_MATERIALS[effectIndex] self.__terrainEffectMaterialNames[i] = effectMaterialName if self.vehicleTraces is not None: self.vehicleTraces.setCurrTerrainMatKinds(self.__currTerrainMatKind[0], self.__currTerrainMatKind[1]) return
def tick(self): if not SoundGroups.ENABLE_ENGINE_N_TRACKS: return else: soundEngine = self.__engineSound if soundEngine is None: return soundTrack = self.__movementSound if soundTrack is None: return vehicleAttached = BigWorld.player().getVehicleAttached() if vehicleAttached is None: return cameraUnit = vehicleAttached.id == self.__vehicleId speedInfo = vehicleAttached.speedInfo.value speed = speedInfo[0] engineRPM = clamp(0.0, 100.0, self.detailedEngineState.rpm) soundEngine.setRTPC('RTPC_ext_rpm', engineRPM) soundTrack.setRTPC('RTPC_ext_rpm', engineRPM) soundEngine.setRTPC('RTPC_ext_engine_load', self.detailedEngineState.engineLoad) soundTrack.setRTPC('RTPC_ext_engine_load', self.detailedEngineState.engineLoad) if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_engine_load_global', self.detailedEngineState.engineLoad) soundEngine.setRTPC('RTPC_ext_submersion', 1 if self.isUnderwaterLink() else 0) soundTrack.setRTPC('RTPC_ext_submersion', 1 if self.isUnderwaterLink() else 0) if cameraUnit: WWISE.WW_setState('STATE_underwater', 'STATE_underwater_on' if self.isUnderwaterLink() else 'STATE_underwater_off') soundEngine.setRTPC('RTPC_ext_speed_abs', clamp(-10, 30, speed)) soundTrack.setRTPC('RTPC_ext_speed_abs', clamp(-10, 30, speed)) soundEngine.setRTPC('RTPC_ext_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) soundTrack.setRTPC('RTPC_ext_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) soundEngine.setRTPC('RTPC_ext_speed_rel2', self.detailedEngineState.relativeSpeed) soundTrack.setRTPC('RTPC_ext_speed_rel2', self.detailedEngineState.relativeSpeed) soundEngine.setRTPC('RTPC_ext_rot_speed_abs', clamp(-1.0, 1.0, self.detailedEngineState.rotationSpeed)) soundTrack.setRTPC('RTPC_ext_rot_speed_abs', clamp(-1.0, 1.0, self.detailedEngineState.rotationSpeed)) soundEngine.setRTPC('RTPC_ext_rot_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.roatationRelSpeed)) soundTrack.setRTPC('RTPC_ext_rot_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.roatationRelSpeed)) if not self.__isPlayerVehicle: soundEngine.setRTPC('RTPC_ext_turbine_npc', engineRPM) if cameraUnit: if not self.__isPlayerVehicle: soundTrack.setRTPC('RTPC_ext_gear_2', self.detailedEngineState.gear2) soundTrack.setRTPC('RTPC_ext_gear_3', self.detailedEngineState.gear3) soundEngine.setRTPC('RTPC_ext_gear_2', self.detailedEngineState.gear2) soundEngine.setRTPC('RTPC_ext_gear_3', self.detailedEngineState.gear3) soundEngine.setRTPC('RTPC_ext_gear_num', clamp(0.0, 4.0, self.detailedEngineState.gearNum)) soundTrack.setRTPC('RTPC_ext_gear_num', clamp(0.0, 4.0, self.detailedEngineState.gearNum)) else: gear = self.detailedEngineState.gearNum soundTrack.setRTPC('RTPC_ext_physic_rpm_rel', self.detailedEngineState.rpmPhysicRel) soundEngine.setRTPC('RTPC_ext_physic_rpm_rel', self.detailedEngineState.rpmPhysicRel) if self.detailedEngineState.engineState == EngineState._CRITICAL: soundEngine.setRTPC('RTPC_ext_turbine', 0.0) else: soundEngine.setRTPC('RTPC_ext_turbine', self.detailedEngineState.rpmPhysicRel * 100.0) soundTrack.setRTPC('RTPC_ext_physic_rpm_abs', self.detailedEngineState.rpmPhysicAbs) soundEngine.setRTPC('RTPC_ext_physic_rpm_abs', self.detailedEngineState.rpmPhysicAbs) soundTrack.setRTPC('RTPC_ext_physic_gear', gear) soundEngine.setRTPC('RTPC_ext_physic_gear', gear) soundTrack.setRTPC('RTPC_ext_engine_state', 1.0 if gear > 0 and gear < 127 else 0.0) soundEngine.setRTPC('RTPC_ext_engine_state', 1.0 if gear > 0 and gear < 127 else 0.0) for i in range(1, 8): if i != gear: soundTrack.setRTPC('RTPC_ext_physic_gear_' + str(i), 0) soundEngine.setRTPC('RTPC_ext_physic_gear_' + str(i), 0) if self.detailedEngineState.gearUp: soundTrack.setRTPC('RTPC_ext_physic_gear_' + str(gear), 100) soundEngine.setRTPC('RTPC_ext_physic_gear_' + str(gear), 100) accelerationAbs = 0.0 if self.__prevVelocity is not None and self.__prevTime is not None: deltaTime = BigWorld.time() - self.__prevTime if deltaTime > 0.0: accelerationAbs = (speed - self.__prevVelocity) / (BigWorld.time() - self.__prevTime) accelerationAbs = clamp(-1.5, 1.5, accelerationAbs) else: accelerationAbs = 0.0 self.__prevVelocity = speed self.__prevTime = BigWorld.time() soundEngine.setRTPC('RTPC_ext_acc_abs', accelerationAbs) soundTrack.setRTPC('RTPC_ext_acc_abs', accelerationAbs) moveValue = 100 if math.fabs(speed) > 1.0 else 0 soundTrack.setRTPC('RTPC_ext_move', moveValue) soundEngine.setRTPC('RTPC_ext_move', moveValue) soundEngine.setRTPC('RTPC_ext_physic_load', self.detailedEngineState.physicLoad) soundTrack.setRTPC('RTPC_ext_physic_load', self.detailedEngineState.physicLoad) if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_physic_load_global', self.detailedEngineState.physicLoad) WWISE.WW_setRTCPGlobal('RTPC_ext_speed_rel_global', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) WWISE.WW_setRTCPGlobal('RTPC_ext_speed_abs_global', speed) soundTrack.setRTPC('RTPC_ext_flying', self.isFlyingLink()) if not cameraUnit: return deltaR = self.rightTrackScrollRelativeLink() deltaL = self.leftTrackScrollRelativeLink() slideFriction = clamp(0.0, 1.0, max(deltaR, deltaL) / 5.0) soundTrack.setRTPC('RTPC_ext_slide_friction', slideFriction) soundEngine.setRTPC('RTPC_ext_slide_friction', slideFriction) matEffectsUnderTracks = dict(((effectMaterial, 0.0) for effectMaterial in _EFFECT_MATERIALS_HARDNESS_RTPC)) currTerrainMatKind = self.curTerrainMatKindLink() if self.isInWaterLink(): matEffectsUnderTracks['water'] = len(currTerrainMatKind) else: for matKind in currTerrainMatKind: effectIndex = calcEffectMaterialIndex(matKind) if effectIndex is not None: effectMaterial = material_kinds.EFFECT_MATERIALS[effectIndex] if effectMaterial in matEffectsUnderTracks: matEffectsUnderTracks[effectMaterial] = matEffectsUnderTracks.get(effectMaterial, 0) + 1.0 hardness = 0.0 for effectMaterial, amount in matEffectsUnderTracks.iteritems(): hardness += _EFFECT_MATERIALS_HARDNESS_RTPC.get(effectMaterial, 0) * amount for effectMaterial, amount in matEffectsUnderTracks.iteritems(): if amount >= 2 and self.__prevTerrSwitch != effectMaterial: soundTrack.setSwitch('SWITCH_ext_surfaceType', 'SWITCH_ext_surfaceType_' + effectMaterial) self.__prevTerrSwitch = effectMaterial break hardnessValue = hardness / len(currTerrainMatKind) soundTrack.setRTPC('RTPC_ext_hardness', hardnessValue) angPart = min(abs(self.vehicleFilter.angularSpeed) * _FRICTION_ANG_FACTOR, _FRICTION_ANG_BOUND) strafePart = min(abs(self.vehicleFilter.strafeSpeed) * _FRICTION_STRAFE_FACTOR, _FRICTION_STRAFE_BOUND) frictionValue = max(angPart, strafePart) soundTrack.setRTPC('RTPC_ext_friction', frictionValue) roughnessValue = self.detailedEngineState.roughnessValue if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_roughness_global', math.fabs(roughnessValue)) soundTrack.setRTPC('RTPC_ext_roughness_abs', math.fabs(roughnessValue)) soundEngine.setRTPC('RTPC_ext_roughness_abs', math.fabs(roughnessValue)) soundTrack.setRTPC('RTPC_ext_roughness2', roughnessValue) soundEngine.setRTPC('RTPC_ext_roughness2', roughnessValue) soundTrack.setRTPC('RTPC_ext_roughness_eng', roughnessValue) soundEngine.setRTPC('RTPC_ext_roughness_eng', roughnessValue) rotationSpeed = speedInfo[1] roatationRelSpeed = rotationSpeed / self.__typeDesc.physics['rotationSpeedLimit'] RTPC_ext_treads_sum_affect = math.fabs(roatationRelSpeed * 0.33) + math.fabs(roughnessValue * 0.33) + (clamp(0.5, 1.0, self.detailedEngineState.physicLoad) - 0.5) * 0.66 soundTrack.setRTPC('RTPC_ext_treads_sum_affect', RTPC_ext_treads_sum_affect) rightTrackScroll = math.fabs(self.rightTrackScrollLink()) leftTrackScroll = math.fabs(self.leftTrackScrollLink()) if rightTrackScroll > leftTrackScroll: trackScroll = rightTrackScroll else: trackScroll = leftTrackScroll if self.__isPlayerVehicle: self.__commonTrackScroll += (trackScroll - self.__commonTrackScroll) * _PERIODIC_TIME / 0.2 self.__commonTrackScroll = self.__commonTrackScroll if self.__commonTrackScroll > 0.0 else 0.0 soundTrack.setRTPC('RTPC_ext_speed_scroll', self.__commonTrackScroll) soundEngine.setRTPC('RTPC_ext_speed_scroll', self.__commonTrackScroll) if self.__vt is not None: self.__vt.addValue2('RTPC_ext_flying', self.isFlyingLink()) self.__vt.addValue2('RTPC_ext_hardness', hardnessValue) self.__vt.addValue2('RTPC_ext_friction', frictionValue) self.__vt.addValue2('RTPC_ext_roughness_abs', roughnessValue) self.__vt.addValue2('RTPC_ext_treads_sum_affect', RTPC_ext_treads_sum_affect) self.__vt.addValue2('speed_abs', speed) self.__vt.addValue2('speed_rel', self.detailedEngineState.relativeSpeed) self.__vt.addValue2('rot_speed_abs', rotationSpeed) self.__vt.addValue2('rot_speed_rel', roatationRelSpeed) self.__vt.addValue2('gear', self.detailedEngineState.gearNum) self.__vt.addValue2('acc_abs', accelerationAbs) self.__vt.addValue2('physic_load', self.detailedEngineState.physicLoad) self.__vt.addValue2('RTPC_ext_move', moveValue) self.__vt.addValue2('RTPC_ext_speed_scroll', self.__commonTrackScroll) self.__vt.addValue2('engine_load', self.detailedEngineState.engineLoad) self.__vt.addValue2('submersion', self.isUnderwaterLink()) if self.__isPlayerVehicle: self.__vt.addValue2('RPM', self.detailedEngineState.rpmPhysicAbs) self.__vt.addValue2('RPM_REL', self.detailedEngineState.rpmPhysicRel) return
def tick(self): if not SoundGroups.ENABLE_ENGINE_N_TRACKS: return else: soundEngine = self.__engineSound if soundEngine is None: return soundTrack = self.__movementSound if soundTrack is None: return vehicleAttached = BigWorld.player().getVehicleAttached() if vehicleAttached is None: return cameraUnit = vehicleAttached.id == self.__vehicleId speed = self.vehicleFilter.speedInfo.value[0] soundEngine.setRTPC( 'RTPC_ext_rpm', clamp(0.0, 100.0, self.detailedEngineState.rpm)) soundTrack.setRTPC('RTPC_ext_rpm', clamp(0.0, 100.0, self.detailedEngineState.rpm)) soundEngine.setRTPC('RTPC_ext_engine_load', self.detailedEngineState.engineLoad) soundTrack.setRTPC('RTPC_ext_engine_load', self.detailedEngineState.engineLoad) if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_engine_load_global', self.detailedEngineState.engineLoad) soundEngine.setRTPC('RTPC_ext_submersion', 1 if self.isUnderwaterLink() else 0) soundTrack.setRTPC('RTPC_ext_submersion', 1 if self.isUnderwaterLink() else 0) if cameraUnit: WWISE.WW_setState( 'STATE_underwater', 'STATE_underwater_on' if self.isUnderwaterLink() else 'STATE_underwater_off') soundEngine.setRTPC('RTPC_ext_speed_abs', clamp(-10, 30, speed)) soundTrack.setRTPC('RTPC_ext_speed_abs', clamp(-10, 30, speed)) soundEngine.setRTPC( 'RTPC_ext_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) soundTrack.setRTPC( 'RTPC_ext_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) soundEngine.setRTPC('RTPC_ext_speed_rel2', self.detailedEngineState.relativeSpeed) soundTrack.setRTPC('RTPC_ext_speed_rel2', self.detailedEngineState.relativeSpeed) soundEngine.setRTPC( 'RTPC_ext_rot_speed_abs', clamp(-1.0, 1.0, self.detailedEngineState.rotationSpeed)) soundTrack.setRTPC( 'RTPC_ext_rot_speed_abs', clamp(-1.0, 1.0, self.detailedEngineState.rotationSpeed)) soundEngine.setRTPC( 'RTPC_ext_rot_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.roatationRelSpeed)) soundTrack.setRTPC( 'RTPC_ext_rot_speed_rel', clamp(-1.0, 1.0, self.detailedEngineState.roatationRelSpeed)) if cameraUnit: if self.__physicsMode == VEHICLE_PHYSICS_MODE.STANDARD or not self.__isPlayerVehicle: soundTrack.setRTPC('RTPC_ext_gear_2', self.detailedEngineState.gear2) soundTrack.setRTPC('RTPC_ext_gear_3', self.detailedEngineState.gear3) soundEngine.setRTPC('RTPC_ext_gear_2', self.detailedEngineState.gear2) soundEngine.setRTPC('RTPC_ext_gear_3', self.detailedEngineState.gear3) soundEngine.setRTPC( 'RTPC_ext_gear_num', clamp(0.0, 4.0, self.detailedEngineState.gearNum)) soundTrack.setRTPC( 'RTPC_ext_gear_num', clamp(0.0, 4.0, self.detailedEngineState.gearNum)) else: gear = self.detailedEngineState.gearNum soundTrack.setRTPC('RTPC_ext_physic_rpm_rel', self.detailedEngineState.rpmPhysicRel) self.__engineSound.setRTPC( 'RTPC_ext_physic_rpm_rel', self.detailedEngineState.rpmPhysicRel) soundTrack.setRTPC('RTPC_ext_physic_rpm_abs', self.detailedEngineState.rpmPhysicAbs) self.__engineSound.setRTPC( 'RTPC_ext_physic_rpm_abs', self.detailedEngineState.rpmPhysicAbs) soundTrack.setRTPC('RTPC_ext_physic_gear', gear) self.__engineSound.setRTPC('RTPC_ext_physic_gear', gear) soundTrack.setRTPC('RTPC_ext_engine_state', 1.0 if gear > 0 and gear < 127 else 0.0) self.__engineSound.setRTPC( 'RTPC_ext_engine_state', 1.0 if gear > 0 and gear < 127 else 0.0) for i in range(1, 8): if i != gear: soundTrack.setRTPC( 'RTPC_ext_physic_gear_' + str(i), 0) self.__engineSound.setRTPC( 'RTPC_ext_physic_gear_' + str(i), 0) if self.detailedEngineState.gearUp: soundTrack.setRTPC('RTPC_ext_physic_gear_' + str(gear), 100) self.__engineSound.setRTPC( 'RTPC_ext_physic_gear_' + str(gear), 100) else: soundTrack.setRTPC('RTPC_ext_physic_gear_' + str(gear), 0) self.__engineSound.setRTPC( 'RTPC_ext_physic_gear_' + str(gear), 0) accelerationAbs = 0.0 if self.__prevVelocity is not None and self.__prevTime is not None: accelerationAbs = (speed - self.__prevVelocity) / ( BigWorld.time() - self.__prevTime) accelerationAbs = clamp(-1.5, 1.5, accelerationAbs) self.__prevVelocity = speed self.__prevTime = BigWorld.time() soundEngine.setRTPC('RTPC_ext_acc_abs', accelerationAbs) soundTrack.setRTPC('RTPC_ext_acc_abs', accelerationAbs) moveValue = 100 if math.fabs( self.vehicleFilter.speedInfo.value[0]) > 0.01 else 0 soundTrack.setRTPC('RTPC_ext_move', moveValue) soundEngine.setRTPC('RTPC_ext_move', moveValue) soundEngine.setRTPC('RTPC_ext_physic_load', self.detailedEngineState.physicLoad) soundTrack.setRTPC('RTPC_ext_physic_load', self.detailedEngineState.physicLoad) if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_physic_load_global', self.detailedEngineState.physicLoad) WWISE.WW_setRTCPGlobal( 'RTPC_ext_speed_rel_global', clamp(-1.0, 1.0, self.detailedEngineState.relativeSpeed)) WWISE.WW_setRTCPGlobal('RTPC_ext_speed_abs_global', self.vehicleFilter.speedInfo.value[0]) soundTrack.setRTPC('RTPC_ext_flying', self.isFlyingLink()) if not cameraUnit: return if self.__physicsMode == VEHICLE_PHYSICS_MODE.DETAILED: deltaR = self.rightTrackScrollRelativeLink() deltaL = self.leftTrackScrollRelativeLink() slideFriction = clamp(0.0, 1.0, max(deltaR, deltaL) / 5.0) soundTrack.setRTPC('RTPC_ext_slide_friction', slideFriction) soundEngine.setRTPC('RTPC_ext_slide_friction', slideFriction) matEffectsUnderTracks = dict( ((effectMaterial, 0.0) for effectMaterial in _EFFECT_MATERIALS_HARDNESS_RTPC)) currTerrainMatKind = self.curTerrainMatKindLink() if self.isInWaterLink(): matEffectsUnderTracks['water'] = len(currTerrainMatKind) else: for matKind in currTerrainMatKind: effectIndex = calcEffectMaterialIndex(matKind) if effectIndex is not None: effectMaterial = material_kinds.EFFECT_MATERIALS[ effectIndex] if effectMaterial in matEffectsUnderTracks: matEffectsUnderTracks[ effectMaterial] = matEffectsUnderTracks.get( effectMaterial, 0) + 1.0 hardness = 0.0 for effectMaterial, amount in matEffectsUnderTracks.iteritems(): hardness += _EFFECT_MATERIALS_HARDNESS_RTPC.get( effectMaterial, 0) * amount for effectMaterial, amount in matEffectsUnderTracks.iteritems(): if amount >= 2 and self.__prevTerrSwitch != effectMaterial: soundTrack.setSwitch( 'SWITCH_ext_surfaceType', 'SWITCH_ext_surfaceType_' + effectMaterial) self.__prevTerrSwitch = effectMaterial break hardnessValue = hardness / len(currTerrainMatKind) soundTrack.setRTPC('RTPC_ext_hardness', hardnessValue) angPart = min( abs(self.vehicleFilter.angularSpeed) * _FRICTION_ANG_FACTOR, _FRICTION_ANG_BOUND) strafePart = min( abs(self.vehicleFilter.strafeSpeed) * _FRICTION_STRAFE_FACTOR, _FRICTION_STRAFE_BOUND) frictionValue = max(angPart, strafePart) soundTrack.setRTPC('RTPC_ext_friction', frictionValue) roughnessValue = self.detailedEngineState.roughnessValue if cameraUnit: WWISE.WW_setRTCPGlobal('RTPC_ext_roughness_global', math.fabs(roughnessValue)) soundTrack.setRTPC('RTPC_ext_roughness_abs', math.fabs(roughnessValue)) soundEngine.setRTPC('RTPC_ext_roughness_abs', math.fabs(roughnessValue)) soundTrack.setRTPC('RTPC_ext_roughness2', roughnessValue) soundEngine.setRTPC('RTPC_ext_roughness2', roughnessValue) soundTrack.setRTPC('RTPC_ext_roughness_eng', roughnessValue) soundEngine.setRTPC('RTPC_ext_roughness_eng', roughnessValue) rotationSpeed = self.vehicleFilter.speedInfo.value[1] roatationRelSpeed = rotationSpeed / self.__typeDesc.physics[ 'rotationSpeedLimit'] RTPC_ext_treads_sum_affect = math.fabs( roatationRelSpeed * 0.33 ) + math.fabs(roughnessValue * 0.33) + (clamp( 0.5, 1.0, self.detailedEngineState.physicLoad) - 0.5) * 0.66 soundTrack.setRTPC('RTPC_ext_treads_sum_affect', RTPC_ext_treads_sum_affect) rightTrackScroll = self.rightTrackScrollLink() leftTrackScroll = self.leftTrackScrollLink() if math.fabs(rightTrackScroll) > math.fabs(leftTrackScroll): trackScroll = rightTrackScroll else: trackScroll = leftTrackScroll if self.__physicsMode == VEHICLE_PHYSICS_MODE.DETAILED and self.__isPlayerVehicle: self.__commonTrackScroll += ( trackScroll - self.__commonTrackScroll) * _PERIODIC_TIME / 0.2 soundTrack.setRTPC('RTPC_ext_speed_scroll', self.__commonTrackScroll) soundEngine.setRTPC('RTPC_ext_speed_scroll', self.__commonTrackScroll) if self.__vt is not None: if self.__physicsMode == VEHICLE_PHYSICS_MODE.STANDARD: self.__vt.addValue2('RTPC_ext_gear_2', self.detailedEngineState.gear2) self.__vt.addValue2('RTPC_ext_gear_3', self.detailedEngineState.gear3) self.__vt.addValue2('RTPC_ext_flying', self.isFlyingLink()) self.__vt.addValue2('RTPC_ext_hardness', hardnessValue) self.__vt.addValue2('RTPC_ext_friction', frictionValue) self.__vt.addValue2('RTPC_ext_roughness_abs', roughnessValue) self.__vt.addValue2('RTPC_ext_treads_sum_affect', RTPC_ext_treads_sum_affect) self.__vt.addValue2('speed_abs', speed) self.__vt.addValue2('speed_rel', self.detailedEngineState.relativeSpeed) self.__vt.addValue2('rot_speed_abs', rotationSpeed) self.__vt.addValue2('rot_speed_rel', roatationRelSpeed) self.__vt.addValue2('gear', self.detailedEngineState.gearNum) self.__vt.addValue2('acc_abs', accelerationAbs) self.__vt.addValue2('physic_load', self.detailedEngineState.physicLoad) self.__vt.addValue2('RTPC_ext_move', moveValue) self.__vt.addValue2('RTPC_ext_speed_scroll', self.__commonTrackScroll) if self.__physicsMode == VEHICLE_PHYSICS_MODE.STANDARD and cameraUnit: self.__vt.addValue2('RPM', self.detailedEngineState.rpm) self.__vt.addValue2('engine_load', self.detailedEngineState.engineLoad) self.__vt.addValue2('submersion', self.isUnderwaterLink()) if self.__physicsMode == VEHICLE_PHYSICS_MODE.DETAILED and self.__isPlayerVehicle: self.__vt.addValue2('RPM', self.detailedEngineState.rpmPhysicAbs) self.__vt.addValue2('RPM_REL', self.detailedEngineState.rpmPhysicRel) return