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
6
7namespace yaze {
8namespace editor {
9
16 public:
18 kNone = 0,
21 };
22
23 // ========================================================================
24 // BaseEntityHandler interface
25 // ========================================================================
26
27 void BeginPlacement() override;
28 void CancelPlacement() override { sprite_placement_mode_ = false; }
29 bool IsPlacementActive() const override { return sprite_placement_mode_; }
30
31 bool HandleClick(int canvas_x, int canvas_y) override;
32 void HandleDrag(ImVec2 current_pos, ImVec2 delta) override;
33 void HandleRelease() override;
34
35 void DrawGhostPreview() override;
36 void DrawSelectionHighlight() override;
37
38 std::optional<size_t> GetEntityAtPosition(int canvas_x,
39 int canvas_y) const override;
40
41 // ========================================================================
42 // Sprite-specific methods
43 // ========================================================================
44
48 void SetSpriteId(uint8_t id) { preview_sprite_id_ = id; }
49
53 uint8_t GetSpriteId() const { return preview_sprite_id_; }
54
58 void SelectSprite(size_t index);
59
63 void ClearSelection();
64
68 bool HasSelection() const { return selected_sprite_index_.has_value(); }
69
73 std::optional<size_t> GetSelectedIndex() const { return selected_sprite_index_; }
74
78 void DeleteSelected();
79
90
91 private:
92 // Placement state
94 uint8_t preview_sprite_id_ = 0;
96
97 // Selection state
98 std::optional<size_t> selected_sprite_index_;
99 bool is_dragging_ = false;
102
106 void PlaceSpriteAtPosition(int canvas_x, int canvas_y);
107
111 std::pair<int, int> CanvasToSpriteCoords(int canvas_x, int canvas_y) const;
112};
113
114} // namespace editor
115} // namespace yaze
116
117#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.
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.