#pragma once #include "scenery-type.hpp" #include "object.hpp" #include namespace floormat { struct generic_scenery_proto { bool active : 1 = false; bool interactive : 1 = false; bool operator==(const generic_scenery_proto& p) const; static enum scenery_type scenery_type(); }; struct door_scenery_proto { bool active : 1 = false; bool interactive : 1 = true; bool closing : 1 = false; bool operator==(const door_scenery_proto& p) const; static enum scenery_type scenery_type(); }; using scenery_proto_variants = std::variant; struct scenery_proto : object_proto { scenery_proto_variants subtype; // todo! add std::monostate scenery_proto() noexcept; ~scenery_proto() noexcept override; explicit operator bool() const; bool operator==(const object_proto& proto) const override; enum scenery_type scenery_type() const; scenery_proto(const scenery_proto&) noexcept; scenery_proto& operator=(const scenery_proto&) noexcept; scenery_proto(scenery_proto&&) noexcept; scenery_proto& operator=(scenery_proto&&) noexcept; }; template<> struct scenery_type_ : std::integral_constant {}; template<> struct scenery_type_ : std::integral_constant {}; } // namespace floormat