#pragma once

#include <cstdint>
#include <vector>
#include <string>
#include "amt/pixel.hpp"

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 = amt::PixelBuf;

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

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

  void load_textures();
  amt::PixelBuf load_image(std::string filename);
  Sprite& get_sprite(size_t sprite_num);
  Image& get_texture(size_t num);
};