def createTrackNodesAnimator(compoundModel,
                             typeDescriptor,
                             wheelsDataProvider=None,
                             lodStateLink=None):
    trackNodesConfig = typeDescriptor.chassis.trackNodes
    trackParams = typeDescriptor.chassis.trackParams
    if not trackNodesConfig:
        return
    else:
        trackNodesAnimator = Vehicular.TrackNodesAnimator(
            compoundModel, TankNodeNames.HULL_SWINGING)
        if trackParams is not None:
            trackNodesAnimator.setParameters(trackParams.thickness,
                                             trackParams.gravity,
                                             trackParams.maxAmplitude,
                                             trackParams.maxOffset)
        for trackNode in trackNodesConfig.nodes:
            leftSibling = '' if trackNode.leftNodeName is None else trackNode.leftNodeName
            rightSibling = '' if trackNode.rightNodeName is None else trackNode.rightNodeName
            trackNodesAnimator.addTrackNode(
                trackNode.name, trackNode.isLeft, trackNode.initialOffset,
                leftSibling, rightSibling,
                (trackNode.damping, trackNode.elasticity,
                 trackNode.forwardElasticityCoeff,
                 trackNode.backwardElasticityCoeff))

        trackNodesAnimator.setWheelsDataProvider(wheelsDataProvider)
        trackNodesAnimator.setLodLink(lodStateLink)
        trackNodesAnimator.setLodSettings(
            shared_components.LodSettings(
                typeDescriptor.chassis.wheels.lodDist,
                DEFAULT_MAX_LOD_PRIORITY))
        return trackNodesAnimator
def createSuspension(compoundModel, vehicleDescriptor, lodStateLink,
                     collisionObstaclesCollector, tessellationCollisionSensor):
    groundNodesConfig = vehicleDescriptor.chassis.groundNodes
    groundNodeGroups = groundNodesConfig.groups
    groundNodes = groundNodesConfig.nodes
    hasGroundNodes = len(groundNodeGroups) or len(groundNodes)
    if not hasGroundNodes:
        return None
    else:
        suspension = Vehicular.Suspension(compoundModel,
                                          tessellationCollisionSensor,
                                          TankPartIndexes.CHASSIS)
        for groundGroup in groundNodeGroups:
            nodes = _createNodeNameListByTemplate(groundGroup.startIndex,
                                                  groundGroup.template,
                                                  groundGroup.count)
            suspension.addGroundNodesGroup(nodes, groundGroup.isLeft,
                                           groundGroup.minOffset,
                                           groundGroup.maxOffset)

        for groundNode in groundNodes:
            suspension.addGroundNode(groundNode.name, groundNode.isLeft,
                                     groundNode.minOffset,
                                     groundNode.maxOffset)

        trackParams = vehicleDescriptor.chassis.trackParams
        suspension.setParameters(trackParams.thickness)
        suspension.setLodLink(lodStateLink)
        suspension.setLodSettings(
            shared_components.LodSettings(
                vehicleDescriptor.chassis.wheels.lodDist,
                DEFAULT_MAX_LOD_PRIORITY))
        suspension.setCollisionObstaclesCollector(collisionObstaclesCollector)
        return suspension
def assembleVehicleTraces(appearance, f, lodStateLink=None):
    vehicleTraces = Vehicular.VehicleTraces()
    tracesConfig = appearance.typeDescriptor.chassis.traces
    textures = {}
    for matKindName, texId in DecalMap.g_instance.getTextureSet(
            tracesConfig.textureSet).iteritems():
        if matKindName != 'bump':
            for matKind in material_kinds.EFFECT_MATERIAL_IDS_BY_NAMES[
                    matKindName]:
                textures[matKind] = texId

    vehicleTraces.setTrackTraces(
        tracesConfig.bufferPrefs, textures, tracesConfig.centerOffset,
        tracesConfig.size,
        appearance.typeDescriptor.chassis.topRightCarryingPoint[1] * 2)
    vehicleTraces.setCompound(appearance.compoundModel)
    isLeftFlying = DataLinks.createBoolLink(appearance.flyingInfoProvider,
                                            'isLeftSideFlying')
    isRightFlying = DataLinks.createBoolLink(appearance.flyingInfoProvider,
                                             'isRightSideFlying')
    vehicleTraces.setFlyingInfo(isLeftFlying, isRightFlying)
    vehicleTraces.setLodLink(lodStateLink)
    vehicleTraces.setLodSettings(
        shared_components.LodSettings(tracesConfig.lodDist,
                                      DEFAULT_MAX_LOD_PRIORITY))
    vehicleTraces.setMovementInfo(f.movementInfo)
    appearance.vehicleTraces = vehicleTraces
