#pragma once #include #include "traits.h" #include #include #include "blt/std/logging.h" #include "status.h" #include "error_logging.h" #include namespace blt::graphics { enum class properties_t : int { // The display window's title WINDOW_TITLE, // the initial display width/height. This value does not change if the window is resized. Use Window::getWidth and Window::getHeight WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_RESIZABLE, RENDER_MODE, // INT }; class Settings { public: typedef std::variant property_t; Settings() = default; ~Settings() = default; [[nodiscard]] const property_t* getProperty(properties_t property) const { if (values.size() <= static_cast(property)) return nullptr; return &values[static_cast(property)]; } template [[nodiscard]] const T* getProperty(properties_t property) const { if ((int)values.size() <= static_cast(property)) return nullptr; return &get(values[static_cast(property)]); } void setProperty(properties_t property, property_t value) { if (values.capacity() <= static_cast(property)) values.resize(static_cast(property) * 2); values[static_cast(property)] = std::move(value); } private: std::vector values; }; }