#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 #include 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); /// @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_; } /// @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_; std::vector> meshes_; std::vector> materials_; std::vector> lights_; }; } // namespace are #endif // ARE_INCLUDE_SCENE_SCENE_H