VE Lua Documentation

Press F to search!

surfaceNormalBelow

Definition


-- @/lua/vehicle/mapmgr.lua:182
local function surfaceNormalBelow(p, r)
  --   p3
  --     \ r
  --      \    r
  --       p - - - p1     + > y
  --      /               v
  --     / r              x
  --   p2

  r = r or 2
  local hr = 1.2 * r -- calculation is guaranteed to be accurate up to ~ 50 deg (argtan(1.2)) inclination

  p1:set(p.x, p.y + r, p.z + hr)
  p2:set(p.x + 0.8660254037844386 * r, p.y - 0.5 * r, p1.z) -- sin(60) => 0.8660254037844386, cos(60) => 0.5
  local p3 = p2:copy()
  p3.x = p.x - 0.8660254037844386 * r

  p1.z = obj:getSurfaceHeightBelow(p1)
  p2.z = obj:getSurfaceHeightBelow(p2)
  p3.z = obj:getSurfaceHeightBelow(p3)

  -- store the result in p3
  if min(p1.z, p2.z, p3.z) + hr < p.z then
    p3:set(0, 0, 1)
  else
    p2:setSub(p3)
    p1:setSub(p3)
    p3:set(p2.y * p1.z - p2.z * p1.y, p2.z * p1.x - p2.x * p1.z, p2.x * p1.y - p2.y * p1.x) -- p2 x p1
    p3:normalize()
  end

  return p3
end

Callers

@/lua/vehicle/scriptai.lua
    dir = vec3(script[1].dir)
    up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
      dir = p2 - p1; dir:normalize()
      up = mapmgr.surfaceNormalBelow(p1)
    dir = vec3(script[1].dir)
    up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
      dir = p2 - p1; dir:normalize()
      up = mapmgr.surfaceNormalBelow(p1)
@/lua/vehicle/controller/tech/roadsSensor.lua
    for k, v in pairs(coords) do
      normals[k] = mapmgr.surfaceNormalBelow(v)
    end
@/lua/vehicle/ai.lua
  newNode.turnDir:set(0, 0, 0)
  newNode.biNormal:setScaled2(mapmgr.surfaceNormalBelow(mapData.positions[newNodeId], mapData.radius[newNodeId] * 0.5), -1)
  newNode.normal:set(0, 0, 0)
    n2.radiusOrig = getPathNodeRadius(path, i) --mapData.radius[path[i]],
    n2.biNormal = -mapmgr.surfaceNormalBelow(mapData.positions[path[i]], mapData.radius[path[i]] * 0.5)
    local rad1, rad2 = mapData:getEdgeRadii(path[i], path[i+1])
    local biNormal = mapmgr.surfaceNormalBelow(pos1)
    local normal = (pos2-pos1):cross(biNormal); normal:normalize()
      segC:setAdd2(n1.pos, segVx)
      segVz = mapmgr.surfaceNormalBelow(segC, (n1.radiusOrig + n2.radiusOrig) * 0.25); segVz:setScaled(-1)
      segVy:setCross(segVz, segVx); segVy:setScaled(0.5 * ego.width / (segVy:length() +  1e-30)) -- 0.5 * (ego.width + 1)

      newNode.biNormal = mapmgr.surfaceNormalBelow(newNode.posOrig, radiusOrig * 0.5); newNode.biNormal:setScaled(-1)
    local laneLimLeft, laneLimRight = -ego.width * 0.5, ego.width * 0.5
    local biNormal = mapmgr.surfaceNormalBelow(ego.pos, ego.width * 0.5); biNormal:setScaled(-1)
    local wp, lanes, roadSpeedLimit
    local laneLimLeft, laneLimRight = -ego.width * 0.5, ego.width * 0.5
    local biNormal = mapmgr.surfaceNormalBelow(ego.pos, ego.width * 0.5); biNormal:setScaled(-1)
    local wp, lanes, roadSpeedLimit
    local dir = (pos - pos2):normalized()
    local up = mapmgr.surfaceNormalBelow(pos)
    local rot = quatFromDir(-dir:cross(up):cross(up), up) -- minus sign is due to convention used by safeTeleport
      dir = vec3(script[1].dir)
      up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
        dir = p2 - p1; dir:normalize()
        up = mapmgr.surfaceNormalBelow(p1)
@/lua/vehicle/extensions/advancedwheeldebug.lua
      local pos = obj:getNodePosition(nodeId) + obj:getPosition()
      local normal = mapmgr.surfaceNormalBelow(pos, 0.1)
      surfaceUp:setAdd(normal)