Files
gtav-src/tools_ng/dcc/current/max2012/scripts/rockstar/helpers/pathnodecheck.ms
T
2025-09-29 00:52:08 +02:00

146 lines
2.8 KiB
Plaintext
Executable File

--
-- File:: rockstar/helpers/pathnodecheck.ms
-- Description:: Path Node Checker
--
RsCollisionList = #()
RsCheckDistance = 1.0
RsErrorList = #()
fn getCollisionList pos colList = (
for obj in RsCollisionList do (
if pos.x >= obj.min.x and pos.x <= obj.max.x and pos.y >= obj.min.y and pos.y <= obj.max.y do (
append colList obj
)
)
)
fn doesNodeCollide checkNode = (
colList = #()
getCollisionList checkNode.pos colList
retval = false
for obj in colList do (
col2mesh obj
facecount = obj.numfaces
for i = 1 to facecount do (
currface = getface obj i
vertA = getvert obj currface[1]
vertB = getvert obj currface[2]
vertC = getvert obj currface[3]
dist = raytriintersect checkNode.pos [0,0,-1] vertA vertB vertC
if dist != undefined then (
retval = true
) else (
dist = raytriintersect checkNode.pos [0,0,1] vertA vertC vertB
if dist != undefined then (
retval = true
)
)
)
mesh2col obj
if retval then return true
)
retval
)
fn checkPosAgainstCollision checkpos = (
colList = #()
getCollisionList checkpos colList
minDist = undefined
for obj in colList do (
col2mesh obj
facecount = obj.numfaces
for i = 1 to facecount do (
currface = getface obj i
vertA = getvert obj currface[1]
vertB = getvert obj currface[2]
vertC = getvert obj currface[3]
dist = raytriintersect checkpos [0,0,-1] vertA vertB vertC
if dist != undefined and (minDist == undefined or dist < (abs minDist)) then (
minDist = dist
) else (
dist = raytriintersect checkpos [0,0,1] vertA vertC vertB
if dist != undefined and (minDist == undefined or dist < (abs minDist)) then (
minDist = -dist
)
)
)
mesh2col obj
)
minDist
)
fn checkNodePathAgainstCollision checkNode = (
minDist = checkPosAgainstCollision checkNode.pos
if minDist != undefined and ((abs minDist) < 1.0) then (
checkNode.pos.z = checkNode.pos.z - minDist
)
)
fn checkLinkAgainstCollision linkNode deviation = (
nodeA = VehLinkGetNodeA linkNode
nodeB = VehLinkGetNodeB linkNode
error = false
if doesNodeCollide nodeA and doesNodeCollide nodeB then (
diff = nodeA.pos - nodeB.pos
difflength = length diff
normal = normalize diff
checkPos = nodeB.pos
difflength = difflength - RsCheckDistance
while difflength > 0.0 do (
checkPos = checkPos + (normal * RsCheckDistance)
dist = checkPosAgainstCollision checkPos
if ( ( dist != undefined ) and ( dist > deviation ) ) then return true
difflength = difflength - RsCheckDistance
)
)
false
)