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 "gui/layout.hpp"

View File

@@ -1,49 +1,55 @@
#include "scene.hpp"
#include <scene/object.hpp>
#include <scene/camera.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
#include <memory>
#include <vector>
namespace inferno::graphics {
class Camera;
}
namespace inferno::scene {
class SceneObject;
class Camera;
class Mesh;
class Sky;
typedef struct Scene {
std::shared_ptr<graphics::Camera> Camera;
std::vector<std::unique_ptr<SceneObject>> Objects;
bool DidUpdate = false;
} Scene;
{
public:
Scene();
~Scene();
void setCamera(Camera* camera);
Camera* getCamera();
void addMesh(Mesh* mesh);
bool didUpdate();
void newFrame();
const std::vector<Mesh*>& getRenderables();
private:
std::vector<Mesh*> mMeshs;
Camera* mCurrentCamera;
Sky* mCurrentSky;
private:
bool mDidUpdate = false;
};
std::unique_ptr<Scene> scene_create();
void scene_cleanup(std::unique_ptr<Scene>& scene);
void scene_set_camera(std::unique_ptr<Scene>& scene, std::shared_ptr<graphics::Camera> camera);
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);
std::vector<std::unique_ptr<SceneObject>>& get_renderables(std::unique_ptr<Scene>& scene);
bool did_update(std::unique_ptr<Scene>& scene);
void frame_tick(std::unique_ptr<Scene>& scene);
void tick(std::unique_ptr<Scene>& scene);
}