more ecs stuff

This commit is contained in:
Bailey Harrison 2022-12-15 10:07:22 +00:00
parent 7920d1199e
commit 1e06df5dc2
13 changed files with 87 additions and 60 deletions

View File

@ -14,7 +14,7 @@ set(SRC_FILES
"src/input_manager.cpp" "src/input_manager.cpp"
"src/scene_manager.cpp" "src/scene_manager.cpp"
"src/texture_manager.cpp"
"src/texture.cpp" "src/texture.cpp"
"src/gfx_device_vulkan.cpp" "src/gfx_device_vulkan.cpp"
@ -36,15 +36,15 @@ set(INCLUDE_FILES
"include/input_manager.hpp" "include/input_manager.hpp"
"include/scene_manager.hpp" "include/scene_manager.hpp"
"include/resource_manager.hpp" "include/resource_manager.hpp"
"include/texture_manager.hpp"
"include/texture.hpp" "include/texture.hpp"
"include/gfx.hpp" "include/gfx.hpp"
"include/gfx_device.hpp" "include/gfx_device.hpp"
"include/scene.hpp" "include/scene.hpp"
"include/ecs_system.hpp"
"include/util/files.hpp" "include/util/files.hpp"
) )

View File

@ -0,0 +1,9 @@
#pragma once
namespace engine::components {
struct MeshRenderer {
int placeholder;
};
}

18
include/ecs_system.hpp Normal file
View File

@ -0,0 +1,18 @@
#pragma once
#include <map>
#include <memory>
namespace engine::ecs {
template <class T>
class System {
public:
std::map<uint32_t, T> m_components{};
virtual void onUpdate(float ts) = 0;
};
}

View File

@ -12,7 +12,7 @@ namespace engine {
public: public:
ResourceManager() {} ResourceManager() {}
virtual ~ResourceManager() {} ~ResourceManager() {}
ResourceManager(const ResourceManager&) = delete; ResourceManager(const ResourceManager&) = delete;
ResourceManager& operator=(const ResourceManager&) = delete; ResourceManager& operator=(const ResourceManager&) = delete;
@ -45,4 +45,4 @@ namespace engine {
}; };
} }

View File

