yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::editor::ItemInteractionHandler Class Reference

Handles pot item placement and interaction in the dungeon editor. More...

#include <item_interaction_handler.h>

Inheritance diagram for yaze::editor::ItemInteractionHandler:
Collaboration diagram for yaze::editor::ItemInteractionHandler:

Public Types

using ItemPlacementPreflight
 

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.
 
void DeleteAll ()
 
bool NudgeSelected (int delta_pixel_x, int delta_pixel_y)
 
bool MutateItemType (size_t index, uint8_t new_type)
 Change one pot item's raw type byte in place.
 
bool UpdateItem (size_t index, uint8_t type, int pixel_x, int pixel_y)
 
void SetItemPlacementPreflight (ItemPlacementPreflight preflight)
 
void SetMutationErrorCallback (std::function< void(const absl::Status &)> callback)
 
const absl::Status & mutation_status () const
 
- 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.
 
virtual bool HandleMouseWheel (float delta)
 
void DrawPostPlacementToast ()
 

Private Member Functions

bool PreflightPlacement (const std::vector< zelda3::PotItem > &candidate)
 
void PlaceItemAtPosition (int canvas_x, int canvas_y)
 Place item at position.
 

Private Attributes

ItemPlacementPreflight item_placement_preflight_
 
std::function< void(const absl::Status &) mutation_error_callback_ )
 
absl::Status mutation_status_ = absl::OkStatus()
 
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
void TriggerSuccessToast ()
 
void DrawSuccessToastOverlay (const char *msg, ImU32 color) const
 
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)
 
DungeonCanvasTransform GetCanvasTransform () const
 
std::optional< ImVec2 > GetPointerScreenPosition () const
 
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
 
float toast_expire_time_ = 0.0f
 
- Static Protected Attributes inherited from yaze::editor::BaseEntityHandler
static constexpr float kToastDuration = 1.5f
 

Detailed Description

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 19 of file item_interaction_handler.h.

Member Typedef Documentation

◆ ItemPlacementPreflight

Initial value:
std::function<absl::Status(
int room_id, const std::vector<zelda3::PotItem>& candidate)>

Definition at line 93 of file item_interaction_handler.h.

Member Function Documentation

◆ BeginPlacement()

void yaze::editor::ItemInteractionHandler::BeginPlacement ( )
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 17 of file item_interaction_handler.cc.

References ClearSelection(), item_placement_mode_, and mutation_status_.

Referenced by yaze::editor::InteractionCoordinator::SetMode().

Here is the call graph for this function:

◆ CancelPlacement()

void yaze::editor::ItemInteractionHandler::CancelPlacement ( )
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 26 of file item_interaction_handler.h.

References item_placement_mode_.

Referenced by yaze::editor::InteractionCoordinator::CancelCurrentMode(), and yaze::editor::InteractionCoordinator::CancelPlacement().

◆ IsPlacementActive()

bool yaze::editor::ItemInteractionHandler::IsPlacementActive ( ) const
inlineoverridevirtual

◆ HandleClick()

bool yaze::editor::ItemInteractionHandler::HandleClick ( int canvas_x,
int canvas_y )
overridevirtual

Handle mouse click at canvas position.

Parameters
canvas_xUnscaled X position relative to canvas origin
canvas_yUnscaled Y position relative to canvas origin
Returns
true if click was handled by this handler

Implements yaze::editor::BaseEntityHandler.

Definition at line 23 of file item_interaction_handler.cc.

References ClearSelection(), drag_current_pos_, drag_start_pos_, GetEntityAtPosition(), yaze::editor::BaseEntityHandler::HasValidContext(), is_dragging_, yaze::editor::BaseEntityHandler::IsWithinBounds(), item_placement_mode_, PlaceItemAtPosition(), and SelectItem().

Referenced by yaze::editor::InteractionCoordinator::HandleClick(), and yaze::editor::InteractionCoordinator::TrySelectEntityAtCursor().

◆ HandleDrag()

void yaze::editor::ItemInteractionHandler::HandleDrag ( ImVec2 current_pos,
ImVec2 delta )
overridevirtual

Handle mouse drag.

Parameters
current_posCurrent unscaled room-pixel position
deltaMouse movement since last frame (screen pixels)

Implements yaze::editor::BaseEntityHandler.

Definition at line 49 of file item_interaction_handler.cc.

References drag_current_pos_, is_dragging_, and selected_item_index_.

Referenced by yaze::editor::InteractionCoordinator::HandleDrag().

◆ HandleRelease()

