GE Lua Documentation

Press F to search!

loadCompleteDragRaceData

Definition


-- @/lua/ge/extensions/gameplay/drag/saveSystem.lua:36

M.loadCompleteDragRaceData = function(stripId)

  local stripData = jsonReadFile(stripId)
  if not stripData then
    log('E', logTag, 'Strip file not found: ' .. stripId)
    return nil
  end


  local completeData = {
    strip = {
      id = stripData.id,
      name = stripData.name,
      description = stripData.description,
      endCamera = stripData.endCamera,
      lanes = {}
    },
    racers = {}, -- Initialize racers array
    phases = {
      {
        name = "stage",
        dependency = true,
        startedOffset = 0
      },
      {
        name = "countdown",
        dependency = true,
        startedOffset = 0
      },
      {
        name = "race",
        dependency = false,
        startedOffset = 0
      },
      {
        name = "stop",
        dependency = false,
        startedOffset = 0
      }
    }, -- Initialize phases array
    prefabs = {
      christmasTree = {
        isUsed = false,
        treeType = ".400"
      },
      displaySign = {
        isUsed = false
      },
      paths = {
        isUsed = false
      },
      decorations = {
        isUsed = false
      }
    },
    dragType = "dragPracticeRace", -- Default drag type
    context = "freeroam", -- Default context
    canBeReseted = true,
    canBeTeleported = true,
    isStarted = false,
    isCompleted = false
  }

  if stripData.lanes then
    for _, lane in ipairs(stripData.lanes) do

      local completeLane = {
        id = lane.id,
        shortName = lane.shortName,
        longName = lane.longName,
        color = lane.color,
        laneOrder = lane.laneOrder,
        waypoints = {},
        boundary = {}
      }

      if lane.waypoints then
        for _, waypoint in ipairs(lane.waypoints) do
          local rot = quat(waypoint.transform.rotation.x, waypoint.transform.rotation.y, waypoint.transform.rotation.z, waypoint.transform.rotation.w)
          local scl = vec3(waypoint.transform.scale.x, waypoint.transform.scale.y, waypoint.transform.scale.z)

          completeLane.waypoints[waypoint.type] = {
            id = waypoint.id,
            name = waypoint.name,
            transform = {
              position = vec3(waypoint.transform.position.x, waypoint.transform.position.y, waypoint.transform.position.z),
              rotation = rot,
              scale = scl,
              -- Legacy compatibility fields
              pos = vec3(waypoint.transform.position.x, waypoint.transform.position.y, waypoint.transform.position.z),
              rot = rot,
              scl = scl,
              -- Add coordinate system axes for compatibility with areFrontWheelsParallelToLine
              x = rot * vec3(scl.x, 0, 0),
              y = rot * vec3(0, scl.y, 0),
              z = rot * vec3(0, 0, scl.z)
            },
            waypoint = waypoint.waypoint
          }
        end
      end

      -- Calculate stageToEndNormalized vector from waypoints
      if completeLane.waypoints.stage and completeLane.waypoints.endLine then
        local stagePos = completeLane.waypoints.stage.transform.position
        local endPos = completeLane.waypoints.endLine.transform.position
        local stageToEnd = endPos - stagePos
        completeLane.stageToEndNormalized = stageToEnd:normalized()
      else
        -- Fallback: use default forward direction if waypoints are missing
        completeLane.stageToEndNormalized = vec3(1, 0, 0)
      end

      if lane.boundary then
        completeLane.boundary = {
          transform = {
            position = vec3(lane.boundary.transform.position.x, lane.boundary.transform.position.y, lane.boundary.transform.position.z),
            rotation = quat(lane.boundary.transform.rotation.x, lane.boundary.transform.rotation.y, lane.boundary.transform.rotation.z, lane.boundary.transform.rotation.w),
            scale = vec3(lane.boundary.transform.scale.x, lane.boundary.transform.scale.y, lane.boundary.transform.scale.z),
          }
        }
      end

      table.insert(completeData.strip.lanes, completeLane)
    end
  end

  return completeData
end

Callers

@/lua/ge/extensions/gameplay/drag/saveSystem.lua
  if data.stripId then
    local stripData = M.loadCompleteDragRaceData(data.stripId)
    if stripData then
@/lua/ge/extensions/gameplay/drag/dragBridge.lua
  -- Try new modular system first
  local dragStrip = gameplay_drag_saveSystem.loadCompleteDragRaceData(dragStripId)
  if dragStrip then
  if dragStripId then
    dragStrip = gameplay_drag_saveSystem.loadCompleteDragRaceData(dragStripId)
  else