Browse Source

Add basic Engine initialization

Patrick-Christopher Mattulat 6 ngày trước cách đây
mục cha
commit
975d523564

+ 20 - 6
CMakeLists.txt

@@ -16,6 +16,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
 set(MODULE_NAME_CYCLE ls-atlantis-cycle)
 set(MODULE_NAME_FACTORY ls-atlantis-factory)
 set(MODULE_NAME_INTERFACE ls-atlantis-interface)
+set(MODULE_NAME_MESSAGING ls-atlantis-messaging)
 set(MODULE_NAME_WINDOW ls-atlantis-window)
 
 set(CMAKE_DEBUG_POSTFIX -d)
@@ -31,6 +32,9 @@ find_package(GTest REQUIRED)
 find_package(ls-std REQUIRED)
 find_package(SDL3 REQUIRED)
 
+enable_testing()
+include(GoogleTest)
+
 if (WIN32)
     file(GLOB LS_STD_DLLS_DEBUG "${ls-std_LIB_DIRS_DEBUG}/*.dll")
     file(GLOB LS_STD_DLLS_RELEASE "${ls-std_LIB_DIRS_RELEASE}/*.dll")
@@ -38,21 +42,21 @@ endif ()
 
 ################################################################
 ################################################################
-# Module: Cycle
+# Module: Interface
 ################################################################
 ################################################################
 
-include(cmake/ls-atlantis-cycle.cmake)
-include(cmake/ls-atlantis-cycle-tests.cmake)
+include(cmake/ls-atlantis-interface.cmake)
+include(cmake/ls-atlantis-interface-tests.cmake)
 
 ################################################################
 ################################################################
-# Module: Interface
+# Module: Messaging
 ################################################################
 ################################################################
 
-include(cmake/ls-atlantis-interface.cmake)
-include(cmake/ls-atlantis-interface-tests.cmake)
+include(cmake/ls-atlantis-messaging.cmake)
+include(cmake/ls-atlantis-messaging-tests.cmake)
 
 ################################################################
 ################################################################
@@ -72,6 +76,15 @@ include(cmake/ls-atlantis-window-tests.cmake)
 include(cmake/ls-atlantis-factory.cmake)
 include(cmake/ls-atlantis-factory-tests.cmake)
 
+################################################################
+################################################################
+# Module: Cycle
+################################################################
+################################################################
+
+include(cmake/ls-atlantis-cycle.cmake)
+include(cmake/ls-atlantis-cycle-tests.cmake)
+
 ################################################################
 ################################################################
 # Example
@@ -91,5 +104,6 @@ add_custom_target(ls-atlantis-tests
         ${MODULE_NAME_CYCLE}-tests
         ${MODULE_NAME_FACTORY}-tests
         ${MODULE_NAME_INTERFACE}-tests
+        ${MODULE_NAME_MESSAGING}-tests
         ${MODULE_NAME_WINDOW}-tests
 )

+ 0 - 6
cmake/ls-atlantis-cycle-tests.cmake

@@ -12,17 +12,12 @@ set(ATLANTIS_CYCLE_TEST_SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/mock/WindowApiMock.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/EngineParameterTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/EngineRuntimeDataTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/StatusCodeOkTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/StatusCodeWindowApiLoadingFailedTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cycle/StatusCodeWindowCreationFailedTest.cpp
 )
 
 ################################
 # Test Case Creation: Cycle Module
 ################################
 
