diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-09-30 18:48:50 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-09-30 18:50:32 +0200 |
commit | 5c9863cf0998b5f1b6107ce09b54cd3e8b484221 (patch) | |
tree | 7ca268c80a0ec7ac0c1b815d984cf11309b96840 /tile-atlas.hpp | |
parent | d3a29055d8b1dce89c77af0988ea840e949d2450 (diff) |
.
Diffstat (limited to 'tile-atlas.hpp')
-rw-r--r-- | tile-atlas.hpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tile-atlas.hpp b/tile-atlas.hpp new file mode 100644 index 00000000..855214b8 --- /dev/null +++ b/tile-atlas.hpp @@ -0,0 +1,31 @@ +#pragma once +#include <Magnum/Magnum.h> +#include <Magnum/GL/Texture.h> +#include <array> + +namespace Magnum::Examples { + +struct tile_atlas final +{ + using vertex_array_type = std::array<Vector3, 4>; + + tile_atlas(const ImageView2D& img, Vector2i dims); + std::array<Vector2, 4> texcoords_for_id(int id) const; + static vertex_array_type floor_quad(Vector3 center, Vector2 size); + static vertex_array_type wall_quad_S(Vector3 center, Vector3 size); + static vertex_array_type wall_quad_E(Vector3 center, Vector3 size); + static vertex_array_type wall_quad_N(Vector3 center, Vector3 size); + static vertex_array_type wall_quad_W(Vector3 center, Vector3 size); + static std::array<UnsignedShort, 6> indices(int N); + GL::Texture2D& texture() { return tex_; } + constexpr int size() const { return dims_.product(); } + constexpr Vector2i tile_size() const { return tile_size_; } + + tile_atlas(const tile_atlas&) = delete; + tile_atlas& operator=(const tile_atlas&) = delete; +private: + GL::Texture2D tex_; + Vector2i size_, dims_, tile_size_; +}; + +} // namespace Magnum::Examples |