Skip to main content
Skip to main content

TireTracks

TireTracks

Description

Specialization for tire tracks created in Wheels & SpeedRotatingParts

Functions

addTireTrackNode

Description

Definition

addTireTrackNode()

Arguments

anywheel
anyparent
anylinkNode
anytireTrackAtlasIndex
anywidth
anyradius
anyinverted
anyactiveFunc

Code

function TireTracks:addTireTrackNode(wheel, parent, linkNode, tireTrackAtlasIndex, width, radius, inverted, activeFunc)
local spec = self.spec_tireTracks

local tireTrackNode = { }
tireTrackNode.wheel = wheel
tireTrackNode.parent = parent
tireTrackNode.linkNode = linkNode
tireTrackNode.tireTrackAtlasIndex = tireTrackAtlasIndex
tireTrackNode.width = width
tireTrackNode.radius = radius
tireTrackNode.inverted = inverted
tireTrackNode.activeFunc = activeFunc

if spec.tireTrackSystem ~ = nil then
tireTrackNode.tireTrackIndex = spec.tireTrackSystem:createTrack(width, tireTrackAtlasIndex)

if tireTrackNode.tireTrackIndex ~ = nil then
table.insert(spec.tireTrackNodes, tireTrackNode)
spec.hasTireTrackNodes = next(spec.tireTrackNodes) ~ = nil

return #spec.tireTrackNodes
end
end

return nil
end

getAllowTireTracks

Description

Definition

getAllowTireTracks()

Code

function TireTracks:getAllowTireTracks()
return self.currentUpdateDistance < TireTracks.MAX_CREATION_DISTANCE and self.spec_tireTracks.segmentsCoeff > 0
end

initSpecialization

Description

Called on specialization initializing

Definition

initSpecialization()

Code

function TireTracks.initSpecialization()
end

onDelete

Description

Called on deleting

Definition

onDelete()

Code

function TireTracks:onDelete()
local spec = self.spec_tireTracks
if spec.tireTrackNodes ~ = nil then
for _, tireTrackNode in pairs(spec.tireTrackNodes) do
spec.tireTrackSystem:destroyTrack(tireTrackNode.tireTrackIndex)
end
end
end

onPreLoad

Description

Called on load

Definition

onPreLoad(table savegame)

Arguments

tablesavegamesavegame

Code

function TireTracks:onPreLoad(savegame)
local spec = self.spec_tireTracks
spec.tireTrackNodes = { }
spec.hasTireTrackNodes = false

spec.segmentsCoeff = getTyreTracksSegmentsCoeff()

spec.tireTrackSystem = g_currentMission.tireTrackSystem
end

onUpdate

Description

Called on update

Definition

onUpdate(float dt, boolean isActiveForInput, boolean isSelected, )

Arguments

floatdttime since last call in ms
booleanisActiveForInputtrue if vehicle is active for input
booleanisSelectedtrue if vehicle is selected
anyisSelected

Code

function TireTracks:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
if self.isActive then
local spec = self.spec_tireTracks
if spec.hasTireTrackNodes then
local allowTireTracks = self:getAllowTireTracks()
for _, tireTrackNode in pairs(spec.tireTrackNodes) do
self:updateTireTrackNode(tireTrackNode, allowTireTracks)
end
end
end
end

prerequisitesPresent

Description

Definition

prerequisitesPresent()

Arguments

anyspecializations

Code

function TireTracks.prerequisitesPresent(specializations)
return true
end

registerEventListeners

Description

Definition

registerEventListeners()

Arguments

anyvehicleType

Code

function TireTracks.registerEventListeners(vehicleType)
SpecializationUtil.registerEventListener(vehicleType, "onPreLoad" , TireTracks )
SpecializationUtil.registerEventListener(vehicleType, "onDelete" , TireTracks )
SpecializationUtil.registerEventListener(vehicleType, "onUpdate" , TireTracks )
end

registerFunctions

Description

Definition

registerFunctions()

Arguments

anyvehicleType

Code

function TireTracks.registerFunctions(vehicleType)
SpecializationUtil.registerFunction(vehicleType, "getAllowTireTracks" , TireTracks.getAllowTireTracks)
SpecializationUtil.registerFunction(vehicleType, "addTireTrackNode" , TireTracks.addTireTrackNode)
SpecializationUtil.registerFunction(vehicleType, "removeTireTrackNode" , TireTracks.removeTireTrackNode)
SpecializationUtil.registerFunction(vehicleType, "updateTireTrackNode" , TireTracks.updateTireTrackNode)
end

registerOverwrittenFunctions

Description

Definition

registerOverwrittenFunctions()

Arguments

anyvehicleType

Code

function TireTracks.registerOverwrittenFunctions(vehicleType)
end

removeTireTrackNode

Description

Definition

removeTireTrackNode()

Arguments

anytireTrackNodeIndex

Code

function TireTracks:removeTireTrackNode(tireTrackNodeIndex)
local spec = self.spec_tireTracks
spec.tireTrackNodes[tireTrackNodeIndex] = nil
spec.hasTireTrackNodes = next(spec.tireTrackNodes) ~ = nil
end

updateTireTrackNode

Description

Definition

updateTireTrackNode()

Arguments

anytireTrackNode
anyallowTireTracks

Code

function TireTracks:updateTireTrackNode(tireTrackNode, allowTireTracks)
local spec = self.spec_tireTracks
local wheel = tireTrackNode.wheel

if not allowTireTracks then
spec.tireTrackSystem:cutTrack(tireTrackNode.tireTrackIndex)
return
end

if tireTrackNode.activeFunc ~ = nil and not tireTrackNode.activeFunc() then
spec.tireTrackSystem:cutTrack(tireTrackNode.tireTrackIndex)
return
end

local wx, wy, wz = worldToLocal(tireTrackNode.parent, getWorldTranslation(tireTrackNode.linkNode))
wy = wy - tireTrackNode.radius
wx, wy, wz = localToWorld(tireTrackNode.parent, wx, wy, wz)
wy = math.max(wy, getTerrainHeightAtWorldPos(g_terrainNode, wx, wy, wz))

if wheel.physics.contact ~ = WheelContactType.NONE and wheel.physics.lastContactObjectAllowsTireTracks then
local r, g, b, groundDepth, t, dirtAmount, colorBlendWithTerrain = wheel.physics:getGroundAttributes()
if dirtAmount > 0 then
-- we are using wheel shape direction to be independent from component(s) direction
local ux, uy, uz = localDirectionToWorld(wheel.node, - wheel.physics.directionX, - wheel.physics.directionY, - wheel.physics.directionZ)

local tireDirection = self.movingDirection
if tireTrackNode.inverted then
tireDirection = tireDirection * - 1
end

spec.tireTrackSystem:addTrackPoint(tireTrackNode.tireTrackIndex, wx, wy, wz, ux, uy, uz, r, g, b, dirtAmount, groundDepth, tireDirection, wheel.physics.contact ~ = WheelContactType.OBJECT, colorBlendWithTerrain)
else
spec.tireTrackSystem:cutTrack(tireTrackNode.tireTrackIndex)
end
else
spec.tireTrackSystem:cutTrack(tireTrackNode.tireTrackIndex)
end
end