yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite_interaction_handler.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_INTERACTION_SPRITE_INTERACTION_HANDLER_H_
2#define YAZE_APP_EDITOR_DUNGEON_INTERACTION_SPRITE_INTERACTION_HANDLER_H_
3
7
8namespace yaze {
9namespace editor {
10
17 public:
20 kNone = 0,
23 };
24
25 // ========================================================================
26 // BaseEntityHandler interface
27 // ========================================================================
28
29 void BeginPlacement() override;
30 void CancelPlacement() override { sprite_placement_mode_ = false; }
31 bool IsPlacementActive() const override { return sprite_placement_mode_; }
32
33 bool HandleClick(int canvas_x, int canvas_y) override;
34 void HandleDrag(ImVec2 current_pos, ImVec2 delta) override;
35 void HandleRelease() override;
36
37 void DrawGhostPreview() override;
38 void DrawSelectionHighlight() override;
39
40 std::optional<size_t> GetEntityAtPosition(int canvas_x,
41 int canvas_y) const override;
42
43 // ========================================================================
44 // Sprite-specific methods
45 // ========================================================================
46
50 void SetSpriteId(uint8_t id) { preview_sprite_id_ = id; }
51
55 uint8_t GetSpriteId() const { return preview_sprite_id_; }
56
60 void SelectSprite(size_t index);
61
65 void ClearSelection();
66
70 bool HasSelection() const { return selected_sprite_index_.has_value(); }
71
75 std::optional<size_t> GetSelectedIndex() const {
77 }
78
82 void DeleteSelected();
83 void DeleteAll();
84 bool NudgeSelected(int delta_x, int delta_y);
85
97
98 private:
99 // Placement state
103
104 // Selection state
105 std::optional<size_t> selected_sprite_index_;
106 bool is_dragging_ = false;
109
113 void PlaceSpriteAtPosition(int canvas_x, int canvas_y);
114
118 std::pair<int, int> CanvasToSpriteCoords(int canvas_x, int canvas_y) const;
119};
120
121} // namespace editor
122} // namespace yaze
123
124#endif // YAZE_APP_EDITOR_DUNGEON_INTERACTION_SPRITE_INTERACTION_HANDLER_H_
Abstract base class for entity interaction handlers.
Handles sprite placement and interaction in the dungeon editor.
GhostCapacityState GetPlacementGhostCapacityState() const
bool IsPlacementActive() const override
Check if placement mode is active.
void PlaceSpriteAtPosition(int canvas_x, int canvas_y)
Place sprite at position.
uint8_t GetSpriteId() const
Get current sprite ID for placement.
void CancelPlacement() override
Cancel current placement.
void HandleRelease() override
Handle mouse release.
PlacementBlockReason placement_block_reason() const
void SelectSprite(size_t index)
Select sprite at index.
bool HasSelection() const
Check if a sprite is selected.
std::optional< size_t > GetEntityAtPosition(int canvas_x, int canvas_y) const override
Get entity at canvas position.
void DrawGhostPreview() override
Draw ghost preview during placement.
bool was_placement_blocked() const
True if the most recent PlaceSpriteAtPosition was blocked.
void DrawSelectionHighlight() override
Draw selection highlight for selected entities.
void HandleDrag(ImVec2 current_pos, ImVec2 delta) override
Handle mouse drag.
bool HandleClick(int canvas_x, int canvas_y) override
Handle mouse click at canvas position.
std::optional< size_t > GetSelectedIndex() const
Get selected sprite index.
void SetSpriteId(uint8_t id)
Set sprite ID for placement.
std::pair< int, int > CanvasToSpriteCoords(int canvas_x, int canvas_y) const
Convert canvas to sprite coordinates (16-pixel grid)
void BeginPlacement() override
Begin placement mode.