-enable_testing()
-
 add_executable(${MODULE_NAME_CYCLE}-tests ${ATLANTIS_CYCLE_TEST_SOURCES})
 
 target_link_libraries(${MODULE_NAME_CYCLE}-tests PRIVATE
@@ -30,7 +25,6 @@ target_link_libraries(${MODULE_NAME_CYCLE}-tests PRIVATE
     GTest::gtest_main
 )
 
-include(GoogleTest)
 gtest_discover_tests(${MODULE_NAME_CYCLE}-tests DISCOVERY_MODE PRE_TEST)
 
 if (WIN32)

+ 3 - 3
cmake/ls-atlantis-cycle.cmake

@@ -9,11 +9,9 @@
 ################################
 
 set(ATLANTIS_CYCLE_SOURCES
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/Engine.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/EngineParameter.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/EngineRuntimeData.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/StatusCodeOk.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/StatusCodeWindowApiLoadingFailed.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/cycle/StatusCodeWindowCreationFailed.cpp
 )
 
 ################################
@@ -23,7 +21,9 @@ set(ATLANTIS_CYCLE_SOURCES
 add_library(${MODULE_NAME_CYCLE} SHARED ${ATLANTIS_CYCLE_SOURCES})
 
 target_link_libraries(${MODULE_NAME_CYCLE} PUBLIC
+    ${MODULE_NAME_FACTORY}
     ${MODULE_NAME_INTERFACE}
+    ${MODULE_NAME_MESSAGING}
     $<$<CONFIG:Debug>:ls-std::ls-std-core-d>
     $<$<CONFIG:Release>:ls-std::ls-std-core>
 )

+ 1 - 1
cmake/ls-atlantis-example.cmake

@@ -9,7 +9,7 @@ add_executable(ls-atlantis-example
 )
 
 target_link_libraries(ls-atlantis-example PRIVATE
-    ${MODULE_NAME_WINDOW}
+    ${MODULE_NAME_CYCLE}
 )
 
 if (WIN32)

+ 39 - 0
cmake/ls-atlantis-messaging-tests.cmake

@@ -0,0 +1,39 @@
+################################################################
+################################################################
+# Module-Test: Messaging
+################################################################
+################################################################
+
+################################
+# Test Files: Messaging Module
+################################
+
+set(ATLANTIS_MESSAGING_TEST_SOURCES
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/messaging/StatusCodeOkTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/messaging/StatusCodeWindowApiLoadingFailedTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/messaging/StatusCodeWindowCreationFailedTest.cpp
+)
+
+################################
+# Test Case Creation: Messaging Module
+################################
+
+add_executable(${MODULE_NAME_MESSAGING}-tests ${ATLANTIS_MESSAGING_TEST_SOURCES})
+
+target_link_libraries(${MODULE_NAME_MESSAGING}-tests PRIVATE
+    ${MODULE_NAME_MESSAGING}
+    GTest::gtest_main
+)
+
+gtest_discover_tests(${MODULE_NAME_MESSAGING}-tests DISCOVERY_MODE PRE_TEST)
+
+if (WIN32)
+    add_custom_command(TARGET ${MODULE_NAME_MESSAGING}-tests POST_BUILD
+        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_MESSAGING}-tests>
+            $<TARGET_RUNTIME_DLLS:${MODULE_NAME_MESSAGING}-tests>
+        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_MESSAGING}-tests>
+            "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
+            "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
+        COMMAND_EXPAND_LISTS
+    )
+endif ()

+ 25 - 0
cmake/ls-atlantis-messaging.cmake

@@ -0,0 +1,25 @@
+################################################################
+################################################################
+# Module: Messaging
+################################################################
+################################################################
+
+################################
+# Source Files: Messaging Module
+################################
+
+set(ATLANTIS_MESSAGING_SOURCES
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/messaging/StatusCodeOk.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/messaging/StatusCodeWindowApiLoadingFailed.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/messaging/StatusCodeWindowCreationFailed.cpp
+)
+
+################################
+# Library Creation: Messaging Module
+################################
+
+add_library(${MODULE_NAME_MESSAGING} SHARED ${ATLANTIS_MESSAGING_SOURCES})
+
+target_link_libraries(${MODULE_NAME_MESSAGING} PUBLIC
+    ${MODULE_NAME_INTERFACE}
+)

+ 1 - 1
cmake/ls-atlantis-window.cmake

