Merge branch 'dev' into performance-enhanced

This commit is contained in:
bryanthaboi
2026-08-04 15:21:23 -04:00
183 changed files with 59735 additions and 114 deletions
+3
View File
@@ -28,6 +28,7 @@
-- ordinary love.filesystem/save-directory behaviour.
local CacheFs = {}
local Platform = require("src.core.Platform")
local SEP = package.config:sub(1, 1)
@@ -52,6 +53,7 @@ local mkdirFn = nil
local function resolveMkdir()
if mkdirFn ~= nil then return mkdirFn end
mkdirFn = false
if Platform.isUWP() then return mkdirFn end
local ok, ffi = pcall(require, "ffi")
if not ok then return mkdirFn end
if ffi.os == "Windows" then
@@ -83,6 +85,7 @@ local rmdirFn = nil
local function resolveRmdir()
if rmdirFn ~= nil then return rmdirFn end
rmdirFn = false
if Platform.isUWP() then return rmdirFn end
local ok, ffi = pcall(require, "ffi")
if not ok then return rmdirFn end
if ffi.os == "Windows" then
+32 -23
View File
@@ -1034,6 +1034,7 @@ function RomImporter.new(onComplete, opts)
mobileFileBridge = mobileFileBridge,
android = android,
ios = mobileOS == "iOS",
nativePicker = romImportMode == "native-picker",
-- One startup poll pass on both mobiles. iOS: files dropped through the
-- Files app are swept into the save dir before Lua boots (GRBootstrap) with
-- no love.focus event necessarily following. Android: the SAF picker is a
@@ -1099,8 +1100,8 @@ function RomImporter.new(onComplete, opts)
-- Android SAF create-document: which game's SAVE FILES card should show
-- "Save exported." when export_done.flag appears on focus.
androidPendingExportVersion = nil,
iosPendingKind = nil,
iosPendingVersion = nil,
pickerPendingKind = nil,
pickerPendingVersion = nil,
-- Virtual pointer for handhelds / gamepads (Anbernic stock OS has no
-- mouse). D-pad + left stick move it; A clicks; shoulders cycle tabs;
-- right stick scrolls the save-slot / mods lists.
@@ -1519,10 +1520,10 @@ function RomImporter:chooseMod()
self:rescanModsAction()
return
end
if self.ios and love.system.getPickedFile then
self.iosPendingKind = "mod"
if self.nativePicker and love.system.getPickedFile then
self.pickerPendingKind = "mod"
if not pickFile("mod") then
self.iosPendingKind = nil
self.pickerPendingKind = nil
self.modNotice = { ok = false, text = "Could not open the file picker." }
end
return
@@ -1595,12 +1596,12 @@ function RomImporter:chooseSaveImport(version)
self:rescanSavesAction(version)
return
end
if self.ios and love.system.getPickedFile then
self.iosPendingKind = "sav"
self.iosPendingVersion = version
if self.nativePicker and love.system.getPickedFile then
self.pickerPendingKind = "sav"
self.pickerPendingVersion = version
if not pickFile("sav") then
self.iosPendingKind = nil
self.iosPendingVersion = nil
self.pickerPendingKind = nil
self.pickerPendingVersion = nil
self.saveNotice[version] = { ok = false, text = "Could not open the file picker." }
end
return
@@ -1713,10 +1714,10 @@ function RomImporter:choose(version)
self:rescanAction(self.chooseVersion)
return
end
if self.ios and love.system.getPickedFile then
self.iosPendingKind = "rom"
if self.nativePicker and love.system.getPickedFile then
self.pickerPendingKind = "rom"
if not pickFile("rom") then
self.iosPendingKind = nil
self.pickerPendingKind = nil
self:setError("Could not open the file picker.")
end
return
@@ -1926,27 +1927,35 @@ function RomImporter:update(dt)
end)
end
end
if self.ios and love.system.getPickedFile and self.workState ~= "working" then
if self.nativePicker and love.system.getPickedFile and self.workState ~= "working" then
local path = love.system.getPickedFile()
if path then
local kind = self.iosPendingKind or "rom"
local version = self.iosPendingVersion
self.iosPendingKind = nil
self.iosPendingVersion = nil
local kind = self.pickerPendingKind or "rom"
local version = self.pickerPendingVersion
self.pickerPendingKind = nil
self.pickerPendingVersion = nil
if kind == "mod" then
self:_installMod(path)
if Platform.isUWP() and self.modNotice and self.modNotice.ok then
os.remove(path)
end
elseif kind == "sav" then
self:_importSave(version or self:_savedropTarget(), path)
local target = version or self:_savedropTarget()
self:_importSave(target, path)
if Platform.isUWP() and self.saveNotice[target] and self.saveNotice[target].ok then
os.remove(path)
end
else
self:startPath(path)
if Platform.isUWP() then os.remove(path) end
end
elseif love.system.getPickError then
local errorText = love.system.getPickError()
if errorText then
local kind = self.iosPendingKind or "rom"
local version = self.iosPendingVersion or self:_savedropTarget()
self.iosPendingKind = nil
self.iosPendingVersion = nil
local kind = self.pickerPendingKind or "rom"
local version = self.pickerPendingVersion or self:_savedropTarget()
self.pickerPendingKind = nil
self.pickerPendingVersion = nil
if kind == "mod" then
self.modNotice = { ok = false, text = errorText }
elseif kind == "sav" then