1#ifndef YAZE_APP_EDITOR_DUNGEON_INTERACTION_BASE_ENTITY_HANDLER_H_
2#define YAZE_APP_EDITOR_DUNGEON_INTERACTION_BASE_ENTITY_HANDLER_H_
11#include "imgui/imgui.h"
87 virtual void HandleDrag(ImVec2 current_pos, ImVec2 delta) = 0;
128 int canvas_y)
const = 0;
134 if (ImGui::GetCurrentContext() ==
nullptr)
return;
149 if (ImGui::GetCurrentContext() ==
nullptr)
return;
158 if (ImGui::GetCurrentContext() ==
nullptr)
return;
166 float alpha = std::min(1.0f, remaining / 0.4f);
168 ImU32 base_rgb = color & 0x00FFFFFFu;
169 ImU32 alpha_ch =
static_cast<ImU32
>(alpha * 255.0f) << 24;
170 ImU32 toast_color = base_rgb | alpha_ch;
173 ImDrawList* draw_list = ImGui::GetWindowDrawList();
175 draw_list->AddText(ImVec2(canvas_pos.x + 8.0f, canvas_pos.y + 6.0f),
223 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.
void DrawSuccessToastOverlay(const char *msg, ImU32 color) const
void TriggerSuccessToast()
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)
void DrawPostPlacementToast()
virtual ~BaseEntityHandler()=default
bool HasValidContext() const
Check if context is valid.
virtual bool HandleMouseWheel(float delta)
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.
static constexpr float kToastDuration
auto global_scale() const
const AgentUITheme & GetTheme()
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.