@@ -20,7 +20,7 @@ set(ATLANTIS_WINDOW_SOURCES
 add_library(${MODULE_NAME_WINDOW} SHARED ${ATLANTIS_WINDOW_SOURCES})
 
 target_link_libraries(${MODULE_NAME_WINDOW} PUBLIC
-    ${MODULE_NAME_CYCLE}
     ${MODULE_NAME_INTERFACE}
+    ${MODULE_NAME_MESSAGING}
     SDL3::SDL3
 )

+ 34 - 0
include/cycle/Engine.hpp

@@ -0,0 +1,34 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_CYCLE_ENGINE_HPP
+#define LS_ATLANTIS_ENGINE_CYCLE_ENGINE_HPP
+
+#include <Export.hpp>
+#include <cycle/EngineParameter.hpp>
+#include <cycle/EngineRuntimeData.hpp>
+#include <interface/AStatusCode.hpp>
+#include <memory>
+
+namespace ls::atlantis::cycle
+{
+  class LS_ATLANTIS_DYNAMIC_GOAL Engine
+  {
+    public:
+
+      explicit Engine(const ls::atlantis::cycle::EngineParameter &_parameter);
+      ~Engine();
+
+      [[nodiscard]] ::std::shared_ptr<ls::atlantis::cycle::EngineRuntimeData> getData() const;
+      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> init();
+
+    private:
+
+      ::std::shared_ptr<ls::atlantis::cycle::EngineRuntimeData> data{};
+      ls::atlantis::cycle::EngineParameter parameter{};
+  };
+}
+
+#endif

+ 3 - 3
include/cycle/StatusCodeOk.hpp → include/messaging/StatusCodeOk.hpp

@@ -3,13 +3,13 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
-#ifndef LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_HPP
-#define LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_HPP
+#ifndef LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_OK_HPP
+#define LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_OK_HPP
 
 #include <Export.hpp>
 #include <interface/AStatusCode.hpp>
 
-namespace ls::atlantis::cycle
+namespace ls::atlantis::messaging
 {
   class LS_ATLANTIS_DYNAMIC_GOAL StatusCodeOk : public ls::atlantis::interfaces::AStatusCode
   {

+ 3 - 3
include/cycle/StatusCodeWindowApiLoadingFailed.hpp → include/messaging/StatusCodeWindowApiLoadingFailed.hpp

@@ -3,13 +3,13 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
-#ifndef LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
-#define LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
+#ifndef LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
+#define LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
 
 #include <Export.hpp>
 #include <interface/AStatusCode.hpp>
 
-namespace ls::atlantis::cycle
+namespace ls::atlantis::messaging
 {
   class LS_ATLANTIS_DYNAMIC_GOAL StatusCodeWindowApiLoadingFailed : public ls::atlantis::interfaces::AStatusCode
   {

+ 3 - 3
include/cycle/StatusCodeWindowCreationFailed.hpp → include/messaging/StatusCodeWindowCreationFailed.hpp

@@ -3,13 +3,13 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
-#ifndef LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_WINDOW_CREATION_FAILED_HPP
-#define LS_ATLANTIS_ENGINE_CYCLE_STATUS_CODE_WINDOW_CREATION_FAILED_HPP
+#ifndef LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_WINDOW_CREATION_FAILED_HPP
+#define LS_ATLANTIS_ENGINE_MESSAGING_STATUS_CODE_WINDOW_CREATION_FAILED_HPP
 
 #include <Export.hpp>
 #include <interface/AStatusCode.hpp>
 
-namespace ls::atlantis::cycle
+namespace ls::atlantis::messaging
 {
   class LS_ATLANTIS_DYNAMIC_GOAL StatusCodeWindowCreationFailed : public ls::atlantis::interfaces::AStatusCode
   {

+ 11 - 5
output/Example.cpp

@@ -3,19 +3,25 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
+#include <cycle/Engine.hpp>
+#include <cycle/EngineParameter.hpp>
 #include <glossary/StatusCodes.hpp>
-#include <window/SdlWindowApi.hpp>
+#include <glossary/WindowApiTypes.hpp>
 
+using ls::atlantis::cycle::Engine;
+using ls::atlantis::cycle::EngineParameter;
 using ls::atlantis::glossary::StatusCodes;
+using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;
-using ls::atlantis::window::SdlWindowApi;
-using ::std::make_shared;
 using ::std::shared_ptr;
 
 int main()
 {
-  const auto windowApi = make_shared<SdlWindowApi>();
-  const shared_ptr<AStatusCode> statusCode = windowApi->init();
+  EngineParameter parameter{};
+  parameter.setWindowApiType(WindowApiTypes::SDL_WINDOW_API);
+
+  Engine engine{parameter};
+  const shared_ptr<AStatusCode> statusCode = engine.init();
 
   return statusCode->getId() == StatusCodes::OK ? EXIT_SUCCESS : EXIT_FAILURE;
 }

+ 35 - 0
source/cycle/Engine.cpp

@@ -0,0 +1,35 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <cycle/Engine.hpp>
+#include <factory/WindowApiFactory.hpp>
+
+using ls::atlantis::cycle::Engine;
+using ls::atlantis::cycle::EngineParameter;
+using ls::atlantis::cycle::EngineRuntimeData;
+using ls::atlantis::factory::WindowApiFactory;
+using ls::atlantis::interfaces::AStatusCode;
+using ::std::make_shared;
+using ::std::shared_ptr;
+
+Engine::Engine(const EngineParameter &_parameter)
+  : data(make_shared<EngineRuntimeData>()),
+    parameter(_parameter)
+{}
+
+Engine::~Engine() = default;
+
+shared_ptr<EngineRuntimeData> Engine::getData() const
+{
+  return this->data;
+}
+
+shared_ptr<AStatusCode> Engine::init()
+{
+  const auto windowApi = WindowApiFactory::build(this->parameter.getWindowApiType());
+  this->data->setWindowApi(windowApi);
+
+  return windowApi->init();
+}

+ 2 - 2
source/cycle/StatusCodeOk.cpp → source/messaging/StatusCodeOk.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeOk.hpp>
+#include <messaging/StatusCodeOk.hpp>
 
-using ls::atlantis::cycle::StatusCodeOk;
 using ls::atlantis::glossary::StatusCodes;
 using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::messaging::StatusCodeOk;
 
 StatusCodeOk::StatusCodeOk() : AStatusCode(StatusCodes::OK, "ok")
 {}

+ 2 - 2
source/cycle/StatusCodeWindowApiLoadingFailed.cpp → source/messaging/StatusCodeWindowApiLoadingFailed.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeWindowApiLoadingFailed.hpp>
+#include <messaging/StatusCodeWindowApiLoadingFailed.hpp>
 
-using ls::atlantis::cycle::StatusCodeWindowApiLoadingFailed;
 using ls::atlantis::glossary::StatusCodes;
 using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed;
 
 StatusCodeWindowApiLoadingFailed::StatusCodeWindowApiLoadingFailed() : AStatusCode(StatusCodes::WINDOW_API_LOADING_FAILED, "window api loading failed")
 {}

+ 2 - 2
source/cycle/StatusCodeWindowCreationFailed.cpp → source/messaging/StatusCodeWindowCreationFailed.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeWindowCreationFailed.hpp>
+#include <messaging/StatusCodeWindowCreationFailed.hpp>
 
-using ls::atlantis::cycle::StatusCodeWindowCreationFailed;
 using ls::atlantis::glossary::StatusCodes;
 using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::messaging::StatusCodeWindowCreationFailed;
 
 StatusCodeWindowCreationFailed::StatusCodeWindowCreationFailed() : AStatusCode(StatusCodes::WINDOW_CREATION_FAILED, "window creation failed")
 {}

+ 6 - 6
source/window/SdlWindowApi.cpp

@@ -4,16 +4,16 @@
  */
 
 #include <SDL3/SDL.h>
-#include <cycle/StatusCodeOk.hpp>
-#include <cycle/StatusCodeWindowApiLoadingFailed.hpp>
-#include <cycle/StatusCodeWindowCreationFailed.hpp>
+#include <messaging/StatusCodeOk.hpp>
+#include <messaging/StatusCodeWindowApiLoadingFailed.hpp>
+#include <messaging/StatusCodeWindowCreationFailed.hpp>
 #include <ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp>
 #include <window/SdlApi.hpp>
 #include <window/SdlWindowApi.hpp>
 
-using ls::atlantis::cycle::StatusCodeOk;
-using ls::atlantis::cycle::StatusCodeWindowApiLoadingFailed;
-using ls::atlantis::cycle::StatusCodeWindowCreationFailed;
+using ls::atlantis::messaging::StatusCodeOk;
+using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed;
+using ls::atlantis::messaging::StatusCodeWindowCreationFailed;
 using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;
 using ls::atlantis::interfaces::ISdlApi;

+ 2 - 2
test/cycle/mock/WindowApiMock.cpp

@@ -3,10 +3,10 @@
  * e-mail: webmaster@lynarstudios.com
  */
 
-#include <cycle/StatusCodeOk.hpp>
+#include <messaging/StatusCodeOk.hpp>
 #include <test/cycle/mock/WindowApiMock.hpp>
 
-using ls::atlantis::cycle::StatusCodeOk;
+using ls::atlantis::messaging::StatusCodeOk;
 using ls::atlantis::cycle::test::WindowApiMock;
 using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;

+ 2 - 2
test/cycle/StatusCodeOkTest.cpp → test/messaging/StatusCodeOkTest.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeOk.hpp>
 #include <gtest/gtest.h>
+#include <messaging/StatusCodeOk.hpp>
 
-using ls::atlantis::cycle::StatusCodeOk;
 using ls::atlantis::glossary::StatusCodes;
+using ls::atlantis::messaging::StatusCodeOk;
 using ::std::string;
 using ::testing::Test;
 

+ 2 - 2
test/cycle/StatusCodeWindowApiLoadingFailedTest.cpp → test/messaging/StatusCodeWindowApiLoadingFailedTest.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeWindowApiLoadingFailed.hpp>
 #include <gtest/gtest.h>
+#include <messaging/StatusCodeWindowApiLoadingFailed.hpp>
 
-using ls::atlantis::cycle::StatusCodeWindowApiLoadingFailed;
 using ls::atlantis::glossary::StatusCodes;
+using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed;
 using ::std::string;
 using ::testing::Test;
 

+ 2 - 2
test/cycle/StatusCodeWindowCreationFailedTest.cpp → test/messaging/StatusCodeWindowCreationFailedTest.cpp

@@ -4,11 +4,11 @@
  */
 
 #include <glossary/StatusCodes.hpp>
-#include <cycle/StatusCodeWindowCreationFailed.hpp>
 #include <gtest/gtest.h>
+#include <messaging/StatusCodeWindowCreationFailed.hpp>
 
-using ls::atlantis::cycle::StatusCodeWindowCreationFailed;
 using ls::atlantis::glossary::StatusCodes;
+using ls::atlantis::messaging::StatusCodeWindowCreationFailed;
 using ::std::string;
 using ::testing::Test;