6#include <brenta/renderer/renderer.hpp>
7#include <brenta/scene.hpp>
8#include <brenta/ecs/ecs.hpp>
9#include <brenta/node.hpp>
10#include <brenta/renderer/skybox.hpp>
12using namespace brenta;
14Scene::Scene(
Camera&& camera)
16 this->active_camera = tenno::make_shared<Camera>(tenno::move(camera));
17 this->root = tenno::make_shared<Node>();
22 this->active_camera = tenno::make_shared<Camera>(camera.build());
23 this->root = tenno::make_shared<Node>();
26Scene::Scene(tenno::shared_ptr<Camera> camera)
28 this->active_camera = camera;
29 this->root = tenno::make_shared<Node>();
32void Scene::set_skybox(tenno::shared_ptr<Skybox> skybox)
34 this->skybox = skybox;
37void Scene::set_skybox(
const tenno::vector<std::filesystem::path>& faces)
39 this->skybox = tenno::make_shared<Skybox>(faces);
42tenno::shared_ptr<Node> Scene::get_root()
const
47tenno::shared_ptr<Camera> Scene::get_camera()
const
49 return this->active_camera;
52tenno::shared_ptr<Node> Scene::create_child(tenno::shared_ptr<Node> parent)
54 auto child = tenno::make_shared<Node>();
57 parent->children.push_back(child);
58 child->parent = parent;
63void Scene::add_component(tenno::shared_ptr<Node> owner,
64 tenno::shared_ptr<NodeComponent> component)
66 component->owner = owner;
67 owner->components.push_back(component);
70void Scene::set_script(tenno::weak_ptr<Node> node,
const std::filesystem::path &path)
72 if (
auto node_ptr = node.lock())
73 node_ptr->script =
Script(node, path);
76void Scene::set_script(tenno::weak_ptr<Node> node,
const std::string &source)
78 if (
auto node_ptr = node.lock())
79 node_ptr->script =
Script(node, source);
82void Scene::update(
float delta_time)
85 viotecs::World::tick();
87 this->root->update(delta_time);
90void Scene::draw(tenno::shared_ptr<RenderPipeline> pipeline,
91 int width,
int height)
93 this->root->update_world_matrix();
95 Renderer::begin_frame(*this->active_camera, width, height);
98 Renderer::submit_skybox(this->skybox.value());
102 Renderer::end_frame(pipeline);
105Scene::Builder &Scene::Builder::camera(tenno::shared_ptr<Camera> camera)
107 this->_camera = camera;
113 this->_camera = tenno::make_shared<Camera>(tenno::move(camera));
119 this->_camera = tenno::make_shared<Camera>(camera.build());
123Scene Scene::Builder::build()
125 return Scene(this->_camera);