1#ifndef YAZE_APP_EDITOR_DUNGEON_INTERACTION_ITEM_INTERACTION_HANDLER_H_
2#define YAZE_APP_EDITOR_DUNGEON_INTERACTION_ITEM_INTERACTION_HANDLER_H_
7#include "absl/status/status.h"
29 bool HandleClick(
int canvas_x,
int canvas_y)
override;
30 void HandleDrag(ImVec2 current_pos, ImVec2 delta)
override;
37 int canvas_y)
const override;
91 bool UpdateItem(
size_t index, uint8_t type,
int pixel_x,
int pixel_y);
94 int room_id,
const std::vector<zelda3::PotItem>& candidate)>;
99 std::function<
void(
const absl::Status&)> callback) {
Abstract base class for entity interaction handlers.
Handles pot item placement and interaction in the dungeon editor.
void DrawSelectionHighlight() override
Draw selection highlight for selected entities.
void SetItemPlacementPreflight(ItemPlacementPreflight preflight)
std::function< absl::Status( int room_id, const std::vector< zelda3::PotItem > &candidate)> ItemPlacementPreflight
std::function< void(const absl::Status &) mutation_error_callback_)
std::optional< size_t > selected_item_index_
void SetMutationErrorCallback(std::function< void(const absl::Status &)> callback)
uint8_t GetItemId() const
Get current item ID for placement.
ItemPlacementPreflight item_placement_preflight_
bool HandleClick(int canvas_x, int canvas_y) override
Handle mouse click at canvas position.
bool IsPlacementActive() const override
Check if placement mode is active.
void DrawGhostPreview() override
Draw ghost preview during placement.
bool PreflightPlacement(const std::vector< zelda3::PotItem > &candidate)
void BeginPlacement() override
Begin placement mode.
void PlaceItemAtPosition(int canvas_x, int canvas_y)
Place item at position.
void HandleDrag(ImVec2 current_pos, ImVec2 delta) override
Handle mouse drag.
void ClearSelection()
Clear item selection.
absl::Status mutation_status_
std::optional< size_t > GetEntityAtPosition(int canvas_x, int canvas_y) const override
Get entity at canvas position.
const absl::Status & mutation_status() const
bool item_placement_mode_
void DeleteSelected()
Delete selected item.
bool HasSelection() const
Check if an item is selected.
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.
void SetItemId(uint8_t id)
Set item ID for placement.
void HandleRelease() override
Handle mouse release.
std::optional< size_t > GetSelectedIndex() const
Get selected item index.
void SelectItem(size_t index)
Select item at index.
void CancelPlacement() override
Cancel current placement.
bool UpdateItem(size_t index, uint8_t type, int pixel_x, int pixel_y)