1#ifndef YAZE_APP_EDITOR_DUNGEON_INTERACTION_SPRITE_INTERACTION_HANDLER_H_
2#define YAZE_APP_EDITOR_DUNGEON_INTERACTION_SPRITE_INTERACTION_HANDLER_H_
8#include "absl/status/status.h"
39 bool HandleClick(
int canvas_x,
int canvas_y)
override;
40 void HandleDrag(ImVec2 current_pos, ImVec2 delta)
override;
47 int canvas_y)
const override;
94 int subtype,
int layer,
96 bool UpdateSprite(
size_t index, uint8_t
id,
int x,
int y,
int subtype,
97 int layer,
int key_drop);
101 std::function<absl::Status(
int,
const std::vector<zelda3::Sprite>&)>;
107 std::function<
void(
const absl::Status&)> callback) {
Abstract base class for entity interaction handlers.
Handles sprite placement and interaction in the dungeon editor.
GhostCapacityState GetPlacementGhostCapacityState() const
bool IsPlacementActive() const override
Check if placement mode is active.
bool PreflightSprites(const std::vector< zelda3::Sprite > &candidate)
bool UpdateSprite(size_t index, uint8_t id, int x, int y, int subtype, int layer, int key_drop)
bool NudgeSelected(int delta_x, int delta_y)
void PlaceSpriteAtPosition(int canvas_x, int canvas_y)
Place sprite at position.
void ClearSelection()
Clear sprite selection.
uint8_t GetSpriteId() const
Get current sprite ID for placement.
PlacementCapacityState GhostCapacityState
void CancelPlacement() override
Cancel current placement.
void HandleRelease() override
Handle mouse release.
PlacementBlockReason placement_block_reason() const
void SelectSprite(size_t index)
Select sprite at index.
void clear_placement_blocked()
std::optional< size_t > selected_sprite_index_
bool HasSelection() const
Check if a sprite is selected.
SpriteMutationPreflight sprite_mutation_preflight_
void SetSpriteMutationPreflight(SpriteMutationPreflight callback)
std::function< absl::Status(int, const std::vector< zelda3::Sprite > &)> SpriteMutationPreflight
std::function< void(const absl::Status &) mutation_error_callback_)
std::optional< size_t > GetEntityAtPosition(int canvas_x, int canvas_y) const override
Get entity at canvas position.
void DrawGhostPreview() override
Draw ghost preview during placement.
const absl::Status & mutation_status() const
absl::Status mutation_status_
static absl::Status ValidateSpriteProperties(uint8_t id, int x, int y, int subtype, int layer, int key_drop)
bool was_placement_blocked() const
True if the most recent PlaceSpriteAtPosition was blocked.
uint8_t preview_sprite_id_
bool sprite_placement_mode_
void DrawSelectionHighlight() override
Draw selection highlight for selected entities.
void HandleDrag(ImVec2 current_pos, ImVec2 delta) override
Handle mouse drag.
bool HandleClick(int canvas_x, int canvas_y) override
Handle mouse click at canvas position.
std::optional< size_t > GetSelectedIndex() const
Get selected sprite index.
void SetSpriteId(uint8_t id)
Set sprite ID for placement.
void SetMutationErrorCallback(std::function< void(const absl::Status &)> callback)
std::pair< int, int > CanvasToSpriteCoords(int canvas_x, int canvas_y) const
Convert canvas to sprite coordinates (16-pixel grid)
void BeginPlacement() override
Begin placement mode.
PlacementBlockReason placement_block_reason_
void DeleteSelected()
Delete selected sprite.