aurora-rendering-engine/include/scene/scene.h

75 lines
2.0 KiB
C++

#ifndef ARE_INCLUDE_SCENE_SCENE_H
#define ARE_INCLUDE_SCENE_SCENE_H
#include "basic/types.h"
#include "scene/camera.h"
#include "scene/mesh.h"
#include "scene/material.h"
#include "scene/light.h"
#include <vector>
#include <memory>
namespace are {
/// @brief Scene container holding all scene objects
class Scene {
public:
/// @brief Constructor
Scene();
/// @brief Destructor
~Scene();
/// @brief Add mesh to scene
/// @param mesh Mesh to add
/// @return Mesh index
uint add_mesh(std::shared_ptr<Mesh> mesh);
/// @brief Add material to scene
/// @param material Material to add
/// @return Material index
uint add_material(std::shared_ptr<Material> material);
/// @brief Add light to scene
/// @param light Light to add
/// @return Light index
uint add_light(std::shared_ptr<Light> light);
/// @brief Set active camera
/// @param camera Camera to set
void set_camera(std::shared_ptr<Camera> camera);
/// @brief Get active camera
/// @return Active camera
const Camera& get_camera() const { return *camera_; }
/// @brief Get all meshes
/// @return Mesh list
const std::vector<std::shared_ptr<Mesh>>& get_meshes() const { return meshes_; }
/// @brief Get all materials
/// @return Material list
const std::vector<std::shared_ptr<Material>>& get_materials() const { return materials_; }
/// @brief Get all lights
/// @return Light list
const std::vector<std::shared_ptr<Light>>& get_lights() const { return lights_; }
/// @brief Clear all scene objects
void clear();
/// @brief Update scene (animations, transforms, etc.)
/// @param delta_time Time since last update
void update(float delta_time);
private:
std::shared_ptr<Camera> camera_;
std::vector<std::shared_ptr<Mesh>> meshes_;
std::vector<std::shared_ptr<Material>> materials_;
std::vector<std::shared_ptr<Light>> lights_;
};
} // namespace are
#endif // ARE_INCLUDE_SCENE_SCENE_H