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/scene_manager.cpp"
"src/texture_manager.cpp"
"src/texture.cpp"
"src/gfx_device_vulkan.cpp"
@ -36,15 +36,15 @@ set(INCLUDE_FILES
"include/input_manager.hpp"
"include/scene_manager.hpp"
"include/resource_manager.hpp"
"include/texture_manager.hpp"
"include/texture.hpp"
"include/resource_manager.hpp"
"include/texture.hpp"
"include/gfx.hpp"
"include/gfx_device.hpp"
"include/scene.hpp"
"include/ecs_system.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:
ResourceManager() {}
virtual ~ResourceManager() {}
~ResourceManager() {}
ResourceManager(const ResourceManager&) = delete;
ResourceManager& operator=(const ResourceManager&) = delete;

View File

@ -1,9 +1,25 @@
#pragma once
#include "ecs_system.hpp"
#include "components/mesh_renderer.hpp"
#include "log.hpp"
#include <cstdint>
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 {
public:
@ -12,11 +28,15 @@ namespace engine {
Scene& operator=(const Scene&) = delete;
~Scene();
void update(float ts);
uint32_t createEntity()
{
return m_nextEntityID++;
}
std::unique_ptr<RendererSystem> m_renderSystem;
private:
uint32_t m_nextEntityID = 1000;

View File

@ -1,12 +1,13 @@
#pragma once
#include "resource_manager.hpp"
#include <vector>
#include <memory>
namespace engine {
class Scene; // "scene.hpp"
class TextureManager; // "texture_manager.hpp"
class SceneManager {
@ -16,15 +17,15 @@ namespace engine {
SceneManager(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:
std::vector<std::unique_ptr<Scene>> m_scenes;
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
cd "Release/test"
cd "Debug/test"
./enginetest

View File

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

View File

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

View File

@ -1,28 +1,30 @@
#include "scene_manager.hpp"
#include "scene.hpp"
#include "texture_manager.hpp"
#include "log.hpp"
#include <assert.h>
namespace engine {
SceneManager::SceneManager()
: m_textureManager(std::make_unique<TextureManager>())
{
auto tex = std::make_unique<Texture>();
m_textureManager->add("myTexture", std::move(tex));
}
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_activeSceneIndex = m_scenes.size() - 1;
return m_scenes.back().get();
}
void SceneManager::updateActiveScene()
void SceneManager::updateActiveScene(float ts)
{
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 "window.hpp"
#include "scene_manager.hpp"
#include "scene.hpp"
#include "components/mesh_renderer.hpp"
void playGame()
{
@ -10,5 +13,13 @@ void playGame()
// configure window
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();
}