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/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"
|
||||||
)
|
)
|
||||||
|
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:
|
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 {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
2
run.sh
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
cd "Release/test"
|
cd "Debug/test"
|
||||||
./enginetest
|
./enginetest
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
#include "texture_manager.hpp"
|
|
||||||
|
|
||||||
namespace engine {
|
|
||||||
|
|
||||||
TextureManager::TextureManager()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TextureManager::~TextureManager()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user