From 5ca5ce8bac828490c261a01dc152919857041c0e Mon Sep 17 00:00:00 2001 From: snoutie Date: Sat, 15 Mar 2025 18:44:41 +0100 Subject: [PATCH] Fix Vehicle Spawning Rotation & Add Screen Fading --- lua/ge/extensions/career/vehicleRetrieval.lua | 14 +--- .../extensions/career/vehicleSaveSystem.lua | 82 +++++++++++++++++-- 2 files changed, 79 insertions(+), 17 deletions(-) diff --git a/lua/ge/extensions/career/vehicleRetrieval.lua b/lua/ge/extensions/career/vehicleRetrieval.lua index c821a58..7457efb 100644 --- a/lua/ge/extensions/career/vehicleRetrieval.lua +++ b/lua/ge/extensions/career/vehicleRetrieval.lua @@ -41,17 +41,11 @@ local function Retrieve(inventoryId) career_vehicleSaveSystem.CheckSavedAsync(function() extensions.core_jobsystem.create( function(job) + career_vehicleSaveSystem.SetFade(true) + job.sleep(1) spawnVehicle(inventoryId, function() - 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) - 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) + career_vehicleSaveSystem.TeleportVehicle(inventoryId, false) + career_vehicleSaveSystem.LoadVehicle(inventoryId, currentVehicleValue < vehicleValue) end) end ) diff --git a/lua/ge/extensions/career/vehicleSaveSystem.lua b/lua/ge/extensions/career/vehicleSaveSystem.lua index 08600a2..1efacb5 100644 --- a/lua/ge/extensions/career/vehicleSaveSystem.lua +++ b/lua/ge/extensions/career/vehicleSaveSystem.lua @@ -15,7 +15,8 @@ local M = {} -M.dependencies = { 'career_career', 'career_saveSystem', 'career_modules_inventory' } +M.dependencies = { 'freeroam_facilities', 'ui_fadeScreen', 'career_career', 'career_saveSystem', + 'career_modules_inventory' } local extensionName = "career_vehicleSaveSystem" local vehicleSaves_temp = "/temp/career/vehicle_saves" @@ -75,6 +76,42 @@ local function DequeueVehicleToSave(inventoryId) M.queuedVehicleSaves[inventoryId] = nil 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 + local function VehiclesSaved() if next(M.queuedVehicleSaves) == nil then log('I', 'saving', 'all vehicles saved') @@ -117,17 +154,43 @@ local function SaveVehicle(inventoryId) end end -local function LoadVehicle(inventoryId) +local function FinishedLoading(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 vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId) if vehicleId then log("I", "loading", "loading vehicle from " .. saveFile) - local object = be:getObjectByID(vehicleId) - object:queueLuaCommand("beamstate.load(\"" .. - saveFile .. "\");" .. - "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 loadDamaged then + local object = be:getObjectByID(vehicleId) + object:queueLuaCommand( + "beamstate.load(\"" .. saveFile .. "\"); " .. + "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; " .. + " obj:queueGameEngineLua(' " .. + " career_vehicleSaveSystem.TeleportVehicle( " .. + " " .. inventoryId .. ", " .. + " true, " .. + " function() " .. + " career_vehicleSaveSystem.FinishedLoading(" .. inventoryId .. ")" .. + " end) " .. + " ');" + ) + else + FinishedLoading(inventoryId) + end end end @@ -167,6 +230,11 @@ M.queuedVehicleSaves = {} M.SaveVehicle = SaveVehicle M.LoadVehicle = LoadVehicle +M.FinishedLoading = FinishedLoading + +M.TeleportVehicle = TeleportVehicle + +M.SetFade = SetFade M.CheckSavedAsync = CheckSavedAsync