mirror of
https://github.com/bailwillharr/engine.git
synced 2024-09-21 04:51:18 +00:00
more ecs stuff
This commit is contained in:
parent
7920d1199e
commit
1e06df5dc2
@ -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"
|
||||
)
|
||||
|
9
include/components/mesh_renderer.hpp
Normal file
9
include/components/mesh_renderer.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
namespace engine::components {
|
||||
|
||||
struct MeshRenderer {
|
||||
int placeholder;
|
||||
};
|
||||
|
||||
}
|
18
include/ecs_system.hpp
Normal file
18
include/ecs_system.hpp
Normal 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;
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ namespace engine {
|
||||
|
||||
public:
|
||||
ResourceManager() {}
|
||||
virtual ~ResourceManager() {}
|
||||
~ResourceManager() {}
|
||||
ResourceManager(const ResourceManager&) = delete;
|
||||
ResourceManager& operator=(const ResourceManager&) = delete;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
@ -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:
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
#include "texture_manager.hpp"
|
||||
|
||||
namespace engine {
|
||||
|
||||
TextureManager::TextureManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
TextureManager::~TextureManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user