Handles sprite placement and interaction in the dungeon editor. More...
#include <sprite_interaction_handler.h>
Public Member Functions | |
| void | BeginPlacement () override |
| Begin placement mode. | |
| void | CancelPlacement () override |
| Cancel current placement. | |
| bool | IsPlacementActive () const override |
| Check if placement mode is active. | |
| bool | HandleClick (int canvas_x, int canvas_y) override |
| Handle mouse click at canvas position. | |
| void | HandleDrag (ImVec2 current_pos, ImVec2 delta) override |
| Handle mouse drag. | |
| void | HandleRelease () override |
| Handle mouse release. | |
| void | DrawGhostPreview () override |
| Draw ghost preview during placement. | |
| void | DrawSelectionHighlight () override |
| Draw selection highlight for selected entities. | |
| std::optional< size_t > | GetEntityAtPosition (int canvas_x, int canvas_y) const override |
| Get entity at canvas position. | |
| void | SetSpriteId (uint8_t id) |
| Set sprite ID for placement. | |
| uint8_t | GetSpriteId () const |
| Get current sprite ID for placement. | |
| void | SelectSprite (size_t index) |
| Select sprite at index. | |
| void | ClearSelection () |
| Clear sprite selection. | |
| bool | HasSelection () const |
| Check if a sprite is selected. | |
| std::optional< size_t > | GetSelectedIndex () const |
| Get selected sprite index. | |
| void | DeleteSelected () |
| Delete selected sprite. | |
Public Member Functions inherited from yaze::editor::BaseEntityHandler | |
| virtual | ~BaseEntityHandler ()=default |
| void | SetContext (InteractionContext *ctx) |
| Set the interaction context. | |
| InteractionContext * | context () const |
| Get the interaction context. | |
Private Member Functions | |
| void | PlaceSpriteAtPosition (int canvas_x, int canvas_y) |
| Place sprite at position. | |
| std::pair< int, int > | CanvasToSpriteCoords (int canvas_x, int canvas_y) const |
| Convert canvas to sprite coordinates (16-pixel grid) | |
Private Attributes | |
| bool | sprite_placement_mode_ = false |
| uint8_t | preview_sprite_id_ = 0 |
| std::optional< size_t > | selected_sprite_index_ |
| bool | is_dragging_ = false |
| ImVec2 | drag_start_pos_ |
| ImVec2 | drag_current_pos_ |
Additional Inherited Members | |
Protected Member Functions inherited from yaze::editor::BaseEntityHandler | |
| std::pair< int, int > | RoomToCanvas (int room_x, int room_y) const |
| Convert room tile coordinates to canvas pixel coordinates. | |
| std::pair< int, int > | CanvasToRoom (int canvas_x, int canvas_y) const |
| Convert canvas pixel coordinates to room tile coordinates. | |
| bool | IsWithinBounds (int canvas_x, int canvas_y) const |
| Check if coordinates are within room bounds. | |
| ImVec2 | GetCanvasZeroPoint () const |
| Get canvas zero point (for screen coordinate conversion) | |
| float | GetCanvasScale () const |
| Get canvas global scale. | |
| bool | HasValidContext () const |
| Check if context is valid. | |
| zelda3::Room * | GetCurrentRoom () const |
| Get current room (convenience method) | |
Protected Attributes inherited from yaze::editor::BaseEntityHandler | |
| InteractionContext * | ctx_ = nullptr |
Handles sprite placement and interaction in the dungeon editor.
Sprites use a 16-pixel coordinate system (0-31 range for each axis).
Definition at line 15 of file sprite_interaction_handler.h.
|
overridevirtual |
Begin placement mode.
Called when user selects an entity to place from the palette. Override to initialize placement state.
Implements yaze::editor::BaseEntityHandler.
Definition at line 16 of file sprite_interaction_handler.cc.
References ClearSelection(), and sprite_placement_mode_.
Referenced by yaze::editor::InteractionCoordinator::SetMode().
|
inlineoverridevirtual |
Cancel current placement.
Called when user presses Escape or switches modes. Override to clean up placement state.
Implements yaze::editor::BaseEntityHandler.
Definition at line 22 of file sprite_interaction_handler.h.
References sprite_placement_mode_.
Referenced by yaze::editor::InteractionCoordinator::CancelCurrentMode().
|
inlineoverridevirtual |
Check if placement mode is active.
Implements yaze::editor::BaseEntityHandler.
Definition at line 23 of file sprite_interaction_handler.h.
References sprite_placement_mode_.
Referenced by yaze::editor::InteractionCoordinator::DrawGhostPreviews(), yaze::editor::InteractionCoordinator::HandleClick(), and yaze::editor::InteractionCoordinator::IsPlacementActive().
|
overridevirtual |
Handle mouse click at canvas position.
| canvas_x | Unscaled X position relative to canvas origin |
| canvas_y | Unscaled Y position relative to canvas origin |
Implements yaze::editor::BaseEntityHandler.
Definition at line 21 of file sprite_interaction_handler.cc.
References ClearSelection(), drag_current_pos_, drag_start_pos_, GetEntityAtPosition(), yaze::editor::BaseEntityHandler::HasValidContext(), is_dragging_, PlaceSpriteAtPosition(), SelectSprite(), and sprite_placement_mode_.
Referenced by yaze::editor::InteractionCoordinator::HandleClick(), and yaze::editor::InteractionCoordinator::TrySelectEntityAtCursor().
|
overridevirtual |
Handle mouse drag.
| current_pos | Current mouse position (screen coords) |
| delta | Mouse movement since last frame |
Implements yaze::editor::BaseEntityHandler.
Definition at line 44 of file sprite_interaction_handler.cc.
References drag_current_pos_, is_dragging_, and selected_sprite_index_.
Referenced by yaze::editor::InteractionCoordinator::HandleDrag().
|
overridevirtual |
Handle mouse release.
Called when left mouse button is released after a drag.
Implements yaze::editor::BaseEntityHandler.
Definition at line 49 of file sprite_interaction_handler.cc.
References CanvasToSpriteCoords(), yaze::editor::BaseEntityHandler::ctx_, drag_current_pos_, yaze::editor::BaseEntityHandler::GetCurrentRoom(), is_dragging_, yaze::editor::dungeon_coords::kSpriteGridMax, yaze::editor::InteractionContext::NotifyEntityChanged(), yaze::editor::InteractionContext::NotifyMutation(), and selected_sprite_index_.
Referenced by yaze::editor::InteractionCoordinator::HandleRelease().
|
overridevirtual |
Draw ghost preview during placement.
Called every frame when placement mode is active. Shows preview of entity at cursor position.
Implements yaze::editor::BaseEntityHandler.
Definition at line 83 of file sprite_interaction_handler.cc.
References yaze::editor::InteractionContext::canvas, yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::BaseEntityHandler::HasValidContext(), yaze::editor::dungeon_coords::kSpriteTileSize, preview_sprite_id_, and sprite_placement_mode_.
Referenced by yaze::editor::InteractionCoordinator::DrawGhostPreviews().
|
overridevirtual |
Draw selection highlight for selected entities.
Called every frame to show selection state.
Implements yaze::editor::BaseEntityHandler.
Definition at line 123 of file sprite_interaction_handler.cc.
References CanvasToSpriteCoords(), drag_current_pos_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::BaseEntityHandler::GetCanvasZeroPoint(), yaze::editor::BaseEntityHandler::GetCurrentRoom(), yaze::editor::BaseEntityHandler::HasValidContext(), is_dragging_, yaze::editor::dungeon_coords::kSpriteGridMax, yaze::editor::dungeon_coords::kSpriteTileSize, and selected_sprite_index_.
Referenced by yaze::editor::InteractionCoordinator::DrawSelectionHighlights().
|
overridevirtual |
Get entity at canvas position.
| canvas_x | Unscaled X position relative to canvas origin |
| canvas_y | Unscaled Y position relative to canvas origin |
Implements yaze::editor::BaseEntityHandler.
Definition at line 176 of file sprite_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::InteractionContext::GetCurrentRoomConst(), yaze::editor::BaseEntityHandler::HasValidContext(), and yaze::editor::dungeon_coords::kSpriteTileSize.
Referenced by HandleClick().
|
inline |
Set sprite ID for placement.
Definition at line 42 of file sprite_interaction_handler.h.
References preview_sprite_id_.
|
inline |
Get current sprite ID for placement.
Definition at line 47 of file sprite_interaction_handler.h.
References preview_sprite_id_.
| void yaze::editor::SpriteInteractionHandler::SelectSprite | ( | size_t | index | ) |
Select sprite at index.
Definition at line 209 of file sprite_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::InteractionContext::NotifyEntityChanged(), and selected_sprite_index_.
Referenced by HandleClick().
| void yaze::editor::SpriteInteractionHandler::ClearSelection | ( | ) |
Clear sprite selection.
Definition at line 214 of file sprite_interaction_handler.cc.
References is_dragging_, and selected_sprite_index_.
Referenced by BeginPlacement(), yaze::editor::InteractionCoordinator::ClearAllEntitySelections(), DeleteSelected(), and HandleClick().
|
inline |
Check if a sprite is selected.
Definition at line 62 of file sprite_interaction_handler.h.
References selected_sprite_index_.
Referenced by yaze::editor::InteractionCoordinator::DeleteSelectedEntity(), yaze::editor::InteractionCoordinator::GetSelectedEntityType(), yaze::editor::InteractionCoordinator::HandleDrag(), and yaze::editor::InteractionCoordinator::HasEntitySelection().
|
inline |
Get selected sprite index.
Definition at line 67 of file sprite_interaction_handler.h.
References selected_sprite_index_.
| void yaze::editor::SpriteInteractionHandler::DeleteSelected | ( | ) |
Delete selected sprite.
Definition at line 219 of file sprite_interaction_handler.cc.
References ClearSelection(), yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCurrentRoom(), yaze::editor::BaseEntityHandler::HasValidContext(), yaze::editor::InteractionContext::NotifyInvalidateCache(), yaze::editor::InteractionContext::NotifyMutation(), and selected_sprite_index_.
Referenced by yaze::editor::InteractionCoordinator::DeleteSelectedEntity().
|
private |
Place sprite at position.
Definition at line 235 of file sprite_interaction_handler.cc.
References CanvasToSpriteCoords(), yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCurrentRoom(), yaze::editor::BaseEntityHandler::HasValidContext(), yaze::editor::dungeon_coords::kSpriteGridMax, yaze::editor::InteractionContext::NotifyInvalidateCache(), yaze::editor::InteractionContext::NotifyMutation(), and preview_sprite_id_.
Referenced by HandleClick().
|
private |
Convert canvas to sprite coordinates (16-pixel grid)
Definition at line 260 of file sprite_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::GetCanvasScale(), and yaze::editor::dungeon_coords::kSpriteTileSize.
Referenced by DrawSelectionHighlight(), HandleRelease(), and PlaceSpriteAtPosition().
|
private |
Definition at line 76 of file sprite_interaction_handler.h.
Referenced by BeginPlacement(), CancelPlacement(), DrawGhostPreview(), HandleClick(), and IsPlacementActive().
|
private |
Definition at line 77 of file sprite_interaction_handler.h.
Referenced by DrawGhostPreview(), GetSpriteId(), PlaceSpriteAtPosition(), and SetSpriteId().
|
private |
Definition at line 80 of file sprite_interaction_handler.h.
Referenced by ClearSelection(), DeleteSelected(), DrawSelectionHighlight(), GetSelectedIndex(), HandleDrag(), HandleRelease(), HasSelection(), and SelectSprite().
|
private |
Definition at line 81 of file sprite_interaction_handler.h.
Referenced by ClearSelection(), DrawSelectionHighlight(), HandleClick(), HandleDrag(), and HandleRelease().
|
private |
Definition at line 82 of file sprite_interaction_handler.h.
Referenced by HandleClick().
|
private |
Definition at line 83 of file sprite_interaction_handler.h.
Referenced by DrawSelectionHighlight(), HandleClick(), HandleDrag(), and HandleRelease().