37 lines
1.3 KiB
C++
37 lines
1.3 KiB
C++
#pragma once
|
||
|
||
#include <cstdint>
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
// Tilemap basat en tiles 16×16 (o la mida que indique el yaml). El mapa es
|
||
// prerenderitza una sola vegada a un buffer ARGB propi a la construcció; a
|
||
// partir d'aquí, cada render és una simple còpia de píxels clipada sobre el
|
||
// canvas del joc. Això evita recórrer la graella de tiles cada frame.
|
||
//
|
||
// Les cel·les sense tile (p.ex. les caselles dels sarcòfags, que es faran
|
||
// actors independents) es deixen transparents (alpha=0) i el canvas
|
||
// subjacent hi queda visible.
|
||
class Tilemap {
|
||
public:
|
||
// Carrega el yaml (camí relatiu o absolut), el tileset referenciat i
|
||
// prerenderitza la graella a memòria.
|
||
explicit Tilemap(const std::string& yaml_path);
|
||
|
||
// Dibuixa la textura prerenderitzada al canvas a l'origen del yaml.
|
||
// Offsets negatius permeten overscan (textura més gran que el canvas).
|
||
void render() const;
|
||
|
||
[[nodiscard]] auto getWidth() const -> int { return width_px_; }
|
||
[[nodiscard]] auto getHeight() const -> int { return height_px_; }
|
||
[[nodiscard]] auto getOriginX() const -> int { return origin_x_; }
|
||
[[nodiscard]] auto getOriginY() const -> int { return origin_y_; }
|
||
|
||
private:
|
||
int width_px_{0};
|
||
int height_px_{0};
|
||
int origin_x_{0};
|
||
int origin_y_{0};
|
||
std::vector<std::uint32_t> pixels_;
|
||
};
|