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

Handles sprite placement and interaction in the dungeon editor. More...

#include <sprite_interaction_handler.h>

Inheritance diagram for yaze::editor::SpriteInteractionHandler:
Collaboration diagram for yaze::editor::SpriteInteractionHandler:

Public Types

enum class  PlacementBlockReason { kNone = 0 , kInvalidRoom , kSpriteLimit }
 
using GhostCapacityState = PlacementCapacityState
 

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.
 
void DeleteAll ()
 
bool NudgeSelected (int delta_x, int delta_y)
 
bool was_placement_blocked () const
 True if the most recent PlaceSpriteAtPosition was blocked.
 
PlacementBlockReason placement_block_reason () const
 
void clear_placement_blocked ()
 
GhostCapacityState GetPlacementGhostCapacityState () const
 
- Public Member Functions inherited from yaze::editor::BaseEntityHandler
virtual ~BaseEntityHandler ()=default
 
void SetContext (InteractionContext *ctx)
 Set the interaction context.
 
InteractionContextcontext () const
 Get the interaction context.
 
virtual bool HandleMouseWheel (float delta)
 
void DrawPostPlacementToast ()
 

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
 
PlacementBlockReason placement_block_reason_ = PlacementBlockReason::kNone
 
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
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::RoomGetCurrentRoom () const
 Get current room (convenience method)
 
- Protected Attributes inherited from yaze::editor::BaseEntityHandler
InteractionContextctx_ = nullptr
 
float toast_expire_time_ = 0.0f
 
- Static Protected Attributes inherited from yaze::editor::BaseEntityHandler
static constexpr float kToastDuration = 1.5f
 

Detailed Description

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 16 of file sprite_interaction_handler.h.

Member Typedef Documentation

◆ GhostCapacityState

Member Enumeration Documentation

◆ PlacementBlockReason

Enumerator
kNone 
kInvalidRoom 
kSpriteLimit 

Definition at line 19 of file sprite_interaction_handler.h.

Member Function Documentation

◆ BeginPlacement()

void yaze::editor::SpriteInteractionHandler::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 27 of file sprite_interaction_handler.cc.

References ClearSelection(), and sprite_placement_mode_.

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

Here is the call graph for this function:

◆ CancelPlacement()

void yaze::editor::SpriteInteractionHandler::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 30 of file sprite_interaction_handler.h.

References sprite_placement_mode_.

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

◆ IsPlacementActive()

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

◆ HandleClick()

bool yaze::editor::SpriteInteractionHandler::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 32 of file sprite_interaction_handler.cc.

References ClearSelection(), drag_current_pos_, drag_start_pos_, GetEntityAtPosition(), yaze::editor::BaseEntityHandler::HasValidContext(), is_dragging_, yaze::editor::BaseEntityHandler::IsWithinBounds(), PlaceSpriteAtPosition(), SelectSprite(), and sprite_placement_mode_.

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

◆ HandleDrag()

void yaze::editor::SpriteInteractionHandler::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 58 of file sprite_interaction_handler.cc.

References drag_current_pos_, is_dragging_, and selected_sprite_index_.

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

◆ HandleRelease()

◆ DrawGhostPreview()

◆ DrawSelectionHighlight()

◆ GetEntityAtPosition()

std::optional< size_t > yaze::editor::SpriteInteractionHandler::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 217 of file sprite_interaction_handler.cc.

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

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

Here is the call graph for this function:

◆ SetSpriteId()

void yaze::editor::SpriteInteractionHandler::SetSpriteId ( uint8_t id)
inline

Set sprite ID for placement.

Definition at line 50 of file sprite_interaction_handler.h.

References preview_sprite_id_.

◆ GetSpriteId()

uint8_t yaze::editor::SpriteInteractionHandler::GetSpriteId ( ) const
inline

Get current sprite ID for placement.

Definition at line 55 of file sprite_interaction_handler.h.

References preview_sprite_id_.

◆ SelectSprite()

◆ ClearSelection()

◆ HasSelection()

◆ GetSelectedIndex()

◆ DeleteSelected()

◆ DeleteAll()

◆ NudgeSelected()

◆ was_placement_blocked()

bool yaze::editor::SpriteInteractionHandler::was_placement_blocked ( ) const
inline

True if the most recent PlaceSpriteAtPosition was blocked.

Definition at line 87 of file sprite_interaction_handler.h.

References kNone, and placement_block_reason_.

◆ placement_block_reason()

PlacementBlockReason yaze::editor::SpriteInteractionHandler::placement_block_reason ( ) const
inline

Definition at line 90 of file sprite_interaction_handler.h.

References placement_block_reason_.

◆ clear_placement_blocked()

void yaze::editor::SpriteInteractionHandler::clear_placement_blocked ( )
inline

Definition at line 93 of file sprite_interaction_handler.h.

References kNone, and placement_block_reason_.

◆ GetPlacementGhostCapacityState()

SpriteInteractionHandler::GhostCapacityState yaze::editor::SpriteInteractionHandler::GetPlacementGhostCapacityState ( ) const

◆ PlaceSpriteAtPosition()

◆ CanvasToSpriteCoords()

std::pair< int, int > yaze::editor::SpriteInteractionHandler::CanvasToSpriteCoords ( int canvas_x,
int canvas_y ) const
private

Convert canvas to sprite coordinates (16-pixel grid)

Definition at line 370 of file sprite_interaction_handler.cc.

References yaze::editor::dungeon_coords::kSpriteTileSize.

Referenced by DrawSelectionHighlight(), HandleRelease(), and PlaceSpriteAtPosition().

Member Data Documentation

◆ sprite_placement_mode_

bool yaze::editor::SpriteInteractionHandler::sprite_placement_mode_ = false
private

◆ preview_sprite_id_

uint8_t yaze::editor::SpriteInteractionHandler::preview_sprite_id_ = 0
private

◆ placement_block_reason_

PlacementBlockReason yaze::editor::SpriteInteractionHandler::placement_block_reason_ = PlacementBlockReason::kNone
private

◆ selected_sprite_index_

std::optional<size_t> yaze::editor::SpriteInteractionHandler::selected_sprite_index_
private

◆ is_dragging_

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

◆ drag_start_pos_

ImVec2 yaze::editor::SpriteInteractionHandler::drag_start_pos_
private

Definition at line 107 of file sprite_interaction_handler.h.

Referenced by HandleClick().

◆ drag_current_pos_

ImVec2 yaze::editor::SpriteInteractionHandler::drag_current_pos_
private

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