#ifndef ARE_INCLUDE_SCENE_SCENE_H #define ARE_INCLUDE_SCENE_SCENE_H #include "basic/types.h" #include "scene/camera.h" #include "scene/light.h" #include "scene/material.h" #include "scene/mesh.h" #include #include namespace are { // Scene container holding all scene objects class Scene { public: // Constructor Scene(); // Destructor ~Scene(); /* * @brief Add mesh to scene * @param mesh Mesh to add * @return Mesh index */ uint add_mesh(std::shared_ptr mesh); /* * @brief Add material to scene * @param material Material to add * @return Material index */ uint add_material(std::shared_ptr material); /* * @brief Add light to scene * @param light Light to add * @return Light index */ uint add_light(std::shared_ptr light); /* * @brief Set active camera * @param camera Camera to set */ void set_camera(std::shared_ptr 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> &get_meshes() const { return meshes_; } /* * @brief Get all materials * @return Material list */ const std::vector> &get_materials() const { return materials_; } /* * @brief Get all lights * @return Light list */ const std::vector> &get_lights() const { return lights_; } // 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_; std::vector> meshes_; std::vector> materials_; std::vector> lights_; }; } // namespace are #endif // ARE_INCLUDE_SCENE_SCENE_H