From 960e346159dbf152d9847f0998e1e717fb7dbfef Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 5 Dec 2022 06:30:59 +0100 Subject: src: add pass_mode field to tile_atlas --- src/tile-atlas.cpp | 13 +++++++++++-- src/tile-atlas.hpp | 9 +++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/tile-atlas.cpp b/src/tile-atlas.cpp index 9b3886da..6f9e832f 100644 --- a/src/tile-atlas.cpp +++ b/src/tile-atlas.cpp @@ -9,9 +9,9 @@ namespace floormat { -tile_atlas::tile_atlas(StringView name, const ImageView2D& image, Vector2ub tile_count) : +tile_atlas::tile_atlas(StringView name, const ImageView2D& image, Vector2ub tile_count, Optional p) : texcoords_{make_texcoords_array(Vector2ui(image.size()), tile_count)}, - name_{name}, size_{image.size()}, dims_{tile_count} + name_{name}, size_{image.size()}, dims_{tile_count}, passability{std::move(p)} { constexpr auto variant_max = std::numeric_limits::max(); fm_assert(num_tiles() <= variant_max); @@ -55,4 +55,13 @@ auto tile_atlas::make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count return ptr; } +std::size_t tile_atlas::num_tiles() const { return Vector2ui{dims_}.product(); } +Optional tile_atlas::pass_mode() const { return passability; } + +void tile_atlas::set_pass_mode(enum pass_mode p) +{ + fm_assert(!passability || passability == p); + passability = { InPlaceInit, p }; +} + } // namespace floormat diff --git a/src/tile-atlas.hpp b/src/tile-atlas.hpp index 066b1122..61f528ef 100644 --- a/src/tile-atlas.hpp +++ b/src/tile-atlas.hpp @@ -1,6 +1,8 @@ #pragma once +#include "src/pass-mode.hpp" #include #include +#include #include #include #include @@ -13,7 +15,7 @@ struct tile_atlas final using quad = std::array; using texcoords = std::array; - tile_atlas(StringView name, const ImageView2D& img, Vector2ub tile_count); + tile_atlas(StringView name, const ImageView2D& img, Vector2ub tile_count, Optional pass_mode); texcoords texcoords_for_id(std::size_t id) const; static constexpr quad floor_quad(Vector3 center, Vector2 size); @@ -21,10 +23,12 @@ struct tile_atlas final static constexpr quad wall_quad_W(Vector3 center, Vector3 size); static constexpr std::array indices(std::size_t N); [[maybe_unused]] Vector2ui pixel_size() const { return size_; } - std::size_t num_tiles() const { return Vector2ui{dims_}.product(); } + std::size_t num_tiles() const; Vector2ub num_tiles2() const { return dims_; } GL::Texture2D& texture() { return tex_; } StringView name() const { return name_; } + Optional pass_mode() const; + void set_pass_mode(enum pass_mode p); private: static std::unique_ptr make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count); @@ -35,6 +39,7 @@ private: String name_; Vector2ui size_; Vector2ub dims_; + Optional passability; }; constexpr std::array tile_atlas::indices(std::size_t N) -- cgit v1.2.3