#pragma once #include #include "assets/components/material_components.hpp" #include "assets/data_stores/texture_store.hpp" namespace assets { struct material_data { material_data() = default; material_components::surface_properties& initialized_surface_properties(); [[nodiscard]] inline std::optional& surface_properties(); [[nodiscard]] inline std::optional& transparency(); [[nodiscard]] inline std::optional& ambient_color_texture_id(); [[nodiscard]] inline std::optional& diffuse_color_texture_id(); [[nodiscard]] inline std::optional& specular_color_texture_id(); [[nodiscard]] inline std::optional& shininess_texture_id(); [[nodiscard]] inline std::optional& alpha_texture_id(); [[nodiscard]] inline std::optional& bump_texture_id(); [[nodiscard]] inline const std::optional& surface_properties() const; [[nodiscard]] inline const std::optional& transparency() const; [[nodiscard]] inline const std::optional& ambient_color_texture_id() const; [[nodiscard]] inline const std::optional& diffuse_color_texture_id() const; [[nodiscard]] inline const std::optional& specular_color_texture_id() const; [[nodiscard]] inline const std::optional& shininess_texture_id() const; [[nodiscard]] inline const std::optional& alpha_texture_id() const; [[nodiscard]] inline const std::optional& bump_texture_id() const; inline void clear(); std::tuple< std::optional, std::optional, std::optional, std::optional, std::optional, std::optional, std::optional, std::optional > data{ std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt, std::nullopt }; }; } #define INCLUDE_DYNAMIC_MATERIAL_DATA_IMPLEMENTATION #include "assets/data/material_data.ipp" #undef INCLUDE_DYNAMIC_MATERIAL_DATA_IMPLEMENTATION