◆ DrawGhostPreview()

◆ DrawSelectionHighlight()

◆ GetEntityAtPosition()

std::optional< size_t > yaze::editor::ItemInteractionHandler::GetEntityAtPosition ( int canvas_x,
int canvas_y ) const
overridevirtual

Get entity at canvas position.

Parameters
canvas_xUnscaled X position relative to canvas origin
canvas_yUnscaled Y position relative to canvas origin
Returns
Entity index if found, nullopt otherwise

Implements yaze::editor::BaseEntityHandler.

Definition at line 190 of file item_interaction_handler.cc.

References yaze::editor::BaseEntityHandler::ctx_, yaze::editor::InteractionContext::GetCurrentRoomConst(), yaze::zelda3::Room::GetPotItems(), yaze::editor::BaseEntityHandler::HasValidContext(), and yaze::editor::BaseEntityHandler::IsWithinBounds().

Referenced by yaze::editor::InteractionCoordinator::GetEntitiesAtPosition(), and HandleClick().

Here is the call graph for this function:

◆ SetItemId()

void yaze::editor::ItemInteractionHandler::SetItemId ( uint8_t id)
inline

Set item ID for placement.

Definition at line 46 of file item_interaction_handler.h.

References preview_item_id_.

◆ GetItemId()

uint8_t yaze::editor::ItemInteractionHandler::GetItemId ( ) const
inline

Get current item ID for placement.

Definition at line 51 of file item_interaction_handler.h.

References preview_item_id_.

Referenced by yaze::editor::ItemEditorPanel::DrawPlacementControls().

◆ SelectItem()

◆ ClearSelection()

◆ HasSelection()

bool yaze::editor::ItemInteractionHandler::HasSelection ( ) const
inline

◆ GetSelectedIndex()

std::optional< size_t > yaze::editor::ItemInteractionHandler::GetSelectedIndex ( ) const
inline

◆ DeleteSelected()

◆ DeleteAll()

◆ NudgeSelected()

◆ MutateItemType()

bool yaze::editor::ItemInteractionHandler::MutateItemType ( size_t index,
uint8_t new_type )

◆ UpdateItem()

◆ SetItemPlacementPreflight()

void yaze::editor::ItemInteractionHandler::SetItemPlacementPreflight ( ItemPlacementPreflight preflight)
inline

◆ SetMutationErrorCallback()

void yaze::editor::ItemInteractionHandler::SetMutationErrorCallback ( std::function< void(const absl::Status &)> callback)
inline

Definition at line 98 of file item_interaction_handler.h.

References mutation_error_callback_.

◆ mutation_status()

const absl::Status & yaze::editor::ItemInteractionHandler::mutation_status ( ) const
inline

Definition at line 102 of file item_interaction_handler.h.

References mutation_status_.

◆ PreflightPlacement()

bool yaze::editor::ItemInteractionHandler::PreflightPlacement ( const std::vector< zelda3::PotItem > & candidate)
private

◆ PlaceItemAtPosition()

Member Data Documentation

◆ item_placement_preflight_

ItemPlacementPreflight yaze::editor::ItemInteractionHandler::item_placement_preflight_
private

Definition at line 105 of file item_interaction_handler.h.

Referenced by PreflightPlacement(), and SetItemPlacementPreflight().

◆ mutation_error_callback_

std::function<void(const absl::Status&) yaze::editor::ItemInteractionHandler::mutation_error_callback_)
private

Definition at line 106 of file item_interaction_handler.h.

Referenced by PreflightPlacement(), and SetMutationErrorCallback().

◆ mutation_status_

absl::Status yaze::editor::ItemInteractionHandler::mutation_status_ = absl::OkStatus()
private

◆ item_placement_mode_

bool yaze::editor::ItemInteractionHandler::item_placement_mode_ = false
private

◆ preview_item_id_

uint8_t yaze::editor::ItemInteractionHandler::preview_item_id_ = 0
private

◆ selected_item_index_

std::optional<size_t> yaze::editor::ItemInteractionHandler::selected_item_index_
private

◆ is_dragging_

bool yaze::editor::ItemInteractionHandler::is_dragging_ = false
private

◆ drag_start_pos_

ImVec2 yaze::editor::ItemInteractionHandler::drag_start_pos_
private

Definition at line 117 of file item_interaction_handler.h.

Referenced by HandleClick().

◆ drag_current_pos_

ImVec2 yaze::editor::ItemInteractionHandler::drag_current_pos_
private

The documentation for this class was generated from the following files: