diff --git a/cmake/StaticAnalyzers.cmake b/cmake/StaticAnalyzers.cmake index ca136aab64a152ceafc238983eb8d69356df7313..43964447f068f30a8af5de899691b8f5538d33fc 100644 --- a/cmake/StaticAnalyzers.cmake +++ b/cmake/StaticAnalyzers.cmake @@ -1,5 +1,5 @@ -option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" ON) -option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" ON) +option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) +option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) if(ENABLE_CPPCHECK) diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 05287a7da6d4e8c0fda07b5eb90b393c0837891e..ee9fdec0ea18a569966ff6e6d8093bd3284571c3 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -1,5 +1,6 @@ add_subdirectory(state) add_subdirectory(input) +add_subdirectory(renderer) add_library(game game.h game.cpp) @@ -11,4 +12,5 @@ target_link_libraries(game CONAN_PKG::spdlog state input + renderer ) \ No newline at end of file diff --git a/src/game/game.cpp b/src/game/game.cpp index e55f090e65b73656b5f526b27189c7481f4782c2..476163ad943004d81a2a0fd61a1b5b0646749ae2 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -2,16 +2,19 @@ #include "spdlog/spdlog.h" #include "input/sdl_input.h" +#include "renderer/sdl_renderer.h" #include <variant> game::game(uint32_t fps):current_state(), input_processor(nullptr), + renderer(nullptr), player_position_delta(0), player_angle_delta(0.0), delta_time(1.0 / static_cast<double>(fps)), is_running(false) { input_processor = new sdl_input(); + renderer = new sdl_renderer(); spdlog::get("game")->debug("Fps set to: {} and delta_time set to: {}", fps, delta_time); spdlog::get("game")->info("Finished game component initialization."); } @@ -20,6 +23,9 @@ game::~game() { spdlog::get("game")->debug("Deleting allocated resources"); if (!input_processor) delete input_processor; + if (!renderer) { + delete renderer; + } } void game::run_loop() { diff --git a/src/game/game.h b/src/game/game.h index b9028d6ab5d0dbb41653ea7ae007f9bcb69104ae..a58fe95e52ae90831ce95007bba6c8a0acdb5aae 100644 --- a/src/game/game.h +++ b/src/game/game.h @@ -6,6 +6,7 @@ #include "state/state.h" #include "input/abstract_input.h" +#include "renderer/abstract_renderer.h" /** * Basic game structure - behaves like controler in MVC schema. @@ -32,6 +33,8 @@ protected: state current_state; /// Current input processor abstract_input* input_processor; + /// Current game renderer + abstract_renderer* renderer; /// Player position is updated every second by this value uint32_t player_position_delta; /// Player angle is updated every second by this value diff --git a/src/game/renderer/CMakeLists.txt b/src/game/renderer/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..827c7b5ad63c01a8f4ad1d4b3f489e0ed979aa73 --- /dev/null +++ b/src/game/renderer/CMakeLists.txt @@ -0,0 +1,13 @@ +add_library(renderer + abstract_renderer.h abstract_renderer.cpp + sdl_renderer.h sdl_renderer.cpp) + +target_link_libraries(input + PUBLIC + project_options + project_warnings + CONAN_PKG::spdlog + ${SDL2_LIBRARY} + ${SDL2_IMAGE_LIBRARY} + ${SDL2_TTF_LIBRARY} + state) \ No newline at end of file diff --git a/src/game/renderer/abstract_renderer.cpp b/src/game/renderer/abstract_renderer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d377f27823a9267a0598b843774c7bd0b4c6344e --- /dev/null +++ b/src/game/renderer/abstract_renderer.cpp @@ -0,0 +1 @@ +#include "abstract_renderer.h" \ No newline at end of file diff --git a/src/game/renderer/abstract_renderer.h b/src/game/renderer/abstract_renderer.h new file mode 100644 index 0000000000000000000000000000000000000000..94d69125426f8154544c81a3fca60b7661e95e70 --- /dev/null +++ b/src/game/renderer/abstract_renderer.h @@ -0,0 +1,12 @@ +#ifndef ABSTRACT_RENDERER_H +#define ABSTRACT_RENDERER_H + +#include "../state/state.h" + +class abstract_renderer{ +public: + virtual ~abstract_renderer() {} + virtual void render_state(const state& current_state) = 0; +}; + +#endif//ABSTRACT_RENDERER_H \ No newline at end of file diff --git a/src/game/renderer/sdl_renderer.cpp b/src/game/renderer/sdl_renderer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e0dec3e6f88fbe727c68ad48cb63d1fd401ab3a4 --- /dev/null +++ b/src/game/renderer/sdl_renderer.cpp @@ -0,0 +1,37 @@ +#include "sdl_renderer.h" + +#include <SDL2/SDL.h> + +#include <stdexcept> + +sdl_renderer::sdl_renderer() { + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("Window NAME - Replace me", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + 640, 480, 0); + if (window == nullptr) { + throw std::runtime_error(SDL_GetError()); + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (renderer == nullptr) { + throw std::runtime_error(SDL_GetError()); + } + + SDL_SetRenderDrawColor(renderer, 100, 100, 100, 0); + SDL_Rect screen{0, 0, 640, 480}; + SDL_RenderFillRect(renderer, &screen); +} + +sdl_renderer::~sdl_renderer() { + if (renderer != nullptr) + SDL_DestroyRenderer(renderer); + if (window != nullptr) + SDL_DestroyWindow(window); + SDL_QuitSubSystem(SDL_INIT_VIDEO); +} + +void sdl_renderer::render_state(const state& cs) { + +} \ No newline at end of file diff --git a/src/game/renderer/sdl_renderer.h b/src/game/renderer/sdl_renderer.h new file mode 100644 index 0000000000000000000000000000000000000000..a4df68fc9cc36b0c189323613983a07bb9a08892 --- /dev/null +++ b/src/game/renderer/sdl_renderer.h @@ -0,0 +1,24 @@ +#ifndef SDL_RENDERER_H +#define SDL_RENDERER_H + +#include <SDL2/SDL.h> + +#include "abstract_renderer.h" + +/// Game renderer class. Using SDL2 to render game +class sdl_renderer: public abstract_renderer { +public: + /// Default contructor (initializes SDL, window, renderer and loads texture into memory) + sdl_renderer(); + /// Closes window and deintializes sdl video module + virtual ~sdl_renderer(); + + /// Renders passed state to created window + void render_state(const state& current_state) override; +protected: + /// SDL window struct + SDL_Window* window; + SDL_Renderer* renderer; +}; + +#endif//SDL_RENDERER_H \ No newline at end of file diff --git a/src/game/state/CMakeLists.txt b/src/game/state/CMakeLists.txt index 469a40a271152e0651fb59617a0a044bc0c80400..38db7a02180406ff91ac238479e3a2548ab549a8 100644 --- a/src/game/state/CMakeLists.txt +++ b/src/game/state/CMakeLists.txt @@ -2,6 +2,8 @@ add_library(state state.h state.cpp shooter.h shooter.cpp) +target_include_directories(state PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + target_link_libraries(state PRIVATE project_options