From d5541ac91f06a267e4b0033e140058572d5eea38 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sat, 1 Dec 2018 18:26:35 +0100 Subject: [PATCH] Convert Menu instances to std::optional --- rwgame/MenuSystem.hpp | 11 ++++++----- rwgame/State.hpp | 19 ++++++++++++------- rwgame/states/DebugState.cpp | 14 +++++++------- rwgame/states/DebugState.hpp | 14 +++++++------- tests/test_State.cpp | 1 - 5 files changed, 32 insertions(+), 27 deletions(-) diff --git a/rwgame/MenuSystem.hpp b/rwgame/MenuSystem.hpp index a11e9be2..cb9330a6 100644 --- a/rwgame/MenuSystem.hpp +++ b/rwgame/MenuSystem.hpp @@ -1,8 +1,10 @@ #ifndef _GAME_MENUSYSTEM_HPP_ #define _GAME_MENUSYSTEM_HPP_ + #include #include #include +#include #include #include @@ -76,12 +78,11 @@ public: /** * @brief creates a menu from the given menu items - * @return a shared pointer to the menu with the items + * @return optional of menu with the items */ - static std::shared_ptr create(std::vector items, - int font = MenuDefaults::kFont, - float size = 30.f) { - return std::make_shared(std::move(items), font, size); + static std::optional create(std::vector items, + int font = MenuDefaults::kFont, float size = 30.f) { + return std::make_optional(std::move(items), font, size); } Menu& lambda(const GameString& n, std::function callback) { diff --git a/rwgame/State.hpp b/rwgame/State.hpp index 2d7bbf79..45d4a9f5 100644 --- a/rwgame/State.hpp +++ b/rwgame/State.hpp @@ -1,8 +1,12 @@ #ifndef RWGAME_STATE_HPP #define RWGAME_STATE_HPP + +#include + #include #include "GameWindow.hpp" #include "MenuSystem.hpp" + #include #include @@ -12,8 +16,8 @@ class StateManager; class State { public: - std::shared_ptr menu; - std::shared_ptr nextMenu; + std::optional menu; + std::optional nextMenu; RWGame* game; @@ -33,16 +37,17 @@ public: virtual ~State() = default; - void enterMenu(const std::shared_ptr& menu) { - nextMenu = menu; + template + void enterMenu(T&& menu) { + nextMenu = std::forward(menu); } Menu* getCurrentMenu() { if (nextMenu) { - menu = nextMenu; - nextMenu = nullptr; + menu = std::move(nextMenu); + nextMenu = std::nullopt; } - return menu.get(); + return &*menu; } virtual void handleEvent(const SDL_Event& e); diff --git a/rwgame/states/DebugState.cpp b/rwgame/states/DebugState.cpp index a1a26bc9..2e49b832 100644 --- a/rwgame/states/DebugState.cpp +++ b/rwgame/states/DebugState.cpp @@ -33,7 +33,7 @@ static void jumpCharacter(RWGame* game, CharacterObject* player, } } -std::shared_ptr DebugState::createDebugMenu() { +std::optional DebugState::createDebugMenu() { CharacterObject* player = nullptr; if (game->getWorld()->getPlayer()) { player = game->getWorld()->getPlayer()->getCharacter(); @@ -76,7 +76,7 @@ std::shared_ptr DebugState::createDebugMenu() { return menu; } -std::shared_ptr DebugState::createMapMenu() { +std::optional DebugState::createMapMenu() { CharacterObject* player = nullptr; if (game->getWorld()->getPlayer()) { player = game->getWorld()->getPlayer()->getCharacter(); @@ -144,7 +144,7 @@ std::shared_ptr DebugState::createMapMenu() { return menu; } -std::shared_ptr DebugState::createVehicleMenu() { +std::optional DebugState::createVehicleMenu() { auto menu = Menu::create({{"Back", [=] { enterMenu(createDebugMenu()); }}}, kDebugFont, kDebugEntryHeight); @@ -177,7 +177,7 @@ std::shared_ptr DebugState::createVehicleMenu() { return menu; } -std::shared_ptr DebugState::createAIMenu() { +std::optional DebugState::createAIMenu() { auto menu = Menu::create({{"Back", [=] { this->enterMenu(createDebugMenu()); }}}, kDebugFont, kDebugEntryHeight); @@ -212,7 +212,7 @@ std::shared_ptr DebugState::createAIMenu() { return menu; } -std::shared_ptr DebugState::createWeaponMenu() { +std::optional DebugState::createWeaponMenu() { auto menu = Menu::create({{"Back", [=] { this->enterMenu(createDebugMenu()); }}}, kDebugFont, kDebugEntryHeight); @@ -226,7 +226,7 @@ std::shared_ptr DebugState::createWeaponMenu() { return menu; } -std::shared_ptr DebugState::createWeatherMenu() { +std::optional DebugState::createWeatherMenu() { auto menu = Menu::create({{"Back", [=] { this->enterMenu(createDebugMenu()); }}}, kDebugFont, kDebugEntryHeight); @@ -242,7 +242,7 @@ std::shared_ptr DebugState::createWeatherMenu() { return menu; } -std::shared_ptr DebugState::createMissionsMenu() { +std::optional DebugState::createMissionsMenu() { auto menu = Menu::create({{"Back", [=] { this->enterMenu(createDebugMenu()); }}}, kDebugFont, kDebugEntryHeightMissions); diff --git a/rwgame/states/DebugState.hpp b/rwgame/states/DebugState.hpp index 762d45fa..87b7d1a4 100644 --- a/rwgame/states/DebugState.hpp +++ b/rwgame/states/DebugState.hpp @@ -11,13 +11,13 @@ class DebugState final : public State { bool _sonicMode = false; bool _invertedY; - std::shared_ptr createDebugMenu(); - std::shared_ptr createMapMenu(); - std::shared_ptr createVehicleMenu(); - std::shared_ptr createAIMenu(); - std::shared_ptr createWeaponMenu(); - std::shared_ptr createWeatherMenu(); - std::shared_ptr createMissionsMenu(); + std::optional createDebugMenu(); + std::optional createMapMenu(); + std::optional createVehicleMenu(); + std::optional createAIMenu(); + std::optional createWeaponMenu(); + std::optional createWeatherMenu(); + std::optional createMissionsMenu(); public: DebugState(RWGame* game, const glm::vec3& vp = {}, diff --git a/tests/test_State.cpp b/tests/test_State.cpp index 40402a83..34a66edf 100644 --- a/tests/test_State.cpp +++ b/tests/test_State.cpp @@ -1,4 +1,3 @@ -#include #include BOOST_AUTO_TEST_SUITE(StateUnitTests)