plugin reload callbacks
This commit is contained in:
parent
a52bd1b9c3
commit
3c72cba490
2 changed files with 4 additions and 7 deletions
|
@ -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.");
|
||||
}
|
||||
|
|
|
@ -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) {}
|
||||
|
|
Loading…
Reference in a new issue