diff --git a/source/application.cpp b/source/application.cpp index a4544e4..21f0137 100644 --- a/source/application.cpp +++ b/source/application.cpp @@ -674,10 +674,23 @@ namespace gmtk { if (event.down && event.button == app::mouse_button::left) { - if (selected_ && !view_transition_) - { - bool transitioned = false; + bool destroyed_item = false; + bool transitioned = false; + if (selected_item_) + { + auto const & i = map_.world.get(*selected_item_).get(); + if (i.target) + map_.world.detach(i.target); + else + map_.world.detach(map_.world.index().get(i.start)); + map_.world.destroy(*selected_item_); + selected_item_ = std::nullopt; + destroyed_item = true; + } + + if (!destroyed_item && selected_ && !view_transition_) + { if (auto entity = map_.world.index().find(*selected_)) if (map_.world.get(*entity).contains()) { @@ -696,40 +709,13 @@ namespace gmtk } } - if (selected_item_) - { - auto const & i = map_.world.get(*selected_item_).get(); - if (i.target) - map_.world.detach(i.target); - else - map_.world.detach(map_.world.index().get(i.start)); - map_.world.destroy(*selected_item_); - selected_item_ = std::nullopt; - } - } - - if (event.down && event.button == app::mouse_button::right) - { - if (!view_transition_ && view_stack_.size() > 1) - { - view_transition_ = {view_stack_.back()}; - view_stack_.pop_back(); - selected_ = std::nullopt; - } - } - } - - void on_event(app::key_event const & event) override - { - if (event.down && event.key == app::keycode::B) - { - if (selected_ && !belt_start_) + if (!destroyed_item && !transitioned && selected_ && !belt_start_) { belt_start_ = *selected_; } } - if (!event.down && event.key == app::keycode::B) + if (!event.down && event.button == app::mouse_button::left) { if (selected_ && belt_start_ && selected_->level == belt_start_->level) { @@ -768,6 +754,19 @@ namespace gmtk belt_start_ = std::nullopt; } + if (event.down && event.button == app::mouse_button::right) + { + if (!view_transition_ && view_stack_.size() > 1) + { + view_transition_ = {view_stack_.back()}; + view_stack_.pop_back(); + selected_ = std::nullopt; + } + } + } + + void on_event(app::key_event const & event) override + { if (event.down && event.key == app::keycode::F) { if (selected_ && !map_.world.index().find(*selected_))