1#ifndef YAZE_APP_EDITOR_DUNGEON_INTERACTION_BASE_ENTITY_HANDLER_H_
2#define YAZE_APP_EDITOR_DUNGEON_INTERACTION_BASE_ENTITY_HANDLER_H_
9#include "imgui/imgui.h"
85 virtual void HandleDrag(ImVec2 current_pos, ImVec2 delta) = 0;
125 int canvas_y)
const = 0;
169 return scale > 0.0f ? scale : 1.0f;
Abstract base class for entity interaction handlers.
virtual void HandleRelease()=0
Handle mouse release.
virtual bool IsPlacementActive() const =0
Check if placement mode is active.
virtual void BeginPlacement()=0
Begin placement mode.
InteractionContext * context() const
Get the interaction context.
virtual void HandleDrag(ImVec2 current_pos, ImVec2 delta)=0
Handle mouse drag.
virtual bool HandleClick(int canvas_x, int canvas_y)=0
Handle mouse click at canvas position.
virtual void DrawSelectionHighlight()=0
Draw selection highlight for selected entities.
virtual void DrawGhostPreview()=0
Draw ghost preview during placement.
std::pair< int, int > CanvasToRoom(int canvas_x, int canvas_y) const
Convert canvas pixel coordinates to room tile coordinates.
InteractionContext * ctx_
bool IsWithinBounds(int canvas_x, int canvas_y) const
Check if coordinates are within room bounds.
virtual void CancelPlacement()=0
Cancel current placement.
float GetCanvasScale() const
Get canvas global scale.
zelda3::Room * GetCurrentRoom() const
Get current room (convenience method)
virtual ~BaseEntityHandler()=default
bool HasValidContext() const
Check if context is valid.
std::pair< int, int > RoomToCanvas(int room_x, int room_y) const
Convert room tile coordinates to canvas pixel coordinates.
ImVec2 GetCanvasZeroPoint() const
Get canvas zero point (for screen coordinate conversion)
virtual std::optional< size_t > GetEntityAtPosition(int canvas_x, int canvas_y) const =0
Get entity at canvas position.
void SetContext(InteractionContext *ctx)
Set the interaction context.
auto global_scale() const
std::pair< int, int > RoomToCanvas(int room_x, int room_y)
Convert room tile coordinates to canvas pixel coordinates.
bool IsWithinBounds(int canvas_x, int canvas_y, int margin=0)
Check if coordinates are within room bounds.
std::pair< int, int > CanvasToRoom(int canvas_x, int canvas_y)
Convert canvas pixel coordinates to room tile coordinates.
Shared context for all interaction handlers.
bool IsValid() const
Check if context has required dependencies.
zelda3::Room * GetCurrentRoom() const
Get pointer to current room.