|
RapidGameFramework
Reusable Godot managers for data-driven small games
|
f
Last updated: 2026-08-20
This handoff summarizes the current reusable-framework state after the latest optimization/refactor pass. Use it with Release Sprint Plan so the next session does not need to rediscover what has already been stabilized.
dataCacheManager is now the standard runtime JSON cache for stable catalogs. It tracks entries, hits, and misses through get_cache_stats() so managers can be measured by performanceMonitor.
The following convenience loaders now route through dataCacheManager:
gameSettingsPanel.load_definition(...)aiController.load_profiles(...)arcadePowerupManager.load_definitions(...)cardManager.load_cards(...)packManager.load_packs(...)combatCardFactory.load_catalog(...)combatCardFactory.load_definitions(...)alchemyManager.load_definitions(...)alchemyManager.load_reactions(...)gridCombatManager.load_archetypes(...)adventureManager.load_adventure(...)menuManager.load_menu(...)inputManager.load_actions(...)levelManager.load_level(...)paletteManager.load_palettes(...)tutorialManager.load_steps(...)unlockManager.load_rules(...)eventManager.load_events(...)resourceManager.load(...)actionEffectManager.load_actions(...)alchemyGraphManager.load_graph(...)buildProfileManager.load_profile(...)statsManager.load_achievements(...)buildInfo.load_info(...)performanceMonitor.load_baseline_profiles(...)audioManager music manifest loadsScenes can still provide already-loaded dictionaries to manager data APIs when a scene-level cache is preferred.
Direct runtime image/icon loads have been pushed back into spriteManager.
Current shared visual paths include:
spriteManager.get_texture_for_path(...).spriteManager.get_texture_for_path(...).layoutManager's shared spriteManager.spriteManager scaled texture lookups.spriteManager scaled texture cache.hud_and_pool profile.A quick audit currently shows the remaining direct texture loads are inside spriteManager, which is the intended owner.
saveManager.queue_save_state(...) for normal match updates and flushes on match/menu boundaries._process() advances pending saves, _exit_tree() flushes pending state, and headless smoke verifies that generated field starts queue rather than write immediately.achievementScreen renderer.cardInventoryAdapter plus inventoryList._ready(). Reflecting Pool, Card Game, Arcade Pong, and Project Alchemy have smoke coverage for this on-demand path.gridViewportManager.levelManager visible tile-record and semantic rect caches.levelManager object/world-rect culling helpers so larger scrolling levels avoid drawing off-camera objects.runManager active/terminal state for level start, coin counters, completion, failure, and result summaries.arcadePhysicsManager.step_projectiles(...); the scene keeps only stun, SFX, stats, and save responses.arcadePhysicsManager.step_ball_group(...) and collect_ball_group_scoring(...).resultsScreenController.show_popup(...) now bundles result popup creation, viewport fitting, theme/text application, and focus for future level, battle, match, and run result screens.Targeted cleanup hooks are now available in key reusable helpers:
pauseOverlayController.dispose()standard_settings_popup.dispose()audioManager.dispose()achievementNotifier.dispose()achievementNotifier.dispose() cancels queued achievement toasts, releases any visible toast node, and is now called by the Reflecting Pool and Card Game scenes during exit. Headless smoke covers this cancellation path so future toast UI changes do not reintroduce scene-lifetime leaks.
Current game scenes also call the reusable cleanup hooks they own on exit: Arcade Pong, Reflecting Pool, Card Game, and Project Alchemy now dispose standard settings/pause helpers where applicable before the scene is released.
Do not add broad root-wide cleanup to headless smoke. A previous attempt was rejected because deferred scene callbacks can fire against already-freed nodes. Prefer targeted disposal and deferred-signal cleanup inside the affected helper or scene.
Last local validation completed successfully:
git diff --checkscripts/ci/build_profiles.py --validate-only --profiles all --platforms allres://tests/headless_smoke.gdKnown local noise:
The broad engine optimization rework is wrapped for this release cycle. Avoid broad refactors that touch many games at once. The successful pattern has been: migrate one reusable seam, add focused smoke coverage, update docs, then run validation.
scripts/systems/README.mdtests/headless_smoke.gdscripts/ci/build_profiles.py