feat(editor): mode mà — selecció, mou, borra i marc d'entitats
This commit is contained in:
1 parent
9b09ccb765
commit
b4e36944d7
5 files changed
+182
-9
No files matched your search
@@ -7,6 +7,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class Entity;
|
||||
class EntityManager;
|
||||
class Surface;
|
||||
class Tilemap;
|
||||
@@ -56,7 +57,9 @@ class Editor {
|
||||
|
||||
// Pinta el border blau i, segons mode i picker, brush preview, marc
|
||||
// d'entitat seleccionada o el picker. No-op si no actiu.
|
||||
void render(const Tilemap& tilemap) const;
|
||||
// `entities` és necessari per al marc d'entitat hovered/seleccionada
|
||||
// en Mode::HAND; en altres modes no s'usa.
|
||||
void render(const Tilemap& tilemap, const EntityManager& entities) const;
|
||||
|
||||
private:
|
||||
// Mode del cursor: determina què fa el clic esquerre sobre el mapa.
|
||||
@@ -95,6 +98,24 @@ class Editor {
|
||||
// o el snap no és vàlid. Retorna true si s'ha col·locat.
|
||||
auto tryPlaceEntity(EntityManager& entities) -> bool;
|
||||
|
||||
// Mou l'entitat seleccionada a la cel·la del cursor: borra l'antiga
|
||||
// i crida `addSpawn` amb la nova posició. Reusa la mateixa lògica
|
||||
// de snap/solapament que la col·locació nova, excloent l'entitat
|
||||
// que es mou del check de solapament.
|
||||
auto tryMoveSelected(EntityManager& entities) const -> bool;
|
||||
|
||||
// Sub-handlers de `updateHand`. Aïllats per mantenir baixa la
|
||||
// complexitat cognitiva del bucle d'esdeveniments.
|
||||
void handleHandLeftClick(EntityManager& entities);
|
||||
void handleHandRightClick();
|
||||
|
||||
// Borra l'entitat seleccionada. La validació de constraints
|
||||
// (1 puerta, ≥1 sarc) es fa al pas 8.
|
||||
void deleteSelected(EntityManager& entities);
|
||||
|
||||
// Render del marc d'una entitat: 1 px sobre el seu pixel_rect.
|
||||
static void renderEntityFrame(const Entity& e, std::uint32_t argb);
|
||||
|
||||
void renderTilePicker(const Tilemap& tilemap) const;
|
||||
void renderEntityPicker(const Tilemap& tilemap) const;
|
||||
|
||||
@@ -137,7 +158,12 @@ class Editor {
|
||||
|
||||
std::vector<EditableEntity> editable_entities_;
|
||||
|
||||
// Selecció en Mode::HAND (índex dins de l'EntityManager; -1 = cap).
|
||||
// Selecció en Mode::HAND. Treballem amb índexs sobre el snapshot de
|
||||
// `EntityManager::getEntities()` perquè és el que ens dóna l'API
|
||||
// pública. Després de cada mutació (move/delete) ho recalculem; com
|
||||
// que l'editor congela el joc, el snapshot només canvia per accions
|
||||
// pròpies.
|
||||
int hand_hover_idx_{-1};
|
||||
int hand_selected_idx_{-1};
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user