feat(entities): afegeix stone i column com a muros decoratius
This commit is contained in:
1 parent
1c49248b72
commit
6749780356
18 files changed
+448
-36
No files matched your search
@@ -78,9 +78,13 @@ class Editor {
|
||||
HAND };
|
||||
|
||||
// Quin picker està obert (si n'hi ha). Mútuament excloents.
|
||||
// - ENTITY_FRAME: sub-picker que apareix després de clicar una entitat
|
||||
// amb variants al picker principal. Mostra tots els sub-sprites del
|
||||
// atlas (índex frame) per a triar quina cara representa la instància.
|
||||
enum class Picker : std::uint8_t { NONE,
|
||||
TILE,
|
||||
ENTITY };
|
||||
ENTITY,
|
||||
ENTITY_FRAME };
|
||||
|
||||
// Consum de hotkeys pròpies (T, E, H, ESC). Modifica `mode_` / `picker_`.
|
||||
// Es crida al principi d'`update` perquè altres handlers no vegin
|
||||
@@ -100,6 +104,7 @@ class Editor {
|
||||
void updateHand(const Tilemap& tilemap, EntityManager& entities, int canvas_x, int canvas_y);
|
||||
void updateTilePicker(const Tilemap& tilemap, int canvas_x, int canvas_y);
|
||||
void updateEntityPicker(int canvas_x, int canvas_y);
|
||||
void updateEntityFramePicker(int canvas_x, int canvas_y);
|
||||
|
||||
// Intent de col·locació segons brush_entity_ a la cel·la del cursor.
|
||||
// Construeix un node spawn sintètic, fa el snap concret per tipus
|
||||
@@ -138,6 +143,7 @@ class Editor {
|
||||
|
||||
void renderTilePicker(const Tilemap& tilemap) const;
|
||||
void renderEntityPicker(const Tilemap& tilemap) const;
|
||||
void renderEntityFramePicker() const;
|
||||
|
||||
bool active_{false};
|
||||
Mode mode_{Mode::TILE};
|
||||
@@ -153,21 +159,22 @@ class Editor {
|
||||
int tile_picker_scroll_{0};
|
||||
int tile_picker_hover_{-1};
|
||||
|
||||
// Brush actiu per Mode::ENTITY (nom registrat al factory; "" = cap).
|
||||
std::string brush_entity_;
|
||||
// Estat de l'EntityPicker.
|
||||
int entity_picker_scroll_{0};
|
||||
int entity_picker_hover_{-1}; // Índex a la llista de noms.
|
||||
|
||||
// Entrada editable del picker. Cada item recorda el nom (clau de
|
||||
// factory + YAML), el surface del sprite (frame 0 com a icona) i la
|
||||
// mida de cada frame al GIF — necessària per clipar el primer frame
|
||||
// quan el GIF és un strip multi-frame.
|
||||
// - `frame_count` és el nombre total de sub-sprites del atlas
|
||||
// (cols × rows segons les dimensions del surface i del frame).
|
||||
// - `has_variants` és `true` quan el template declara `editable_variants:
|
||||
// true` i hi ha més d'un frame: aleshores clicar al picker obre el
|
||||
// sub-picker de frames en lloc de fixar el brush directament.
|
||||
struct EditableEntity {
|
||||
std::string name;
|
||||
std::shared_ptr<Surface> sprite;
|
||||
int frame_w{0};
|
||||
int frame_h{0};
|
||||
int frame_count{1};
|
||||
bool has_variants{false};
|
||||
};
|
||||
|
||||
// Construïda lazy al primer enter() i preservada entre sessions:
|
||||
@@ -178,6 +185,23 @@ class Editor {
|
||||
|
||||
std::vector<EditableEntity> editable_entities_;
|
||||
|
||||
// Brush actiu per Mode::ENTITY (nom registrat al factory; "" = cap).
|
||||
std::string brush_entity_;
|
||||
// Frame escollit per al brush actiu (-1 = no aplicable: entitat sense
|
||||
// variants o brush encara per fixar). El emet el sub-picker en clicar
|
||||
// un frame; `tryPlaceEntity` el passa al spawn YAML com a `frame: N`.
|
||||
int brush_entity_frame_{-1};
|
||||
// Estat de l'EntityPicker.
|
||||
int entity_picker_scroll_{0};
|
||||
int entity_picker_hover_{-1}; // Índex a la llista de noms.
|
||||
// Estat del sub-picker de frames. `entity_frame_picker_source_` apunta
|
||||
// a la entitat activa (vista al EntityPicker) per a la qual el
|
||||
// sub-picker mostra les variants. Quan el sub-picker es tanca sense
|
||||
// selecció, ho deixem a nullptr i `brush_entity_frame_ = -1`.
|
||||
int entity_frame_picker_scroll_{0};
|
||||
int entity_frame_picker_hover_{-1};
|
||||
const EditableEntity* entity_frame_picker_source_{nullptr};
|
||||
|
||||
// Font compartida amb el Notifier/HUD: el surface el carrega Director
|
||||
// a l'arrencada, ací només prenem la referència del cache. shared_ptr
|
||||
// perquè `Text` accepta el surface per shared_ptr i així no copiem.
|
||||
|
||||
Reference in new issue
Block a user