#pragma once

#include <cstdint>
#include <vector>
#include <string>

struct Sprite {
  double x;
  double y;
  int texture;
  // ZED: this should be a separate transform parameter
  double elevation=0;
  int uDiv=1;
  int vDiv=1;
};

using Image = std::vector<uint32_t>;

struct TexturePack {
  int NUM_SPRITES=1;
  constexpr static const int TEXTURE_WIDTH=256; // must be power of two
  constexpr static const int TEXTURE_HEIGHT=256; // must be power of two

  std::vector<Image> images;
  std::vector<Sprite> sprites{{4.0, 3.55, 6}};
  Image floor;
  Image ceiling;

  void load_textures();
  std::vector<uint32_t> load_image(std::string filename);
  Sprite& get_sprite(size_t sprite_num);
  Image& get_texture(size_t num);
};