@ -1,9 +1,25 @@
#pragma once #pragma once
#include "ecs_system.hpp"
#include "components/mesh_renderer.hpp"
#include "log.hpp"
#include <cstdint> #include <cstdint>
namespace engine { namespace engine {
class RendererSystem : public ecs::System<components::MeshRenderer> {
public:
void onUpdate(float ts) override
{
for (const auto& [id, data] : m_components) {
DEBUG("rendering entity {}\tts={}", id, ts);
}
}
};
class Scene { class Scene {
public: public:
@ -12,10 +28,14 @@ namespace engine {
Scene& operator=(const Scene&) = delete; Scene& operator=(const Scene&) = delete;
~Scene(); ~Scene();
void update(float ts);
uint32_t createEntity() uint32_t createEntity()
{ {
return m_nextEntityID++; return m_nextEntityID++;
} }
std::unique_ptr<RendererSystem> m_renderSystem;
private: private:
uint32_t m_nextEntityID = 1000; uint32_t m_nextEntityID = 1000;

View File

@ -1,12 +1,13 @@
#pragma once #pragma once
#include "resource_manager.hpp"
#include <vector> #include <vector>
#include <memory> #include <memory>
namespace engine { namespace engine {
class Scene; // "scene.hpp" class Scene; // "scene.hpp"
class TextureManager; // "texture_manager.hpp"
class SceneManager { class SceneManager {
@ -16,16 +17,16 @@ namespace engine {
SceneManager(const SceneManager&) = delete; SceneManager(const SceneManager&) = delete;
SceneManager& operator=(const SceneManager&) = delete; SceneManager& operator=(const SceneManager&) = delete;
void createScene(std::unique_ptr<Scene>&& scene); Scene* createScene(std::unique_ptr<Scene>&& scene);
void updateActiveScene(); void updateActiveScene(float ts);
private: private:
std::vector<std::unique_ptr<Scene>> m_scenes; std::vector<std::unique_ptr<Scene>> m_scenes;
int m_activeSceneIndex = -1; int m_activeSceneIndex = -1;
const std::unique_ptr<TextureManager> m_textureManager; // const std::unique_ptr<ResourceManager<Texture>> m_textureManager;
}; };
} }

View File

@ -1,23 +0,0 @@
#pragma once
#include "resource_manager.hpp"
namespace engine {
class Texture {
};
class TextureManager : public ResourceManager<Texture> {
public:
TextureManager();
~TextureManager() override;
TextureManager(const TextureManager&) = delete;
TextureManager& operator=(const TextureManager&) = delete;
private:
};
}

2
run.sh
View File

@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
cd "Release/test" cd "Debug/test"
./enginetest ./enginetest

View File

@ -20,9 +20,6 @@ namespace engine {
m_gfx = std::make_unique<GFXDevice>(appName, appVersion, m_window->getHandle()); m_gfx = std::make_unique<GFXDevice>(appName, appVersion, m_window->getHandle());
m_inputManager = std::make_unique<InputManager>(window()); m_inputManager = std::make_unique<InputManager>(window());
m_sceneManager = std::make_unique<SceneManager>(); m_sceneManager = std::make_unique<SceneManager>();
auto myScene = std::make_unique<Scene>();
m_sceneManager->createScene(std::move(myScene));
} }
Application::~Application() {} Application::~Application() {}
@ -40,7 +37,7 @@ namespace engine {
while (m_window->isRunning()) { while (m_window->isRunning()) {
/* logic */ /* logic */
m_sceneManager->updateActiveScene(); m_sceneManager->updateActiveScene(m_window->dt());
/* draw */ /* draw */
m_gfx->renderFrame(); m_gfx->renderFrame();

View File

@ -1,12 +1,19 @@
#include "scene.hpp" #include "scene.hpp"
#include "components/mesh_renderer.hpp"
namespace engine { namespace engine {
Scene::Scene() Scene::Scene()
{ {
m_renderSystem = std::make_unique<RendererSystem>();
} }
Scene::~Scene() {} Scene::~Scene() {}
void Scene::update(float ts)
{
m_renderSystem->onUpdate(ts);
}
} }

View File

@ -1,28 +1,30 @@
#include "scene_manager.hpp" #include "scene_manager.hpp"
#include "scene.hpp" #include "scene.hpp"
#include "texture_manager.hpp"
#include "log.hpp" #include "log.hpp"
#include <assert.h>
namespace engine { namespace engine {
SceneManager::SceneManager() SceneManager::SceneManager()
: m_textureManager(std::make_unique<TextureManager>())
{ {
auto tex = std::make_unique<Texture>();
m_textureManager->add("myTexture", std::move(tex));
} }
SceneManager::~SceneManager() {} SceneManager::~SceneManager() {}
void SceneManager::createScene(std::unique_ptr<Scene>&& scene) Scene* SceneManager::createScene(std::unique_ptr<Scene>&& scene)
{ {
m_scenes.emplace_back(std::move(scene)); m_scenes.emplace_back(std::move(scene));
m_activeSceneIndex = m_scenes.size() - 1;
return m_scenes.back().get();
} }
void SceneManager::updateActiveScene() void SceneManager::updateActiveScene(float ts)
{ {
if (m_activeSceneIndex >= 0) { if (m_activeSceneIndex >= 0) {
assert(m_activeSceneIndex < m_scenes.size());
m_scenes[m_activeSceneIndex]->update(ts);
} }
} }

View File

@ -1,15 +0,0 @@
#include "texture_manager.hpp"
namespace engine {
TextureManager::TextureManager()
{
}
TextureManager::~TextureManager()
{
}
}

View File

@ -2,6 +2,9 @@
#include "application.hpp" #include "application.hpp"
#include "window.hpp" #include "window.hpp"
#include "scene_manager.hpp"
#include "scene.hpp"
#include "components/mesh_renderer.hpp"
void playGame() void playGame()
{ {
@ -10,5 +13,13 @@ void playGame()
// configure window // configure window
app.window()->setRelativeMouseMode(false); app.window()->setRelativeMouseMode(false);
auto myScene = std::make_unique<engine::Scene>();
auto entity1 = myScene->createEntity();
myScene->m_renderSystem->m_components.emplace(entity1, engine::components::MeshRenderer());
app.sceneManager()->createScene(std::move(myScene));
app.gameLoop(); app.gameLoop();
} }