#pragma once #include "tile-defs.hpp" #include namespace floormat { class ground_atlas; class wall_atlas; template struct image_proto_ { std::shared_ptr atlas; variant_t variant = 0; bool operator==(const image_proto_& b) const noexcept; explicit operator bool() const noexcept; }; template struct image_ref_ final { std::shared_ptr& atlas; variant_t& variant; image_ref_(std::shared_ptr& atlas, variant_t& variant) noexcept; image_ref_(const image_ref_&) noexcept; image_ref_& operator=(const Proto& proto) noexcept; operator Proto() const noexcept; explicit operator bool() const noexcept; }; using tile_image_proto = image_proto_; using tile_image_ref = image_ref_; extern template struct image_proto_; extern template struct image_ref_; using wall_image_proto = image_proto_; using wall_image_ref = image_ref_; extern template struct image_proto_; extern template struct image_ref_; } // namespace floormat