Fix on_scene_exit called multiple times

This commit is contained in:
Nikita Lisitsa 2022-09-20 15:44:41 +03:00
parent 7a57c1c1d8
commit 968d79df7b

View file

@ -25,6 +25,7 @@ namespace psemek::app
bool running = false; bool running = false;
bool had_initial_resize = false; bool had_initial_resize = false;
bool had_scene_exit = false;
clock::time_point start_time; clock::time_point start_time;
@ -246,14 +247,23 @@ namespace psemek::app
SDL_GL_SwapWindow(impl().window); SDL_GL_SwapWindow(impl().window);
} }
impl().get_scene()->on_scene_exit(); if (!impl().had_scene_exit)
{
impl().had_scene_exit = true;
impl().get_scene()->on_scene_exit();
}
} }
void app::push_scene(std::shared_ptr<scene> s) void app::push_scene(std::shared_ptr<scene> s)
{ {
impl().get_scene()->on_scene_exit(); if (!impl().had_scene_exit)
{
impl().had_scene_exit = true;
impl().get_scene()->on_scene_exit();
}
impl().had_initial_resize = false; impl().had_initial_resize = false;
impl().had_scene_exit = false;
impl().scene_stack.push_back(std::move(s)); impl().scene_stack.push_back(std::move(s));
impl().get_scene()->on_scene_enter(this); impl().get_scene()->on_scene_enter(this);
@ -264,7 +274,11 @@ namespace psemek::app
if (impl().scene_stack.empty()) if (impl().scene_stack.empty())
return nullptr; return nullptr;
impl().get_scene()->on_scene_exit(); if (!impl().had_scene_exit)
{
impl().had_scene_exit = true;
impl().get_scene()->on_scene_exit();
}
impl().had_initial_resize = false; impl().had_initial_resize = false;
auto s = std::move(impl().scene_stack.back()); auto s = std::move(impl().scene_stack.back());