Exemple #4
0
def createTankWheelsAnimator(appearance, typeDescriptor, splineTracks, lodStateLink=None):
    wheelsAnimator = None
    try:
        compoundModel = appearance.compoundModel
        f = appearance.filter
        wheelsConfig = typeDescriptor.chassis.wheels
        wheelsAnimator = appearance.createComponent(Vehicular.TankWheelsAnimator, compoundModel)
        for group in wheelsConfig.groups:
            nodes = _createNameListByTemplate(group.startIndex, group.template, group.count)
            wheelsAnimator.addWheelGroup(group.isLeft, group.radius, nodes)

        for wheel in wheelsConfig.wheels:
            wheelsAnimator.addWheel(wheel.isLeft, wheel.radius, wheel.nodeName, wheel.isLeading, wheel.leadingSyncAngle)

        if splineTracks is not None and splineTracks.left and splineTracks.right:
            wheelsAnimator.setSplineTrackMovementData(splineTracks.left[0], splineTracks.right[0])
        wheelsAnimator.setLodLink(lodStateLink)
        wheelsAnimator.setLodSettings(shared_components.LodSettings(typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
        if f is not None:
            wheelsAnimator.setMovementInfo(f.movementInfo)
        return wheelsAnimator
    except BigWorld.AssetException:
        _logger.error('Failed to create TankWheelsAnimator', exc_info=True)
        if wheelsAnimator is not None:
            appearance.removeComponent(wheelsAnimator)
        return

    return
def createGeneralWheelsAnimator(appearance, colliderType, typeDescriptor, wheelsState, wheelsScroll, wheelsSteering, lodStateLink=None):
    config = typeDescriptor.chassis.generalWheelsAnimatorConfig
    generalWheelsAnimator = appearance.createComponent(Vehicular.GeneralWheelsAnimator, config, appearance.compoundModel, appearance.collisions, colliderType, wheelsState, wheelsScroll, wheelsSteering, appearance.id)
    generalWheelsAnimator.setLodLink(lodStateLink)
    generalWheelsAnimator.setLodSettings(shared_components.LodSettings(typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
    generalWheelsAnimator.connectVehicleFashion(appearance.fashion)
    return generalWheelsAnimator
def assembleVehicleTraces(appearance, f, lodStateLink=None):
    vehicleTraces = appearance.createComponent(Vehicular.VehicleTraces)
    chassisConfig = appearance.typeDescriptor.chassis
    tracesConfig = chassisConfig.traces
    textures = {}
    for matKindName, texId in DecalMap.g_instance.getTextureSet(tracesConfig.textureSet).iteritems():
        if matKindName != 'bump':
            for matKind in material_kinds.EFFECT_MATERIAL_IDS_BY_NAMES[matKindName]:
                textures[matKind] = texId

    vehicleTraces.setTrackTextures(textures)
    vehicleTraces.setCompound(appearance.compoundModel)
    if chassisConfig.generalWheelsAnimatorConfig is None:
        wrOffset = Math.Vector2(tracesConfig.centerOffset, 0)
        wlOffset = Math.Vector2(-tracesConfig.centerOffset, 0)
        length = appearance.typeDescriptor.chassis.topRightCarryingPoint[1] * 2
        vehicleTraces.addTrackTrace('', wrOffset, tracesConfig.size, length, tracesConfig.bufferPrefs, False)
        vehicleTraces.addTrackTrace('', wlOffset, tracesConfig.size, length, tracesConfig.bufferPrefs, False)
    else:
        traceConfigs = appearance.wheelsAnimator.getTraceConfigs()
        for trace in traceConfigs:
            vehicleTraces.addTrackTrace('', trace[0], tracesConfig.size, trace[1], tracesConfig.bufferPrefs, False)

    isLeftFlying = DataLinks.createBoolLink(appearance.flyingInfoProvider, 'isLeftSideFlying')
    isRightFlying = DataLinks.createBoolLink(appearance.flyingInfoProvider, 'isRightSideFlying')
    vehicleTraces.setFlyingInfo(isLeftFlying, isRightFlying)
    vehicleTraces.setLodLink(lodStateLink)
    vehicleTraces.setLodSettings(shared_components.LodSettings(tracesConfig.lodDist, DEFAULT_MAX_LOD_PRIORITY))
    vehicleTraces.setMovementInfo(f.movementInfo)
    vehicleTraces.setActivePostmortem(tracesConfig.activePostmortem)
    appearance.vehicleTraces = vehicleTraces
    return
Exemple #7
0
def assembleTessellationCollisionSensor(appearance, lodStateLink):
    tessellationCollisionSensor = appearance.createComponent(Vehicular.TessellationCollisionSensor, appearance.compoundModel, TankPartIndexes.CHASSIS)
    if lodStateLink is not None:
        tessellationCollisionSensor.setLodLink(lodStateLink)
        tessellationCollisionSensor.setLodSettings(shared_components.LodSettings(appearance.typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
    appearance.tessellationCollisionSensor = tessellationCollisionSensor
    return
def assembleWaterSensor(vehicleDesc, appearance, lodStateLink):
    MIN_DEPTH_FOR_HEAVY_SPLASH = 0.5
    WATER_SENSOR_LOD_DIST = 150.0
    WATER_SENSOR_MAX_PRIORITY = 15
    turretOffset = vehicleDesc.chassis.hullPosition + vehicleDesc.hull.turretPositions[
        0]
    trPoint = vehicleDesc.chassis.topRightCarryingPoint
    lightVelocityThreshold = vehicleDesc.type.collisionEffectVelocities[
        'waterContact']
    heavyVelocityThreshold = vehicleDesc.type.heavyCollisionEffectVelocities[
        'waterContact']
    sensorConfig = (turretOffset, trPoint, lightVelocityThreshold,
                    heavyVelocityThreshold, MIN_DEPTH_FOR_HEAVY_SPLASH,
                    BigWorld.player().spaceID)
    sensor = Vehicular.WaterSensor(sensorConfig)
    sensor.sensorPlaneLink = appearance.compoundModel.root
    sensor.speedLink = DataLinks.createFloatLink(appearance.filter,
                                                 'averageSpeed')
    sensor.onWaterSplash = appearance.onWaterSplash
    sensor.onUnderWaterSwitch = appearance.onUnderWaterSwitch
    sensor.setLodLink(lodStateLink)
    sensor.setLodSettings(
        shared_components.LodSettings(WATER_SENSOR_LOD_DIST,
                                      WATER_SENSOR_MAX_PRIORITY))
    return sensor
Exemple #9
0
def assembleSimpleTracks(vehicleDesc, fashion, wheelsDataProvider, tracks):
    tracksCfg = vehicleDesc.chassis.tracks
    if tracksCfg is None:
        return
    else:
        leftTracks = []
        rightTracks = []
        for i in xrange(len(tracksCfg.trackPairs)):
            left = (Vehicular.SimpleTrack,
             True,
             i,
             tracksCfg.trackPairs[i].leftMaterial,
             fashion,
             wheelsDataProvider,
             tracksCfg.trackPairs[i].textureScale)
            right = (Vehicular.SimpleTrack,
             False,
             i,
             tracksCfg.trackPairs[i].rightMaterial,
             fashion,
             wheelsDataProvider,
             tracksCfg.trackPairs[i].textureScale)
            leftTracks.append(left)
            rightTracks.append(right)

        lodSettings = shared_components.LodSettings(_INFINITY, DEFAULT_MAX_LOD_PRIORITY)
        tracks.addTrackComponent(True, leftTracks, lodSettings)
        tracks.addTrackComponent(False, rightTracks, lodSettings)
        return
Exemple #10
0
def createTrackNodesAnimator(appearance, typeDescriptor, lodStateLink=None):
    trackNodesAnimator = None
    try:
        compoundModel = appearance.compoundModel
        wheelsDataProvider = appearance.wheelsAnimator
        trackNodesConfig = typeDescriptor.chassis.trackNodes
        trackSplineParams = typeDescriptor.chassis.trackSplineParams
        if not trackNodesConfig:
            return
        trackNodesAnimator = appearance.createComponent(Vehicular.TrackNodesAnimator, compoundModel, TankNodeNames.HULL_SWINGING)
        if trackSplineParams is not None:
            trackNodesAnimator.setParameters(trackSplineParams.thickness, trackSplineParams.gravity, trackSplineParams.maxAmplitude, trackSplineParams.maxOffset)
        for trackNode in trackNodesConfig.nodes:
            leftSibling = '' if trackNode.leftNodeName is None else trackNode.leftNodeName
            rightSibling = '' if trackNode.rightNodeName is None else trackNode.rightNodeName
            trackNodesAnimator.addTrackNode(trackNode.name, trackNode.isLeft, trackNode.initialOffset, leftSibling, rightSibling, (trackNode.damping,
             trackNode.elasticity,
             trackNode.forwardElasticityCoeff,
             trackNode.backwardElasticityCoeff))

        trackNodesAnimator.setWheelsDataProvider(wheelsDataProvider)
        trackNodesAnimator.setLodLink(lodStateLink)
        trackNodesAnimator.setLodSettings(shared_components.LodSettings(typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
        return trackNodesAnimator
    except BigWorld.AssetException:
        _logger.error('Failed to create TrackNodesAnimator', exc_info=True)
        if trackNodesAnimator is not None:
            appearance.removeComponent(trackNodesAnimator)
        return

    return
def createWheelsAnimator(compoundModel,
                         typeDescriptor,
                         splineTracks,
                         f=None,
                         lodStateLink=None):
    wheelsConfig = typeDescriptor.chassis.wheels
    wheelsAnimator = Vehicular.WheelsAnimator(compoundModel)
    for group in wheelsConfig.groups:
        nodes = _createNodeNameListByTemplate(group.startIndex, group.template,
                                              group.count)
        wheelsAnimator.addWheelGroup(group.isLeft, group.radius, nodes)

    for wheel in wheelsConfig.wheels:
        wheelsAnimator.addWheel(wheel.isLeft, wheel.radius, wheel.nodeName,
                                wheel.isLeading, wheel.leadingSyncAngle)

    if splineTracks is not None:
        wheelsAnimator.setSplineTrackMovementData(splineTracks.left,
                                                  splineTracks.right)
    wheelsAnimator.setLodLink(lodStateLink)
    wheelsAnimator.setLodSettings(
        shared_components.LodSettings(typeDescriptor.chassis.wheels.lodDist,
                                      DEFAULT_MAX_LOD_PRIORITY))
    if f is not None:
        wheelsAnimator.setMovementInfo(f.movementInfo)
    return wheelsAnimator
Exemple #12
0
def assembleCollisionObstaclesCollector(appearance, lodStateLink, desc):
    isWheeledVehicle = 'wheeledVehicle' in desc.type.tags
    collisionObstaclesCollector = appearance.createComponent(Vehicular.CollisionObstaclesCollector, appearance.compoundModel, isWheeledVehicle)
    if lodStateLink is not None:
        collisionObstaclesCollector.setLodLink(lodStateLink)
        collisionObstaclesCollector.setLodSettings(shared_components.LodSettings(appearance.typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
    appearance.collisionObstaclesCollector = collisionObstaclesCollector
    return
Exemple #13
0
def createSuspension(appearance, vehicleDescriptor, lodStateLink):
    suspension = None
    try:
        compoundModel = appearance.compoundModel
        collisionObstaclesCollector = appearance.collisionObstaclesCollector
        tessellationCollisionSensor = appearance.tessellationCollisionSensor
        wheelsDataProvider = appearance.wheelsAnimator
        groundNodesConfig = vehicleDescriptor.chassis.groundNodes
        groundNodeGroups = groundNodesConfig.groups
        groundNodes = groundNodesConfig.nodes
        hasGroundNodes = len(groundNodeGroups) or len(groundNodes)
        if not hasGroundNodes:
            return
        siegeSwitchOnTime = 0.0
        siegeSwitchOffTime = 0.0
        if vehicleDescriptor.type.siegeModeParams is not None:
            siegeSwitchOnTime = vehicleDescriptor.type.siegeModeParams['switchOnTime']
            siegeSwitchOffTime = vehicleDescriptor.type.siegeModeParams['switchOffTime']
        if vehicleDescriptor.isWheeledVehicle:
            siegeSwitchOnTime = siegeSwitchOffTime = __getWheelsRiseTime(vehicleDescriptor)
        suspension = appearance.createComponent(Vehicular.Suspension, compoundModel, tessellationCollisionSensor, wheelsDataProvider, TankPartIndexes.CHASSIS, siegeSwitchOnTime, siegeSwitchOffTime, groundNodesConfig.activePostmortem, vehicleDescriptor.isWheeledVehicle)
        for groundGroup in groundNodeGroups:
            nodes = _createNameListByTemplate(groundGroup.startIndex, groundGroup.nodesTemplate, groundGroup.nodesCount)
            wheels = ['']
            if groundGroup.affectedWheelsTemplate is not None:
                wheels = _createNameListByTemplate(groundGroup.startIndex, groundGroup.affectedWheelsTemplate, groundGroup.nodesCount)
            suspension.addGroundNodesGroup(nodes, groundGroup.isLeft, groundGroup.minOffset, groundGroup.maxOffset, wheels, groundGroup.collisionSamplesCount, groundGroup.hasLiftMode)

        for groundNode in groundNodes:
            suspension.addGroundNode(groundNode.nodeName, groundNode.isLeft, groundNode.minOffset, groundNode.maxOffset, groundNode.affectedWheelName, groundNode.collisionSamplesCount, groundNode.hasLiftMode)

        if vehicleDescriptor.chassis.trackSplineParams is not None:
            trackSplineParams = vehicleDescriptor.chassis.trackSplineParams
            suspension.setParameters(trackSplineParams.thickness)
        else:
            suspension.setParameters(0.0)
        suspension.setLodLink(lodStateLink)
        lodSettings = groundNodesConfig.lodSettings
        if lodSettings is None:
            lodSettings = shared_components.LodSettings(vehicleDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY)
        suspension.setLodSettings(lodSettings)
        suspension.setCollisionObstaclesCollector(collisionObstaclesCollector)
        collisionObstaclesCollector.setActivePostmortem(groundNodesConfig.activePostmortem)
        tessellationCollisionSensor.setActivePostmortem(groundNodesConfig.activePostmortem)
        return suspension
    except BigWorld.AssetException:
        _logger.error('Failed to create Suspension', exc_info=True)
        if suspension is not None:
            appearance.removeComponent(suspension)
        return

    return
def assembleTessellationCollisionSensor(appearance, lodStateLink):
    tessellationCollisionSensor = Vehicular.TessellationCollisionSensor(appearance.compoundModel, TankPartIndexes.CHASSIS)
    if lodStateLink is not None:
        tessellationCollisionSensor.setLodLink(lodStateLink)
        tessellationCollisionSensor.setLodSettings(shared_components.LodSettings(appearance.typeDescriptor.chassis.wheels.lodDist, DEFAULT_MAX_LOD_PRIORITY))
        groundNodesConfig = appearance.typeDescriptor.chassis.groundNodes
        groundNodeGroups = groundNodesConfig.groups
        groundNodes = groundNodesConfig.nodes
        hasGroundNodes = len(groundNodeGroups) or len(groundNodes)
        if not hasGroundNodes:
            tessellationCollisionSensor.disable()
    appearance.tessellationCollisionSensor = tessellationCollisionSensor
    return
def assembleCollisionObstaclesCollector(appearance, lodStateLink):
    collisionObstaclesCollector = Vehicular.CollisionObstaclesCollector(appearance.compoundModel, BigWorld.player().spaceID)
    if lodStateLink is not None:
        collisionObstaclesCollector.setLodLink(lodStateLink)
        collisionObstaclesCollector.setLodSettings(shared_components.LodSettings(appearance.typeDescriptor.chassis.wheels.lodDist, DEFAULT_MAX_LOD_PRIORITY))
        groundNodesConfig = appearance.typeDescriptor.chassis.groundNodes
        groundNodeGroups = groundNodesConfig.groups
        groundNodes = groundNodesConfig.nodes
        hasGroundNodes = len(groundNodeGroups) or len(groundNodes)
        if not hasGroundNodes:
            collisionObstaclesCollector.disable()
    appearance.collisionObstaclesCollector = collisionObstaclesCollector
    return
def assembleCollisionObstaclesCollector(appearance, lodStateLink, desc, spaceID):
    isWheeledVehicle = 'wheeledVehicle' in desc.type.tags
    collisionObstaclesCollector = appearance.createComponent(Vehicular.CollisionObstaclesCollector, appearance.compoundModel, spaceID, isWheeledVehicle)
    if lodStateLink is not None:
        collisionObstaclesCollector.setLodLink(lodStateLink)
        collisionObstaclesCollector.setLodSettings(shared_components.LodSettings(appearance.typeDescriptor.chassis.chassisLodDistance, DEFAULT_MAX_LOD_PRIORITY))
        groundNodesConfig = appearance.typeDescriptor.chassis.groundNodes
        groundNodeGroups = groundNodesConfig.groups
        groundNodes = groundNodesConfig.nodes
        hasGroundNodes = len(groundNodeGroups) or len(groundNodes)
        if not hasGroundNodes:
            collisionObstaclesCollector.disable()
    appearance.collisionObstaclesCollector = collisionObstaclesCollector
    return
def assembleTerrainMatKindSensor(appearance, lodStateLink):
    TERRAIN_MAT_KIND_SENSOR_LOD_DIST = 100.0
    TERRAIN_MAT_KIND_SENSOR_MAX_PRIORITY = 15
    compoundModel = appearance.compoundModel
    invertedOrigin = Math.Matrix(compoundModel.matrix)
    leftNodeMatrix = Math.Matrix(compoundModel.node(TankNodeNames.TRACK_LEFT_MID))
    rightNodeMatrix = Math.Matrix(compoundModel.node(TankNodeNames.TRACK_RIGHT_MID))
    leftNodeMatrix.postMultiply(invertedOrigin)
    rightNodeMatrix.postMultiply(invertedOrigin)
    scanLength = 4.0
    offset = Math.Vector3(0.0, scanLength * 0.5, 0.0)
    localPoints = (leftNodeMatrix.translation + offset, rightNodeMatrix.translation + offset, Math.Vector3(0.0, 0.0, 0.0) + offset)
    sensor = appearance.terrainMatKindSensor = Vehicular.TerrainMatKindSensor(compoundModel.root, localPoints, scanLength, BigWorld.player().spaceID)
    sensor.setLodLink(lodStateLink)
    sensor.setLodSettings(shared_components.LodSettings(TERRAIN_MAT_KIND_SENSOR_LOD_DIST, TERRAIN_MAT_KIND_SENSOR_MAX_PRIORITY))
def assembleSplineTracks(vehicleDesc, appearance, splineTracksImpl, tracks):
    if splineTracksImpl is None:
        return
    else:
        lodDist = vehicleDesc.chassis.splineDesc.lodDist
        lodSettings = shared_components.LodSettings(lodDist, _SPLINE_TRACKS_MAX_COUNT)
        leftSplineTracks = []
        rightSplineTracks = []
        for left, right in zip(splineTracksImpl[0], splineTracksImpl[1]):
            leftSplineTracks.append(Vehicular.SplineTrack(appearance.worldID, left, appearance.compoundModel, appearance.wheelsAnimator))
            rightSplineTracks.append(Vehicular.SplineTrack(appearance.worldID, right, appearance.compoundModel, appearance.wheelsAnimator))

        if leftSplineTracks:
            tracks.addTrackComponent(True, leftSplineTracks, lodSettings)
        if rightSplineTracks:
            tracks.addTrackComponent(False, rightSplineTracks, lodSettings)
        return
def assembleSimpleTracks(appearance, vehicleDesc, fashion, wheelsDataProvider, tracks):
    tracksCfg = vehicleDesc.chassis.tracks
    if tracksCfg is None:
        return
    else:
        leftTracks = []
        rightTracks = []
        for i in xrange(tracksCfg.pairsCount):
            left = Vehicular.SimpleTrack(appearance.worldID, True, i, tracksCfg.leftMaterial, fashion, wheelsDataProvider)
            right = Vehicular.SimpleTrack(appearance.worldID, False, i, tracksCfg.rightMaterial, fashion, wheelsDataProvider)
            meterToTexScale = tracksCfg.textureScale
            left.meterToTexScale = meterToTexScale
            right.meterToTexScale = meterToTexScale
            leftTracks.append(left)
            rightTracks.append(right)

        lodSettings = shared_components.LodSettings(_INFINITY, DEFAULT_MAX_LOD_PRIORITY)
        tracks.addTrackComponent(True, leftTracks, lodSettings)
        tracks.addTrackComponent(False, rightTracks, lodSettings)
        return
Exemple #20
0
def readLodSettings(xmlCtx, section, cache):
    return shared_components.LodSettings(
        maxLodDistance=readLodDist(xmlCtx, section,
                                   'lodSettings/maxLodDistance', cache),
        maxPriority=_xml.readIntOrNone(xmlCtx, section,
                                       'lodSettings/maxPriority'))
import WoT
import debug_utils
import material_kinds
from constants import IS_DEVELOPMENT, IS_EDITOR
from soft_exception import SoftException
import math_utils
from helpers import DecalMap
from items.components import shared_components, component_constants
from vehicle_systems.vehicle_damage_state import VehicleDamageState
from vehicle_systems.tankStructure import getPartModelsFromDesc, getCollisionModelsFromDesc, TankNodeNames, TankPartNames, TankPartIndexes, RenderStates, TankCollisionPartNames
from vehicle_systems.components.hull_aiming_controller import HullAimingController
DEFAULT_MAX_LOD_PRIORITY = None
_INFINITY = 10000
_PHYSICAL_TRACKS_MAX_DISTANCE = 60
_PHYSICAL_TRACKS_MAX_COUNT = 5
_PHYSICAL_TRACKS_LOD_SETTINGS = shared_components.LodSettings(_PHYSICAL_TRACKS_MAX_DISTANCE, _PHYSICAL_TRACKS_MAX_COUNT)
_SPLINE_TRACKS_MAX_COUNT = 5
_AREA_LOD_FOR_NONSIMPLE_TRACKS = 50
_WHEEL_TO_TRACE_RATIO = 0.75
_DEFAULT_LOD_INDEX = 0

def __getWheelsRiseTime(vehicleDesc):
    wheelsRiseTime = 0.0
    chassisXPhysics = vehicleDesc.type.xphysics['chassis'][vehicleDesc.chassis.name]
    if 'wheelRiseSpeed' in chassisXPhysics:
        wheelRiseSpeed = chassisXPhysics['wheelRiseSpeed']
        if wheelRiseSpeed > 0.0:
            wheelsRiseTime = 1.0 / wheelRiseSpeed
    return wheelsRiseTime