From 42a05a41f066f1a21c02f28f4def966f81d23d98 Mon Sep 17 00:00:00 2001 From: Steffen Ohrendorf Date: Tue, 2 Mar 2021 19:35:11 +0100 Subject: [PATCH] close EE-185 --- src/CMakeLists.txt | 1 + src/menu/closepassportmenustate.cpp | 9 ++++++--- src/menu/closepassportmenustate.h | 7 ++++++- src/menu/passportmenustate.cpp | 7 ++----- src/menu/requestloadmenustate.cpp | 21 +++++++++++++++++++++ src/menu/requestloadmenustate.h | 24 ++++++++++++++++++++++++ src/menu/savegamelistmenustate.cpp | 14 +++++++++----- 7 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 src/menu/requestloadmenustate.cpp create mode 100644 src/menu/requestloadmenustate.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 642672e19..cf62d0f10 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -452,6 +452,7 @@ set( EDISONENGINE_SRCS menu/listdisplaymenustate.cpp menu/passportmenustate.cpp menu/rendersettingsmenustate.cpp + menu/requestloadmenustate.cpp menu/resetitemtransformmenustate.cpp menu/rotateleftrightmenustate.cpp menu/savegamelistmenustate.cpp diff --git a/src/menu/closepassportmenustate.cpp b/src/menu/closepassportmenustate.cpp index 5915de08b..288e7b69e 100644 --- a/src/menu/closepassportmenustate.cpp +++ b/src/menu/closepassportmenustate.cpp @@ -1,8 +1,9 @@ #include "closepassportmenustate.h" +#include "deflateringmenustate.h" #include "engine/items_tr1.h" #include "finishitemanimationmenustate.h" -#include "idleringmenustate.h" +#include "menudisplay.h" #include "menuobject.h" #include "passportmenustate.h" #include "resetitemtransformmenustate.h" @@ -11,8 +12,10 @@ namespace menu { ClosePassportMenuState::ClosePassportMenuState(const std::shared_ptr& ringTransform, - MenuObject& passport) + MenuObject& passport, + std::unique_ptr&& next) : MenuState{ringTransform} + , m_next{std::move(next)} { Expects(passport.type == engine::TR1ItemId::PassportOpening); @@ -34,7 +37,7 @@ std::unique_ptr ClosePassportMenuState::onFrame(ui::Ui& /*ui*/, engine::World& /*world*/, MenuDisplay& /*display*/) { return create(create( - engine::TR1ItemId::PassportClosed, create(create(false)))); + engine::TR1ItemId::PassportClosed, create(std::move(m_next)))); } void ClosePassportMenuState::handleObject(ui::Ui& /*ui*/, diff --git a/src/menu/closepassportmenustate.h b/src/menu/closepassportmenustate.h index 6afb28a93..a1c1eecee 100644 --- a/src/menu/closepassportmenustate.h +++ b/src/menu/closepassportmenustate.h @@ -6,8 +6,13 @@ namespace menu { class ClosePassportMenuState : public MenuState { +private: + std::unique_ptr m_next; + public: - explicit ClosePassportMenuState(const std::shared_ptr& ringTransform, MenuObject& passport); + explicit ClosePassportMenuState(const std::shared_ptr& ringTransform, + MenuObject& passport, + std::unique_ptr&& next); void handleObject(ui::Ui& ui, engine::World& world, MenuDisplay& display, MenuObject& object) override; std::unique_ptr onFrame(ui::Ui& ui, engine::World& world, MenuDisplay& display) override; diff --git a/src/menu/passportmenustate.cpp b/src/menu/passportmenustate.cpp index 5d11b76a5..5c495e69a 100644 --- a/src/menu/passportmenustate.cpp +++ b/src/menu/passportmenustate.cpp @@ -7,13 +7,10 @@ #include "engine/i18nprovider.h" #include "engine/presenter.h" #include "engine/world.h" -#include "finishitemanimationmenustate.h" #include "idleringmenustate.h" #include "menudisplay.h" #include "menuring.h" -#include "resetitemtransformmenustate.h" #include "savegamelistmenustate.h" -#include "setitemtypemenustate.h" #include "util.h" namespace menu @@ -207,11 +204,11 @@ std::unique_ptr PassportMenuState::onFrame(ui::Ui& ui, engine::World& if(!m_allowExit && display.mode != InventoryMode::TitleMode) return nullptr; - return create(passport); + return create(passport, create(false)); } else if(world.getPresenter().getInputHandler().hasDebouncedAction(hid::Action::Action)) { - return create(passport); + return create(passport, create(false)); } return nullptr; diff --git a/src/menu/requestloadmenustate.cpp b/src/menu/requestloadmenustate.cpp new file mode 100644 index 000000000..7632e6207 --- /dev/null +++ b/src/menu/requestloadmenustate.cpp @@ -0,0 +1,21 @@ +#include "requestloadmenustate.h" + +#include "menudisplay.h" + +namespace menu +{ +void RequestLoadMenuState::handleObject(ui::Ui& /*ui*/, + engine::World& /*world*/, + MenuDisplay& /*display*/, + MenuObject& /*object*/) +{ +} + +std::unique_ptr RequestLoadMenuState::onFrame(ui::Ui& /*ui*/, engine::World& /*world*/, MenuDisplay& display) +{ + display.requestLoad = m_index; + display.result = MenuResult::RequestLoad; + return nullptr; +} + +} // namespace menu diff --git a/src/menu/requestloadmenustate.h b/src/menu/requestloadmenustate.h new file mode 100644 index 000000000..58e03f87d --- /dev/null +++ b/src/menu/requestloadmenustate.h @@ -0,0 +1,24 @@ +#pragma once + +#include "menustate.h" + +namespace menu +{ +enum class MenuResult; + +class RequestLoadMenuState : public MenuState +{ +public: + explicit RequestLoadMenuState(const std::shared_ptr& ringTransform, size_t index) + : MenuState{ringTransform} + , m_index{index} + { + } + + void handleObject(ui::Ui& ui, engine::World& world, MenuDisplay& display, MenuObject& object) override; + std::unique_ptr onFrame(ui::Ui& ui, engine::World& world, MenuDisplay& display) override; + +private: + const size_t m_index; +}; +} // namespace menu diff --git a/src/menu/savegamelistmenustate.cpp b/src/menu/savegamelistmenustate.cpp index 26075f8e8..c4f15917b 100644 --- a/src/menu/savegamelistmenustate.cpp +++ b/src/menu/savegamelistmenustate.cpp @@ -1,13 +1,15 @@ #include "savegamelistmenustate.h" +#include "closepassportmenustate.h" +#include "deflateringmenustate.h" +#include "donemenustate.h" #include "engine/engine.h" #include "engine/i18nprovider.h" #include "engine/presenter.h" #include "engine/world.h" #include "menudisplay.h" -#include "ui/label.h" - -#include +#include "menuring.h" +#include "requestloadmenustate.h" namespace menu { @@ -45,11 +47,13 @@ std::unique_ptr SavegameListMenuState::onSelected(size_t idx, engine: { // TODO confirm overwrite if necessary world.save(idx); + return create(display.getCurrentRing().getSelectedObject(), + create(create(MenuResult::Closed))); } else if(m_hasSavegame.at(idx)) { - display.requestLoad = idx; - display.result = MenuResult::RequestLoad; + return create(display.getCurrentRing().getSelectedObject(), + create(create(idx))); } return std::move(m_previous); }