From 30fd97edcbb9b6d2aa76b3a841818edb722a52ab Mon Sep 17 00:00:00 2001 From: Ian Burgmyer Date: Fri, 17 Jul 2020 16:19:19 -0400 Subject: [PATCH] Finished core input support. * Added a stub SDL2 event handler class. * Changed gitignore entry from version.h to PlipVersion.h. * Switched to using unordered_map to track inputs. --- .gitignore | 2 +- CMakeLists.txt | 1 + libplip/PlipInput.cpp | 14 ++++++++++++-- libplip/PlipInput.h | 12 +++++++----- libplip/PlipInputDefinition.cpp | 8 ++++++++ libplip/PlipInputDefinition.h | 9 +++++---- libplip/PlipVersion.h | 9 --------- plip-sdl/SdlEvent.cpp | 9 +++++++++ plip-sdl/SdlEvent.h | 15 +++++++++++++++ plip-sdl/main.cpp | 2 ++ 10 files changed, 60 insertions(+), 21 deletions(-) delete mode 100644 libplip/PlipVersion.h create mode 100644 plip-sdl/SdlEvent.cpp create mode 100644 plip-sdl/SdlEvent.h diff --git a/.gitignore b/.gitignore index 9d3882a..4fef1bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .idea cmake-build-*/ -version.h +libplip/PlipVersion.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 275edb9..edb5301 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ add_dependencies(${lib_name} GENERATE_LIB_VERSION_HEADER) ######## add_executable(${gui_name} plip-sdl/main.cpp + plip-sdl/SdlEvent.cpp plip-sdl/SdlWindow.cpp ) diff --git a/libplip/PlipInput.cpp b/libplip/PlipInput.cpp index ee73fed..d256338 100644 --- a/libplip/PlipInput.cpp +++ b/libplip/PlipInput.cpp @@ -6,15 +6,25 @@ #include "PlipInput.h" namespace Plip { - void PlipInput::AddInput(int id, const PlipInputDefinition& input) { + void PlipInput::AddInput(int id, const PlipInputDefinition &input, const PlipInputData &initialData) { m_coreInput.insert(std::pair(id, input)); + UpdateInput(id, initialData); } - void PlipInput::AddInput(std::map inputList) { + void PlipInput::AddInput(std::unordered_map inputList) { m_coreInput.insert(inputList.begin(), inputList.end()); } void PlipInput::ClearInput() { m_coreInput.clear(); } + + PlipInputData PlipInput::GetInput(int id) { + return m_coreInput.find(id)->second.GetData(); + } + + void PlipInput::UpdateInput(int id, PlipInputData data) { + if(m_coreInput.find(id) == m_coreInput.end()) return; + m_coreInput.find(id)->second.SetData(data); + } } diff --git a/libplip/PlipInput.h b/libplip/PlipInput.h index a951aa0..415b259 100644 --- a/libplip/PlipInput.h +++ b/libplip/PlipInput.h @@ -5,7 +5,7 @@ #pragma once -#include +#include #include #include "PlipInputDefinition.h" @@ -13,14 +13,16 @@ namespace Plip { class PlipInput { public: - void AddInput(int id, const PlipInputDefinition &input); - void AddInput(std::map inputList); - void ClearInput(); + virtual void AddInput(int id, const PlipInputDefinition &input, const PlipInputData &initialData) final; + virtual void AddInput(std::unordered_map inputList) final; + virtual void ClearInput() final; + virtual PlipInputData GetInput(int id) final; + virtual void UpdateInput(int id, PlipInputData data) final; protected: PlipInput() = default; private: - std::map m_coreInput; + std::unordered_map m_coreInput; }; } diff --git a/libplip/PlipInputDefinition.cpp b/libplip/PlipInputDefinition.cpp index 686d7ca..add5642 100644 --- a/libplip/PlipInputDefinition.cpp +++ b/libplip/PlipInputDefinition.cpp @@ -11,6 +11,10 @@ namespace Plip { m_description = description; } + PlipInputData PlipInputDefinition::GetData() const { + return m_data; + } + std::string PlipInputDefinition::GetDescription() const { return m_description; } @@ -18,4 +22,8 @@ namespace Plip { PlipInputType PlipInputDefinition::GetType() const { return m_type; } + + void PlipInputDefinition::SetData(PlipInputData data) { + m_data = data; + } } diff --git a/libplip/PlipInputDefinition.h b/libplip/PlipInputDefinition.h index 4af879b..06b98ec 100644 --- a/libplip/PlipInputDefinition.h +++ b/libplip/PlipInputDefinition.h @@ -16,17 +16,18 @@ namespace Plip { Digital }; - class PlipInputDefinition { + class PlipInputDefinition final { public: PlipInputDefinition(PlipInputType type, const std::string &description); + PlipInputData GetData() const; std::string GetDescription() const; PlipInputType GetType() const; - - PlipInputData data; + void SetData(PlipInputData data); private: - PlipInputType m_type; + PlipInputData m_data; std::string m_description; + PlipInputType m_type; }; } diff --git a/libplip/PlipVersion.h b/libplip/PlipVersion.h deleted file mode 100644 index 3e71a39..0000000 --- a/libplip/PlipVersion.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#define PRODUCT_NAME "Plip" -#define BIN_NAME "plip" - -#define GIT_FOUND -#define GIT_BRANCH "master" -#define GIT_REVISION "e43f14f" -/* #undef GIT_TAG */ diff --git a/plip-sdl/SdlEvent.cpp b/plip-sdl/SdlEvent.cpp new file mode 100644 index 0000000..cac8693 --- /dev/null +++ b/plip-sdl/SdlEvent.cpp @@ -0,0 +1,9 @@ +/* SdlEvent.cpp + * + * An SDL2 event handler. + */ + +#include "SdlEvent.h" + +namespace PlipSdl { +} diff --git a/plip-sdl/SdlEvent.h b/plip-sdl/SdlEvent.h new file mode 100644 index 0000000..8ae092e --- /dev/null +++ b/plip-sdl/SdlEvent.h @@ -0,0 +1,15 @@ +/* SdlEvent.h + * + * An SDL2 event handler. + */ + +#pragma once + +#include "PlipInput.h" + +namespace PlipSdl { + class SdlEvent : protected Plip::PlipInput { + public: + SdlEvent() = default; + }; +} diff --git a/plip-sdl/main.cpp b/plip-sdl/main.cpp index b4e7f67..90f66dc 100644 --- a/plip-sdl/main.cpp +++ b/plip-sdl/main.cpp @@ -8,6 +8,7 @@ #include "cxxopts.hpp" #include "Plip.h" +#include "SdlEvent.h" #include "SdlWindow.h" cxxopts::ParseResult parseCmdLine(int argc, char **argv) { @@ -69,6 +70,7 @@ int main(int argc, char **argv) { } auto wnd = new PlipSdl::SdlWindow(opts["scale"].as(), version); + auto event = new PlipSdl::SdlEvent(); return 0; }