mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-23 05:58:26 +02:00
16eefcde68
- Introduced `teardownMountedSession` to handle cleanup of mounted versions, generated data, and mod states during transitions between the editor and launcher. - Added `flushEditorPackageLoaded` to evict save-editor modules from `package.loaded` dynamically, ensuring a clean state for subsequent sessions. - Implemented `Game:reset` and `Game2:reset` methods to clear session-specific fields, allowing for a fresh start when returning to the launcher. - Enhanced `Renderer` and `TileRenderer` to release GPU resources immediately, preventing memory leaks during rapid transitions. - Updated `MagnetTrainRide` to support OAM priority overlays and manage background rendering with new shader functionality. This commit improves the stability and performance of the application during in-process transitions, particularly on Android. fixes Yellow color palette for title screen fixes #1662 #1643 #1536 and finishes fixing #1597
103 lines
3.3 KiB
Lua
103 lines
3.3 KiB
Lua
-- Test returning to launcher from Gen 1 and Gen 2 on Android without closing the process
|
|
-- luajit tests/engine/android_exit_to_launcher_test.lua
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.harness")
|
|
local check, eq = T.check, T.eq
|
|
love = love or require("tests.love_stub")
|
|
|
|
local TitleState = require("src.ui.TitleState")
|
|
local Gen2MainMenu = require("src.ui.gen2.MainMenu")
|
|
local Runtime = require("src.mods.Runtime")
|
|
|
|
-- 1. Test Gen 1 TitleState onExit callback support
|
|
do
|
|
local exitCalled = false
|
|
local dummyGame = {
|
|
data = { field = {} },
|
|
stack = {
|
|
states = {},
|
|
push = function(self, state) table.insert(self.states, state) end,
|
|
top = function(self) return self.states[#self.states] end,
|
|
pop = function(self) return table.remove(self.states) end,
|
|
},
|
|
}
|
|
local state = TitleState.new(dummyGame, {
|
|
onExit = function()
|
|
exitCalled = true
|
|
end,
|
|
})
|
|
state:openMenu()
|
|
local menu = dummyGame.stack:top()
|
|
check(menu ~= nil, "TitleState:openMenu opens a menu")
|
|
local exitItem = nil
|
|
for _, item in ipairs(menu.items or {}) do
|
|
if tostring(item.label):find("EXIT", 1, true) then
|
|
exitItem = item
|
|
break
|
|
end
|
|
end
|
|
check(exitItem ~= nil, "Gen 1 TitleState menu contains an EXIT GAME item")
|
|
if exitItem and exitItem.onSelect then
|
|
exitItem.onSelect()
|
|
end
|
|
check(exitCalled, "Selecting EXIT GAME in Gen 1 TitleState invokes onExit callback")
|
|
end
|
|
|
|
-- 2. Test Gen 2 MainMenu onExit callback support
|
|
do
|
|
local exitCalled = false
|
|
local dummyGame2 = {
|
|
data = {},
|
|
stack = {
|
|
states = {},
|
|
push = function(self, state) table.insert(self.states, state) end,
|
|
top = function(self) return self.states[#self.states] end,
|
|
pop = function(self) return table.remove(self.states) end,
|
|
},
|
|
}
|
|
local menu = Gen2MainMenu.new(dummyGame2, {
|
|
hasSave = false,
|
|
onExit = function()
|
|
exitCalled = true
|
|
end,
|
|
})
|
|
menu:choose("exit")
|
|
check(exitCalled, "Selecting EXIT GAME in Gen 2 MainMenu invokes onExit callback")
|
|
end
|
|
|
|
-- 3. Test Runtime.reset restores NullEvents and NullHooks
|
|
do
|
|
Runtime.install({ emit = function() end }, { call = function() end }, { "err" })
|
|
check(Runtime.errors ~= nil, "Runtime has errors list after install")
|
|
Runtime.reset()
|
|
check(Runtime.errors == nil, "Runtime.reset clears errors")
|
|
check(Runtime.currentMod == nil, "Runtime.reset clears currentMod")
|
|
check(Runtime.modRequire == nil, "Runtime.reset clears modRequire")
|
|
end
|
|
|
|
-- 4. returnToLauncher / closeEditor also clear Assets.loader (orphaned Loader)
|
|
do
|
|
local Assets = require("src.render.Assets")
|
|
Assets.installLoader({
|
|
overrideOrder = function() return { { id = "x", path = "mods/x" } } end,
|
|
derivedPath = function() return nil end,
|
|
})
|
|
check(Assets.loader ~= nil, "Assets.loader installed for the session")
|
|
Assets.installLoader(nil)
|
|
check(Assets.loader == nil, "session teardown clears Assets.loader")
|
|
end
|
|
|
|
-- 5. Gen1 Game:reset exists so main.lua need not guess field names
|
|
do
|
|
local Game = require("src.core.Game")
|
|
check(type(Game.reset) == "function", "Game:reset is defined for in-process return")
|
|
Game.mods = { stale = true }
|
|
Game:reset()
|
|
check(Game.mods == nil, "Game:reset clears session fields")
|
|
check(type(Game.load) == "function", "Game:reset keeps methods")
|
|
end
|
|
|
|
T.finish("android_exit_to_launcher_test")
|