plugin reload callbacks

This commit is contained in:
Mikulas Florek 2022-10-14 16:35:42 +02:00
parent a52bd1b9c3
commit 3c72cba490
2 changed files with 4 additions and 7 deletions

View file

@ -2373,15 +2373,12 @@ struct StudioAppImpl final : StudioApp
PluginManager& plugin_manager = m_engine->getPluginManager();
Universe* universe = m_editor->getUniverse();
i32 scene_version;
auto& scenes = universe->getScenes();
for (i32 i = 0, c = scenes.size(); i < c; ++i) {
UniquePtr<IScene>& scene = scenes[i];
if (&scene->getPlugin() != m_watched_plugin.plugin) continue;
if (m_editor->isGameMode()) scene->stopGame();
scene->serialize(blob);
scene_version = scene->getVersion();
scene->beforeReload(blob);
scene->clear();
scenes.erase(i);
@ -2401,9 +2398,7 @@ struct StudioAppImpl final : StudioApp
m_watched_plugin.plugin->createScenes(*universe);
for (const UniquePtr<IScene>& scene : universe->getScenes()) {
if (&scene->getPlugin() != m_watched_plugin.plugin) continue;
EntityMap map(m_allocator);
scene->deserialize(input_blob, map, scene_version);
if (m_editor->isGameMode()) scene->startGame();
scene->afterReload(input_blob);
}
logInfo("Finished reloading plugin.");
}

View file

@ -37,6 +37,8 @@ struct LUMIX_ENGINE_API IScene
virtual void init() {}
virtual void serialize(struct OutputMemoryStream& serializer) = 0;
virtual void deserialize(struct InputMemoryStream& serialize, const struct EntityMap& entity_map, i32 version) = 0;
virtual void beforeReload(OutputMemoryStream& serializer) {}
virtual void afterReload(InputMemoryStream& serializer) {}
virtual IPlugin& getPlugin() const = 0;
virtual void update(float time_delta, bool paused) = 0;
virtual void lateUpdate(float time_delta, bool paused) {}