GE Lua Documentation

Press F to search!

setupCrawl

Definition


-- @/lua/ge/extensions/gameplay/crawl/general.lua:25


local function setupCrawl(trail, veh, isFromMission)
  if not trail or not veh then
    log('E', logTag, 'Cannot setup crawl: no valid trail data')
    return false
  end

  if M.activeTrail then
    gameplay_crawl_utils.stopCrawl(true)
    crawlersData = {}
  end

  local boundary = gameplay_crawl_saveSystem.getBoundaryById(trail.boundaryId)
  local path = gameplay_crawl_saveSystem.getPathById(trail.pathId)
  local startingPosition = gameplay_crawl_saveSystem.getStartingPositionById(trail.startingPositionId)

  if not boundary or not path then
    log('E', logTag, 'Missing required boundary or path data for trail: ' .. trail.name)
    return false
  end

  M.activeTrail = {
    trail = trail,
    boundary = boundary,
    path = deepcopy(path),
    startingPosition = startingPosition,
    prefabs = trail.prefabs or {},
    isFromMission = isFromMission or false
  }

  if trail.pathReversed then
    M.activeTrail.path.nodes = arrayReverse(M.activeTrail.path.nodes)

    local reverseRot180 = quatFromAxisAngle(vec3(0, 1, 0), math.pi)
    for _, node in ipairs(M.activeTrail.path.nodes) do
      if node.rotation then
        node.rotation = reverseRot180 * node.rotation
      end
    end

    if trail.startingPositionIdReversed and trail.startingPositionIdReversed ~= "" then
      startingPosition = gameplay_crawl_saveSystem.getStartingPositionById(trail.startingPositionIdReversed)
      M.activeTrail.startingPosition = startingPosition
    elseif M.activeTrail.path.nodes and #M.activeTrail.path.nodes > 0 then
      local firstNode = M.activeTrail.path.nodes[1]
      if firstNode and firstNode.pos then
        local rot = firstNode.rotation or quat(0, 0, 0, 1)
        startingPosition = {
          transform = {
            position = firstNode.pos,
            rotation = rot,
            radius = 10.0
          }
        }
        M.activeTrail.startingPosition = startingPosition
      end
    end
  end

  local crawlerData = gameplay_crawl_utils.setupCrawlerData(veh)
  table.insert(crawlersData, crawlerData)

  gameplay_crawl_utils.loadPrefabs(M.activeTrail.prefabs)

  if startingPosition and isFromMission then
    spawn.safeTeleport(veh, startingPosition.transform.position, startingPosition.transform.rotation, nil, nil, nil, nil, true)
  end

  return true
end

Callers

@/lua/ge/extensions/flowgraph/nodes/gameplay/crawl/setupCrawl.lua
  log('D', 'SetupCrawl', string.format('Calling bridge.setupCrawl with vehicleId: %s', tostring(vehicleIdToUse)))
  if self.bridge.setupCrawl(vehicleIdToUse, trail) then
    log('I', 'SetupCrawl', 'Crawl setup completed successfully via bridge')
@/lua/ge/extensions/gameplay/crawl/general.lua

  if not setupCrawl(trail, veh, false) then
    log('E', logTag, 'Failed to setup crawl')

  if not setupCrawl(trail, veh, true) then
    log('E', logTag, 'Failed to setup crawl')
      if veh then
        setupCrawl(trail, veh, false)
      end
@/lua/ge/extensions/gameplay/crawl/flowgraphBridge.lua

  if gameplay_crawl_general.setupCrawl(trail, veh, true) then
    return true