diff --git a/CMakeLists.txt b/CMakeLists.txt index defdc07..faa61b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,6 +136,10 @@ add_executable(ColorRace engine/src/renderer/MeshRenderSystem.h engine/src/renderer/MeshRenderer.cpp engine/src/renderer/MeshRenderer.h + engine/src/layer/Layer.cpp + engine/src/layer/Layer.h + game/src/GameLayer.cpp + game/src/GameLayer.h ) diff --git a/engine/src/layer/Layer.cpp b/engine/src/layer/Layer.cpp new file mode 100644 index 0000000..9c60048 --- /dev/null +++ b/engine/src/layer/Layer.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 29.07.26. +// + +#include "Layer.h" diff --git a/engine/src/layer/Layer.h b/engine/src/layer/Layer.h new file mode 100644 index 0000000..e377932 --- /dev/null +++ b/engine/src/layer/Layer.h @@ -0,0 +1,24 @@ +// +// Created by sebastian on 29.07.26. +// + +#ifndef COLORRACE_LAYER_H +#define COLORRACE_LAYER_H +#include "ecs/EntityRegistry.h" + + +namespace engine { + class Layer { + public: + Layer() = default; + virtual ~Layer() = default; + virtual void onAttach() {} + virtual void onDetach() {} + virtual void onUpdate() {} + virtual void onRender() {} + }; + +} + + +#endif //COLORRACE_LAYER_H diff --git a/game/src/ColorRaceApp.cpp b/game/src/ColorRaceApp.cpp index b1c669f..e467786 100644 --- a/game/src/ColorRaceApp.cpp +++ b/game/src/ColorRaceApp.cpp @@ -12,17 +12,9 @@ void ColorRaceApp::onUpdate(float deltaTime) { - + gameLayer->onUpdate(); } void ColorRaceApp::onRender() { - m_renderState.apply(); - - engine::MeshRenderSystem meshRenderSystem; - - engine::RenderQueue queue; - meshRenderSystem.update(*entityRegistry, queue); - - m_renderer->render(queue, *m_camera); - + gameLayer->onRender(); } \ No newline at end of file diff --git a/game/src/ColorRaceApp.h b/game/src/ColorRaceApp.h index b477003..9eba2c6 100644 --- a/game/src/ColorRaceApp.h +++ b/game/src/ColorRaceApp.h @@ -4,6 +4,7 @@ #ifndef COLORRACE_COLORRACEAPP_H #define COLORRACE_COLORRACEAPP_H +#include "GameLayer.h" #include "core/Application.h" #include "ecs/EntityRegistry.h" #include "ecs/standardComponents/MeshComponent.h" @@ -31,34 +32,12 @@ public: return config; } ColorRaceApp() : Application(makeConfig()) { - m_renderState.depthTesting = false; - m_renderState.backfaceCulling = false; - m_shader = std::make_unique(); - m_camera = std::make_unique(); - m_camera->setPosition({0.0f, 0.0f, 5.0f}); - m_camera->setYaw(0.0f); - m_camera->setPitch(0.0f); - - auto cubeModel = engine::CubeFactory::createCube(); - - entityRegistry = std::make_unique(); - - const auto transformComponent = engine::TransformComponent({0,0,0}, {0,0,0}, {1,1,1}); - const auto meshComponent = engine::MeshComponent(std::move(cubeModel)); - - const auto entity = entityRegistry->createEntity(); - entityRegistry->addComponent<>(entity, transformComponent); - entityRegistry->addComponent(entity, meshComponent); - - m_renderer = std::make_unique(); + gameLayer = std::make_unique(); + gameLayer->onAttach(); } private: - engine::GLRenderState m_renderState; - std::unique_ptr entityRegistry; - std::unique_ptr m_shader; - std::unique_ptr m_renderer; - std::unique_ptr m_camera; + std::unique_ptr gameLayer; protected: void onUpdate(float deltaTime) override; void onRender() override; diff --git a/game/src/GameLayer.cpp b/game/src/GameLayer.cpp new file mode 100644 index 0000000..727f619 --- /dev/null +++ b/game/src/GameLayer.cpp @@ -0,0 +1,51 @@ +// +// Created by sebastian on 29.07.26. +// + +#include "GameLayer.h" + +#include "ecs/standardComponents/MeshComponent.h" +#include "ecs/standardComponents/TransformComponent.h" +#include "renderer/MeshRenderer.h" +#include "renderer/MeshRenderSystem.h" +#include "renderer/primitives/CubeFactory.h" +using namespace engine; +void GameLayer::onAttach() { + m_renderState.depthTesting = false; + m_renderState.backfaceCulling = false; + + m_camera = std::make_unique(); + m_camera->setPosition({0.0f, 0.0f, 5.0f}); + m_camera->setYaw(0.0f); + m_camera->setPitch(0.0f); + + m_renderer = std::make_unique(); + + Entity entity = m_entityRegistry.createEntity(); + + const auto cubeModel = CubeFactory::createCube(); + + const auto transform = TransformComponent({0,0,0}, {0,0,0}, {1,1,1}); + const auto mesh = MeshComponent(cubeModel); + + m_entityRegistry.addComponent(entity, transform); + m_entityRegistry.addComponent(entity, mesh); +} + +void GameLayer::onDetach() { + +} + +void GameLayer::onUpdate() { + Layer::onUpdate(); +} + +void GameLayer::onRender() { + m_renderQueue.clear(); + + MeshRenderSystem meshRenderSystem; + meshRenderSystem.update(m_entityRegistry, m_renderQueue); + + MeshRenderer renderer; + renderer.render(m_renderQueue, *m_camera); +} diff --git a/game/src/GameLayer.h b/game/src/GameLayer.h new file mode 100644 index 0000000..76135b2 --- /dev/null +++ b/game/src/GameLayer.h @@ -0,0 +1,28 @@ +// +// Created by sebastian on 29.07.26. +// + +#ifndef COLORRACE_GAMELAYER_H +#define COLORRACE_GAMELAYER_H +#include "ecs/EntityRegistry.h" +#include "layer/Layer.h" +#include "renderer/MeshRenderer.h" +#include "renderer/RenderQueue.h" +#include "utils/openglWrapper/GLRenderState.h" + + +class GameLayer: public engine::Layer { +public: + void onAttach() override; + void onDetach() override; + void onUpdate() override; + void onRender() override; +private: + engine::GLRenderState m_renderState; + engine::RenderQueue m_renderQueue; + engine::EntityRegistry m_entityRegistry; + std::unique_ptr m_renderer; + std::unique_ptr m_camera; +}; + +#endif //COLORRACE_GAMELAYER_H