diff --git a/src/features/editScene/EditorApp.cpp b/src/features/editScene/EditorApp.cpp index fb5e740..b4acf5e 100644 --- a/src/features/editScene/EditorApp.cpp +++ b/src/features/editScene/EditorApp.cpp @@ -449,11 +449,34 @@ void EditorApp::setup() std::make_unique( m_world, m_sceneMgr, this); - // Pre-load fonts before showing overlay - if (m_startupMenuSystem) - m_startupMenuSystem->prepareFont(); - if (m_dialogueSystem) - m_dialogueSystem->prepareFont(); + if (m_gameMode == GameMode::Game) { + // Load startup menu scene configured in editor. + // This must happen before show() so the + // StartupMenuComponent entity exists for font preparation. + SceneSerializer serializer(m_world, m_sceneMgr); + Ogre::LogManager::getSingleton().logMessage( + "Game mode: Loading startup_menu.json..."); + if (serializer.loadFromFile("startup_menu.json", + m_uiSystem.get())) { + PrefabSystem prefabSys(m_world, m_sceneMgr); + prefabSys.resolveInstances(); + Ogre::LogManager::getSingleton().logMessage( + "Game mode: startup_menu.json loaded"); + } else { + Ogre::LogManager::getSingleton().logMessage( + "Game mode: Failed to load startup_menu.json: " + + serializer.getLastError()); + } + + // Pre-load fonts before showing overlay so the font is + // added to the atlas before OGRE builds it in createFontTexture(). + // The StartupMenuComponent entity is now available from the + // startup_menu.json scene loaded above. + if (m_startupMenuSystem) + m_startupMenuSystem->prepareFont(); + if (m_dialogueSystem) + m_dialogueSystem->prepareFont(); + } // Now show the overlay — font atlas will be built with our font if (m_imguiOverlay) @@ -511,24 +534,10 @@ void EditorApp::setup() } if (m_gameMode == GameMode::Game) { - // Queue "game_start" event before loading the startup menu + // Queue "game_start" event after Lua scripts are loaded + // so Lua subscribers registered via ecs.subscribe_event() + // will receive the event. EventBus::getInstance().send("game_start"); - - // Load startup menu scene configured in editor - SceneSerializer serializer(m_world, m_sceneMgr); - Ogre::LogManager::getSingleton().logMessage( - "Game mode: Loading startup_menu.json..."); - if (serializer.loadFromFile("startup_menu.json", - m_uiSystem.get())) { - PrefabSystem prefabSys(m_world, m_sceneMgr); - prefabSys.resolveInstances(); - Ogre::LogManager::getSingleton().logMessage( - "Game mode: startup_menu.json loaded"); - } else { - Ogre::LogManager::getSingleton().logMessage( - "Game mode: Failed to load startup_menu.json: " + - serializer.getLastError()); - } } // Game mode can be set externally before setup() is called