Handles pot item placement and interaction in the dungeon editor. More...
#include <item_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 | SetItemId (uint8_t id) |
| Set item ID for placement. | |
| uint8_t | GetItemId () const |
| Get current item ID for placement. | |
| void | SelectItem (size_t index) |
| Select item at index. | |
| void | ClearSelection () |
| Clear item selection. | |
| bool | HasSelection () const |
| Check if an item is selected. | |
| std::optional< size_t > | GetSelectedIndex () const |
| Get selected item index. | |
| void | DeleteSelected () |
| Delete selected item. | |
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 | PlaceItemAtPosition (int canvas_x, int canvas_y) |
| Place item at position. | |
Private Attributes | |
| bool | item_placement_mode_ = false |
| uint8_t | preview_item_id_ = 0 |
| std::optional< size_t > | selected_item_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 pot item placement and interaction in the dungeon editor.
Pot items use a special position encoding and snap to an 8-pixel grid.
Definition at line 15 of file item_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 item_interaction_handler.cc.
References ClearSelection(), and item_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 item_interaction_handler.h.
References item_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 item_interaction_handler.h.
References item_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 item_interaction_handler.cc.
References ClearSelection(), drag_current_pos_, drag_start_pos_, GetEntityAtPosition(), yaze::editor::BaseEntityHandler::HasValidContext(), is_dragging_, item_placement_mode_, PlaceItemAtPosition(), and SelectItem().
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 item_interaction_handler.cc.
References drag_current_pos_, is_dragging_, and selected_item_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 item_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, drag_current_pos_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::BaseEntityHandler::GetCurrentRoom(), is_dragging_, yaze::editor::InteractionContext::NotifyEntityChanged(), yaze::editor::InteractionContext::NotifyMutation(), and selected_item_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 89 of file item_interaction_handler.cc.
References yaze::editor::InteractionContext::canvas, yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::BaseEntityHandler::HasValidContext(), item_placement_mode_, yaze::editor::dungeon_coords::kTileSize, and preview_item_id_.
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 128 of file item_interaction_handler.cc.
References 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::kTileSize, and selected_item_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 177 of file item_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::InteractionContext::GetCurrentRoomConst(), and yaze::editor::BaseEntityHandler::HasValidContext().
Referenced by HandleClick().

|
inline |
Set item ID for placement.
Definition at line 42 of file item_interaction_handler.h.
References preview_item_id_.
|
inline |
Get current item ID for placement.
Definition at line 47 of file item_interaction_handler.h.
References preview_item_id_.
| void yaze::editor::ItemInteractionHandler::SelectItem | ( | size_t | index | ) |
Select item at index.
Definition at line 207 of file item_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::InteractionContext::NotifyEntityChanged(), and selected_item_index_.
Referenced by HandleClick().

| void yaze::editor::ItemInteractionHandler::ClearSelection | ( | ) |
Clear item selection.
Definition at line 212 of file item_interaction_handler.cc.
References is_dragging_, and selected_item_index_.
Referenced by BeginPlacement(), yaze::editor::InteractionCoordinator::ClearAllEntitySelections(), DeleteSelected(), and HandleClick().
|
inline |
Check if an item is selected.
Definition at line 62 of file item_interaction_handler.h.
References selected_item_index_.
Referenced by yaze::editor::InteractionCoordinator::DeleteSelectedEntity(), yaze::editor::InteractionCoordinator::GetSelectedEntityType(), yaze::editor::InteractionCoordinator::HandleDrag(), and yaze::editor::InteractionCoordinator::HasEntitySelection().
|
inline |
Get selected item index.
Definition at line 67 of file item_interaction_handler.h.
References selected_item_index_.
| void yaze::editor::ItemInteractionHandler::DeleteSelected | ( | ) |
Delete selected item.
Definition at line 217 of file item_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_item_index_.
Referenced by yaze::editor::InteractionCoordinator::DeleteSelectedEntity().
|
private |
Place item at position.
Definition at line 233 of file item_interaction_handler.cc.
References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::BaseEntityHandler::GetCanvasScale(), yaze::editor::BaseEntityHandler::GetCurrentRoom(), yaze::editor::BaseEntityHandler::HasValidContext(), yaze::zelda3::PotItem::item, yaze::editor::InteractionContext::NotifyInvalidateCache(), yaze::editor::InteractionContext::NotifyMutation(), yaze::zelda3::PotItem::position, and preview_item_id_.
Referenced by HandleClick().
|
private |
Definition at line 76 of file item_interaction_handler.h.
Referenced by BeginPlacement(), CancelPlacement(), DrawGhostPreview(), HandleClick(), and IsPlacementActive().
|
private |
Definition at line 77 of file item_interaction_handler.h.
Referenced by DrawGhostPreview(), GetItemId(), PlaceItemAtPosition(), and SetItemId().
|
private |
Definition at line 80 of file item_interaction_handler.h.
Referenced by ClearSelection(), DeleteSelected(), DrawSelectionHighlight(), GetSelectedIndex(), HandleDrag(), HandleRelease(), HasSelection(), and SelectItem().
|
private |
Definition at line 81 of file item_interaction_handler.h.
Referenced by ClearSelection(), DrawSelectionHighlight(), HandleClick(), HandleDrag(), and HandleRelease().
|
private |
Definition at line 82 of file item_interaction_handler.h.
Referenced by HandleClick().
|
private |
Definition at line 83 of file item_interaction_handler.h.
Referenced by DrawSelectionHighlight(), HandleClick(), HandleDrag(), and HandleRelease().