Skip to content

Commit

Permalink
Merge pull request #5 from lioncash/array
Browse files Browse the repository at this point in the history
Icon: Use std::array where applicable
  • Loading branch information
Antidote authored Sep 1, 2019
2 parents 33a6e07 + 532e690 commit 0553faa
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions specter/include/specter/Icon.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include <array>
#include <cstddef>

#include "specter/View.hpp"
Expand All @@ -15,9 +16,9 @@ class ViewResources;

struct Icon {
boo::ObjToken<boo::ITexture> m_tex;
zeus::CVector2f m_uvCoords[4];
std::array<zeus::CVector2f, 4> m_uvCoords;
Icon() = default;
Icon(const boo::ObjToken<boo::ITexture>& tex, float rect[4]) : m_tex(tex) {
Icon(boo::ObjToken<boo::ITexture> tex, const std::array<float, 4>& rect) : m_tex(std::move(tex)) {
m_uvCoords[0][0] = rect[0];
m_uvCoords[0][1] = -rect[3];

Expand All @@ -35,19 +36,23 @@ struct Icon {
template <size_t COLS, size_t ROWS>
class IconAtlas {
boo::ObjToken<boo::ITextureS> m_tex;
Icon m_icons[COLS][ROWS];
std::array<std::array<Icon, ROWS>, COLS> m_icons;

Icon MakeIcon(float x, float y) {
float rect[] = {x / float(COLS), y / float(ROWS), x / float(COLS) + 1.f / float(COLS),
y / float(ROWS) + 1.f / float(ROWS)};
Icon MakeIcon(float x, float y) const {
const std::array<float, 4> rect{
x / float(COLS),
y / float(ROWS),
x / float(COLS) + 1.f / float(COLS),
y / float(ROWS) + 1.f / float(ROWS),
};
return Icon(m_tex.get(), rect);
}

public:
IconAtlas() = default;
operator bool() const { return m_tex.operator bool(); }
void initializeAtlas(const boo::ObjToken<boo::ITextureS>& tex) {
m_tex = tex;
void initializeAtlas(boo::ObjToken<boo::ITextureS> tex) {
m_tex = std::move(tex);
for (size_t c = 0; c < COLS; ++c)
for (size_t r = 0; r < ROWS; ++r)
m_icons[c][r] = MakeIcon(c, r);
Expand Down

0 comments on commit 0553faa

Please sign in to comment.