Compare commits

..

No commits in common. "main" and "1.4" have entirely different histories.
main ... 1.4

2 changed files with 29 additions and 93 deletions

View File

@ -30,9 +30,9 @@ local function spawnVehicle(inventoryId, callback)
end end
local function Retrieve(inventoryId) local function Retrieve(inventoryId)
career_vehicleSaveSystem.EnqueueVehicleToSave(inventoryId) career_vehicleSaveSystem.QueueVehicleToSave(inventoryId)
if not career_vehicleSaveSystem.SaveVehicle(inventoryId) then if not career_vehicleSaveSystem.SaveVehicle(inventoryId) then
career_vehicleSaveSystem.DequeueVehicleToSave(inventoryId) career_vehicleSaveSystem.QueuedVehicleSaved(inventoryId)
end end
local vehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(inventoryId, true) local vehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(inventoryId, true)
@ -41,11 +41,17 @@ local function Retrieve(inventoryId)
career_vehicleSaveSystem.CheckSavedAsync(function() career_vehicleSaveSystem.CheckSavedAsync(function()
extensions.core_jobsystem.create( extensions.core_jobsystem.create(
function(job) function(job)
career_vehicleSaveSystem.SetFade(true)
job.sleep(1)
spawnVehicle(inventoryId, function() spawnVehicle(inventoryId, function()
career_vehicleSaveSystem.TeleportVehicle(inventoryId, false) local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
career_vehicleSaveSystem.LoadVehicle(inventoryId, currentVehicleValue < vehicleValue) local location = { pos = veh:getPosition(), rot = quat(0, 0, 1, 0) * quat(veh:getRefNodeRotation()) }
local garage = career_modules_inventory.getClosestGarage(location.pos)
job.sleep(1)
if currentVehicleValue < vehicleValue then
career_vehicleSaveSystem.LoadVehicle(inventoryId)
else
log('I', 'retrieval', 'retrieving vehicle ' .. inventoryId .. " in an undamaged state")
end
freeroam_facilities.teleportToGarage(garage.id, veh, false)
end) end)
end end
) )
@ -81,7 +87,7 @@ end
local function RemoveVehicleObject(inventoryId) local function RemoveVehicleObject(inventoryId)
table.insert(vehicleObjectsToRemove, inventoryId) table.insert(vehicleObjectsToRemove, inventoryId)
career_vehicleSaveSystem.EnqueueVehicleToSave(inventoryId) career_vehicleSaveSystem.QueueVehicleToSave(inventoryId)
career_vehicleSaveSystem.SaveVehicle(inventoryId) career_vehicleSaveSystem.SaveVehicle(inventoryId)
career_vehicleSaveSystem.CheckSavedAsync(function() career_vehicleSaveSystem.CheckSavedAsync(function()
career_modules_inventory_removeVehicleObject(inventoryId) career_modules_inventory_removeVehicleObject(inventoryId)

View File

@ -15,8 +15,7 @@
local M = {} local M = {}
M.dependencies = { 'freeroam_facilities', 'ui_fadeScreen', 'career_career', 'career_saveSystem', M.dependencies = { 'career_career', 'career_saveSystem', 'career_modules_inventory' }
'career_modules_inventory' }
local extensionName = "career_vehicleSaveSystem" local extensionName = "career_vehicleSaveSystem"
local vehicleSaves_temp = "/temp/career/vehicle_saves" local vehicleSaves_temp = "/temp/career/vehicle_saves"
@ -66,50 +65,13 @@ local function GetVehicleSaveFile(root, inventoryId)
return path .. "/save.json" return path .. "/save.json"
end end
local function EnqueueVehicleToSave(inventoryId) local function QueueVehicleToSave(inventoryId)
log("I", "saving", "enqueued vehicle " .. inventoryId)
M.queuedVehicleSaves[inventoryId] = true M.queuedVehicleSaves[inventoryId] = true
end end
local function DequeueVehicleToSave(inventoryId) local function QueuedVehicleSaved(inventoryId)
log("I", "saving", "dequeued vehicle " .. inventoryId) log("I", "saving", "saved vehicle " .. inventoryId)
M.queuedVehicleSaves[inventoryId] = nil table.remove(M.queuedVehicleSaves, inventoryId)
end
local function TeleportVehicle(inventoryId, delayed, callback)
log("I", "loading", "teleporting vehicle " .. inventoryId)
local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
local location = { pos = veh:getPosition(), rot = quat(0, 0, 1, 0) * quat(veh:getRefNodeRotation()) }
local garage = career_modules_inventory.getClosestGarage(location.pos)
extensions.core_jobsystem.create(function(job)
if delayed then
job.sleep(1)
end
freeroam_facilities.teleportToGarage(garage.id, veh, false)
if callback then
callback()
end
end)
end
local fadeInProgress = false
local function SetFade(fade)
if fadeInProgress and fade then
return
end
if not fadeInProgress and not fade then
return
end
if fade then
ui_fadeScreen.start(0.5)
fadeInProgress = true
else
ui_fadeScreen.stop(0.5)
fadeInProgress = false
end
end end
local function VehiclesSaved() local function VehiclesSaved()
@ -146,51 +108,24 @@ local function SaveVehicle(inventoryId)
local object = be:getObjectByID(vehicleId) local object = be:getObjectByID(vehicleId)
object:queueLuaCommand("beamstate.save(\"" .. object:queueLuaCommand("beamstate.save(\"" ..
saveFile .. saveFile ..
"\"); obj:queueGameEngineLua('career_vehicleSaveSystem.DequeueVehicleToSave(" .. inventoryId .. ")');") "\"); obj:queueGameEngineLua('career_vehicleSaveSystem.QueuedVehicleSaved(\"" .. inventoryId .. "\")');")
return true return true
else else
log('I', 'saving', 'vehicle ' .. inventoryId .. " not spawned")
return false return false
end end
end end
local function FinishedLoading(inventoryId) local function LoadVehicle(inventoryId)
M.SetFade(false)
local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
local pos, _ = freeroam_facilities.getGaragePosRot(career_modules_inventory.getClosestGarage(), veh)
career_modules_playerDriving.showPosition(pos)
end
local function LoadVehicle(inventoryId, loadDamaged)
local saveFile = GetVehicleSaveFile(vehicleSaves_temp, inventoryId) local saveFile = GetVehicleSaveFile(vehicleSaves_temp, inventoryId)
local vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId) local vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId)
if vehicleId then if vehicleId then
log("I", "loading", "loading vehicle from " .. saveFile) log("I", "loading", "loading vehicle from " .. saveFile)
if loadDamaged then
local object = be:getObjectByID(vehicleId) local object = be:getObjectByID(vehicleId)
object:queueLuaCommand( object:queueLuaCommand("beamstate.load(\"" ..
"beamstate.load(\"" .. saveFile .. "\"); " .. saveFile .. "\");" ..
"for key, value in pairs(v.data.controller) do " .. "for key, value in pairs(v.data.controller) do if value['fileName'] == 'advancedCouplerControl' then local c = controller.getController(value['name']) if c['reset'] then c['reset']() end end end"
" if value['fileName'] == 'advancedCouplerControl' then " ..
" local c = controller.getController(value['name']) " ..
" if c['reset'] then " ..
" c['reset']() " ..
" end " ..
" end " ..
" end; " ..
" obj:queueGameEngineLua(' " ..
" career_vehicleSaveSystem.TeleportVehicle( " ..
" " .. inventoryId .. ", " ..
" true, " ..
" function() " ..
" career_vehicleSaveSystem.FinishedLoading(" .. inventoryId .. ")" ..
" end) " ..
" ');"
) )
else
FinishedLoading(inventoryId)
end
end end
end end
@ -202,12 +137,12 @@ local function onSaveCurrentSaveSlot(currentSavePath, oldSaveDate, vehiclesThumb
local vehicles = career_modules_inventory.getVehicles() local vehicles = career_modules_inventory.getVehicles()
for id, _ in pairs(vehicles) do for id, _ in pairs(vehicles) do
EnqueueVehicleToSave(id) QueueVehicleToSave(id)
end end
for id, _ in pairs(M.queuedVehicleSaves) do for id, _ in pairs(M.queuedVehicleSaves) do
if not SaveVehicle(id) then if not SaveVehicle(id) then
DequeueVehicleToSave(id) QueuedVehicleSaved(id)
end end
end end
CheckSavedAsync(function() CheckSavedAsync(function()
@ -230,16 +165,11 @@ M.queuedVehicleSaves = {}
M.SaveVehicle = SaveVehicle M.SaveVehicle = SaveVehicle
M.LoadVehicle = LoadVehicle M.LoadVehicle = LoadVehicle
M.FinishedLoading = FinishedLoading
M.TeleportVehicle = TeleportVehicle
M.SetFade = SetFade
M.CheckSavedAsync = CheckSavedAsync M.CheckSavedAsync = CheckSavedAsync
M.EnqueueVehicleToSave = EnqueueVehicleToSave M.QueueVehicleToSave = QueueVehicleToSave
M.DequeueVehicleToSave = DequeueVehicleToSave M.QueuedVehicleSaved = QueuedVehicleSaved
M.onSaveCurrentSaveSlotAsyncStart = onSaveCurrentSaveSlotAsyncStart M.onSaveCurrentSaveSlotAsyncStart = onSaveCurrentSaveSlotAsyncStart
M.onSaveCurrentSaveSlot = onSaveCurrentSaveSlot M.onSaveCurrentSaveSlot = onSaveCurrentSaveSlot