diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f93d13f..80ec4ef1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,9 +28,9 @@ set(SOURCES ) add_executable(bomberman - sources/main.cpp - ${SOURCES} -) + sources/main.cpp + ${SOURCES} + sources/System/Renderer/RenderScreenSystem.hpp) target_include_directories(bomberman PUBLIC sources) target_link_libraries(bomberman PUBLIC wal ray) diff --git a/sources/System/Renderer/RenderScreenSystem.hpp b/sources/System/Renderer/RenderScreenSystem.hpp new file mode 100644 index 00000000..b2e30e1b --- /dev/null +++ b/sources/System/Renderer/RenderScreenSystem.hpp @@ -0,0 +1,50 @@ +// +// Created by cbihan on 26/05/2021. +// + +#pragma once + +#include "System/System.hpp" +#include "Camera/Camera2D.hpp" +#include "Window.hpp" + +namespace BBM +{ + template + class RenderScreenSystem : public WAL::System + { + //! @brief The window to render on + RAY::Window &_window; + //! @brief The camera + T &_camera; + public: + //! @brief ctor + explicit RenderScreenSystem(RAY::Window &window, T camera) + : WAL::System({typeid(RenderScreenSystem)}), + _window(window), + _camera(camera) + { + } + + //! @brief A method called after all entities that this system manage has been updated. + //! @note render on screen here + void onSelfUpdate() override + { + this->_window.unuseCamera(); + this->_window.setDrawingState(RAY::Window::IDLE); + this->_camera.update(); + this->_window.setDrawingState(RAY::Window::DRAWING); + this->_window.clear(); + this->_window.useCamera(_camera); + } + + //! @brief Default copy ctor + RenderScreenSystem(const RenderScreenSystem &) = delete; + //! @brief Default dtor + ~RenderScreenSystem() override = default; + //! @brief Default assignment operator + RenderScreenSystem &operator=(const RenderScreenSystem &) = delete; + + }; + +} diff --git a/sources/main.cpp b/sources/main.cpp index 26274f6c..340e6942 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -21,6 +21,7 @@ #include "Model/ModelAnimations.hpp" #include "System/Renderer/Renderer3DSystem.hpp" #include "Component/Drawable/Drawable3DComponent.hpp" +#include "System/Renderer/RenderScreenSystem.hpp" #include "Vector/Vector3.hpp" #include "Window.hpp" #include "TraceLog.hpp" @@ -64,6 +65,8 @@ int demo() BBM::Renderer3DSystem circleSystem(window); + BBM::RenderScreenSystem renderSystem(window, camera); + wal.addSystem(circleSystem); entityPlayer.addComponent(circleComponent); @@ -80,30 +83,7 @@ int demo() float y_rotation = 0; window.setFPS(60); - while (!window.shouldClose()) - { - camera.update(); - - if (RAY::Controller::Keyboard::isReleased(KEY_SPACE)) - { - ++iterator; - if (iterator == textures.end()) - iterator = textures.begin(); - texture.unload(); - texture.load(get_full_path(*iterator)); - model.setTextureToMaterial(MAP_DIFFUSE, texture); - //animations[0].incrementFrameCounter(); - //model.setAnimation(animations[0]); - } - window.setDrawingState(RAY::Window::DRAWING); - window.clear(); - window.useCamera(camera); - window.draw(model, position, RAY::Vector3(1.0f, 20, 0.0f), -180.0f, RAY::Vector3( 5.0f, 5.0f, 5.0f )); - window.draw(grid); - window.unuseCamera(); - window.draw(instructionText); - window.setDrawingState(RAY::Window::IDLE); - } + //wal.run(); window.close(); diff --git a/tests/EntityTests.cpp b/tests/EntityTests.cpp index 5e1edb86..f58fd0c1 100644 --- a/tests/EntityTests.cpp +++ b/tests/EntityTests.cpp @@ -6,7 +6,6 @@ #include "Component/Position/PositionComponent.hpp" #include -using namespace BBM; using namespace WAL; using namespace BBM;