From 1ae32d48ebf409f0ee75f777624b5d96fc3cdfac Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 25 Dec 2022 20:56:22 +0100 Subject: Added CLI option to select the starting scene Usage: kurator -s {Battle,ScenarioEditor}; anything else make it start with Title scene --- kurator/CMakeLists.txt | 2 ++ kurator/src/SceneBuilder.cpp | 34 ++++++++++++++++++++++++++++++++++ kurator/src/SceneBuilder.h | 24 ++++++++++++++++++++++++ kurator/src/args.cpp | 30 ++++++++++++++++++++++++++++++ kurator/src/args.h | 19 +++++++++++++++++++ kurator/src/main.cpp | 8 +++++--- 6 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 kurator/src/SceneBuilder.cpp create mode 100644 kurator/src/SceneBuilder.h create mode 100644 kurator/src/args.cpp create mode 100644 kurator/src/args.h diff --git a/kurator/CMakeLists.txt b/kurator/CMakeLists.txt index 65f55eb..44b6be9 100644 --- a/kurator/CMakeLists.txt +++ b/kurator/CMakeLists.txt @@ -1,12 +1,14 @@ project(kurator) add_executable( ${PROJECT_NAME} + src/args.cpp src/Battle.cpp src/colors.cpp src/ForceBalance.cpp src/Log.cpp src/main.cpp src/ScenarioEditor.cpp + src/SceneBuilder.cpp src/Session.cpp src/Skybox.cpp src/Title.cpp diff --git a/kurator/src/SceneBuilder.cpp b/kurator/src/SceneBuilder.cpp new file mode 100644 index 0000000..4fee62e --- /dev/null +++ b/kurator/src/SceneBuilder.cpp @@ -0,0 +1,34 @@ +#include "SceneBuilder.h" + +#include +#include +#include + +#include "Battle.h" +#include "ScenarioEditor.h" +#include "Scene.h" +#include "Title.h" + + +namespace kurator +{ + + +SceneBuilder::SceneBuilder(std::shared_ptr _session) : + session {std::move(_session)} +{ +} + + +std::shared_ptr +SceneBuilder::build(std::string_view name) const +{ + if (name == "Battle") + return std::make_shared(session); + if (name == "ScenarioEditor") + return std::make_shared(session); + return std::make_shared(session); +} + + +} // namespace kurator diff --git a/kurator/src/SceneBuilder.h b/kurator/src/SceneBuilder.h new file mode 100644 index 0000000..a567593 --- /dev/null +++ b/kurator/src/SceneBuilder.h @@ -0,0 +1,24 @@ +#pragma once + +#include <memory> +#include <string_view> + +#include "Scene.h" +#include "Session.h" + + +namespace kurator +{ + + +class SceneBuilder +{ +public: + explicit SceneBuilder(std::shared_ptr<Session> _session); + std::shared_ptr<Scene> build(std::string_view name) const; +private: + std::shared_ptr<Session> session; +}; + + +} // namespace kurator diff --git a/kurator/src/args.cpp b/kurator/src/args.cpp new file mode 100644 index 0000000..cff094e --- /dev/null +++ b/kurator/src/args.cpp @@ -0,0 +1,30 @@ +#include "args.h" + +#include <unistd.h> + +#include <string_view> + + +namespace kurator +{ + + +Args +parse_args(int argc, char* argv[]) +{ + Args args {}; + int opt; + while (-1 != (opt = getopt(argc, argv, "s:"))) { + switch (opt) { + case 's': + args.scene = optarg; + break; + default: + break; // Ignore any problems and proceed with what you can parse properly. + } + } + return args; +} + + +} // namespace kurator diff --git a/kurator/src/args.h b/kurator/src/args.h new file mode 100644 index 0000000..9418550 --- /dev/null +++ b/kurator/src/args.h @@ -0,0 +1,19 @@ +#pragma once + +#include <string_view> + + +namespace kurator +{ + + +struct Args +{ + std::string_view scene; +}; + + +auto parse_args(int argc, char* argv[]) -> Args; + + +} // namespace kurator diff --git a/kurator/src/main.cpp b/kurator/src/main.cpp index 5cda6d0..b9ef6a3 100644 --- a/kurator/src/main.cpp +++ b/kurator/src/main.cpp @@ -1,13 +1,15 @@ #include <memory> +#include "args.h" +#include "SceneBuilder.h" #include "Session.h" -#include "ScenarioEditor.h" int -main(int, char*[]) +main(int argc, char* argv[]) { + const auto args = kurator::parse_args(argc, argv); auto session = std::make_shared<kurator::Session>(); - session->set(std::make_shared<kurator::ScenarioEditor>(session)); + session->set(kurator::SceneBuilder(session).build(args.scene)); session->run(); } -- cgit v1.1