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:
17 // ========================================================================
18 // BaseEntityHandler interface
19 // ========================================================================
20
21 void BeginPlacement() override;
22 void CancelPlacement() override { sprite_placement_mode_ = false; }
23 bool IsPlacementActive() const override { return sprite_placement_mode_; }
24
25 bool HandleClick(int canvas_x, int canvas_y) override;
26 void HandleDrag(ImVec2 current_pos, ImVec2 delta) override;
27 void HandleRelease() override;
28
29 void DrawGhostPreview() override;
30 void DrawSelectionHighlight() override;
31
32 std::optional<size_t> GetEntityAtPosition(int canvas_x,
33 int canvas_y) const override;
34
35 // ========================================================================
36 // Sprite-specific methods
37 // ========================================================================
38
42 void SetSpriteId(uint8_t id) { preview_sprite_id_ = id; }
43
47 uint8_t GetSpriteId() const { return preview_sprite_id_; }
48
52 void SelectSprite(size_t index);
53
57 void ClearSelection();
58
62 bool HasSelection() const { return selected_sprite_index_.has_value(); }
63
67 std::optional<size_t> GetSelectedIndex() const { return selected_sprite_index_; }
68
72 void DeleteSelected();
73
74 private:
75 // Placement state
77 uint8_t preview_sprite_id_ = 0;
78
79 // Selection state
80 std::optional<size_t> selected_sprite_index_;
81 bool is_dragging_ = false;
84
88 void PlaceSpriteAtPosition(int canvas_x, int canvas_y);
89
93 std::pair<int, int> CanvasToSpriteCoords(int canvas_x, int canvas_y) const;
94};
95
96} // namespace editor
97} // namespace yaze
98
99#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.
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.
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.