epic scne

This commit is contained in:
Benjamin Kyd
2023-07-27 13:29:14 +01:00
parent 97476996e8
commit db42b0df82
3 changed files with 63 additions and 66 deletions

View File

@@ -1,4 +1,4 @@
#include "infergo.hpp" #include "inferno.hpp"
#include <version.hpp> #include <version.hpp>
// #include "gui/layout.hpp" // #include "gui/layout.hpp"

View File

@@ -1,49 +1,55 @@
#include "scene.hpp" #include "scene.hpp"
#include <scene/object.hpp>
#include <scene/camera.hpp> #include <scene/camera.hpp>
#include <scene/mesh.hpp> #include <scene/mesh.hpp>
#include <scene/object.hpp>
using namespace inferno; namespace inferno::scene {
Scene::Scene() std::unique_ptr<Scene> scene_create()
{ {
std::unique_ptr<Scene> scene = std::make_unique<Scene>();
scene->Camera = std::make_shared<graphics::Camera>();
return scene;
}
void scene_cleanup(std::unique_ptr<Scene>& scene)
{
}
void scene_set_camera(std::unique_ptr<Scene>& scene, std::shared_ptr<graphics::Camera> camera)
{
scene->Camera = camera;
scene->DidUpdate = true;
}
void scene_add_object(std::unique_ptr<Scene>& scene, std::unique_ptr<SceneObject> object)
{
scene->Objects.push_back(std::move(object));
scene->DidUpdate = true;
}
std::vector<std::unique_ptr<SceneObject>>& get_renderables(std::unique_ptr<Scene>& scene)
{
return scene->Objects;
}
bool did_update(std::unique_ptr<Scene>& scene)
{
return scene->DidUpdate;
}
void frame_tick(std::unique_ptr<Scene>& scene)
{
scene->DidUpdate = false;
}
void tick(std::unique_ptr<Scene>& scene)
{
for (auto& object : scene->Objects) {
// object->tick();
}
}
} }
Scene::~Scene()
{
}
void Scene::setCamera(Camera* camera)
{
mCurrentCamera = camera;
mDidUpdate = true;
}
Camera* Scene::getCamera()
{
return mCurrentCamera;
}
void Scene::addMesh(Mesh* mesh)
{
mMeshs.push_back(mesh);
mDidUpdate = true;
}
bool Scene::didUpdate()
{
return mDidUpdate;
}
void Scene::newFrame()
{
mDidUpdate = false;
}
const std::vector<Mesh*>& Scene::getRenderables()
{
return mMeshs;
}

View File

@@ -1,40 +1,31 @@
#pragma once #pragma once
#include <memory>
#include <vector> #include <vector>
namespace inferno::graphics {
class Camera;
}
namespace inferno::scene { namespace inferno::scene {
class SceneObject; class SceneObject;
class Camera;
class Mesh; class Mesh;
class Sky;
typedef struct Scene { typedef struct Scene {
std::shared_ptr<graphics::Camera> Camera;
std::vector<std::unique_ptr<SceneObject>> Objects;
bool DidUpdate = false;
} Scene; } Scene;
{ std::unique_ptr<Scene> scene_create();
public: void scene_cleanup(std::unique_ptr<Scene>& scene);
Scene(); void scene_set_camera(std::unique_ptr<Scene>& scene, std::shared_ptr<graphics::Camera> camera);
~Scene(); void scene_add_object(std::unique_ptr<Scene>& scene, std::unique_ptr<SceneObject> object);
std::unique_ptr<graphics::Camera>& get_camera(std::unique_ptr<Scene>& scene);
void setCamera(Camera* camera); std::vector<std::unique_ptr<SceneObject>>& get_renderables(std::unique_ptr<Scene>& scene);
Camera* getCamera(); bool did_update(std::unique_ptr<Scene>& scene);
void addMesh(Mesh* mesh); void frame_tick(std::unique_ptr<Scene>& scene);
void tick(std::unique_ptr<Scene>& scene);
bool didUpdate();
void newFrame();
const std::vector<Mesh*>& getRenderables();
private:
std::vector<Mesh*> mMeshs;
Camera* mCurrentCamera;
Sky* mCurrentSky;
private:
bool mDidUpdate = false;
};
} }