13 const ImVec2& screen_position) {
21 const bool menu_gesture =
32 canvas.zero_point(), canvas.scrolling(), canvas.global_scale());
40 target->parent_map_id =
41 map->parent() == 0xFF ? target->map_id : map->parent();
42 if (!target->valid()) {
46 const auto& world_tiles = target->world == 0 ? tiles->light_world
47 : target->world == 1 ? tiles->dark_world
48 : tiles->special_world;
49 const int x =
static_cast<int>(target->world_position.x) / 16;
50 const int y =
static_cast<int>(target->world_position.y) / 16;
51 if (x <
static_cast<int>(world_tiles.size()) &&
52 y <
static_cast<int>(world_tiles[x].size())) {
53 target->tile16_id = world_tiles[x][y];
64 if (!target.
valid()) {
67 if (entity_type ==
"item") {
92 return absl::InvalidArgumentError(
"The clicked Tile16 is unavailable");
116 const std::optional<OverworldContextTarget>& target) {
123 ImGui::OpenPopup(
"Insert Item");
126 if (!ImGui::BeginPopup(
"Insert Item")) {
129 ImGui::TextUnformatted(tr(
"Choose an item"));
130 ImGui::BeginChild(
"##ItemInsertList", ImVec2(220.0f, 220.0f),
131 ImGuiChildFlags_Borders);
134 const auto item_id =
static_cast<uint8_t
>(i);
145 ImGui::CloseCurrentPopup();
150 ImGui::TextDisabled(tr(
"Click the map to place the item."));
157 !ImGui::IsMouseClicked(ImGuiMouseButton_Left) ||
169 ImVec2(0.0f, 0.0f), ImVec2(0.0f, 0.0f), scale);
177 target->parent_map_id =
178 map->parent() == 0xFF ? target->map_id : map->parent();
179 if (!target->valid()) {
193 const size_t session_id =
EditorDependencies dependencies_
OverworldEditor * editor_
Non-owning pointer to the parent editor.
bool PrepareContextMenu(const ImVec2 &screen_position)
std::unique_ptr< MapPropertiesSystem > map_properties_system_
bool item_insert_popup_requested_
bool map_blockset_loaded_
void RequestTile16Selection(int tile_id)
void RequestItemInsertPopup(const std::optional< OverworldContextTarget > &target)
gui::Canvas ow_map_canvas_
void HandleEntityInsertion(const std::string &entity_type, const OverworldContextTarget &target)
Handle entity insertion from context menu.
void DrawItemInsertPopup()
bool SampleContextTile16(const OverworldContextTarget &target)
std::optional< OverworldContextTarget > item_insert_target_
void HandleTile16Edit(const OverworldContextTarget &target)
Handle tile16 editing from context menu (MOUSE mode) Opens the Tile16 captured at menu-open through t...
std::unique_ptr< OverworldEntityRenderer > entity_renderer_
std::optional< OverworldEntityInsertionRequest > pending_entity_insertion_
absl::Status OpenGraphicsForTile16Quadrant(int tile16_id, int quadrant)
EntityEditMode entity_edit_mode_
bool item_placement_armed_
absl::Status OpenGraphicsForContextTile16(const OverworldContextTarget &target)
void ScrollBlocksetCanvasToCurrentTile()
Scroll the blockset canvas to show the current selected tile16.
zelda3::Overworld overworld_
void SelectMapForEditing(int map_id, bool respect_pin=true)
void SetEntityEditMode(EntityEditMode mode)
Entity focus (entrances/exits/items/sprites); NONE = all entities.
size_t GetActiveSessionId() const
bool OpenWindowFloating(size_t session_id, const std::string &base_window_id)
void MarkWindowRecentlyUsed(const std::string &window_id)
auto global_scale() const
auto hover_mouse_pos() const
void ClearContextMenuItems()
bool IsMouseHovering() const
const std::vector< gfx::Tile16 > & tiles16() const
bool is_lyra_preview() const
auto overworld_map(int i) const
Editors are the view controllers for the application.
std::optional< OverworldContextTarget > ResolveOverworldContextTarget(int world, int game_state, ImVec2 screen_position, ImVec2 canvas_origin, ImVec2 scrolling, float scale, int map_count=zelda3::kNumOverworldMaps)
const std::vector< std::string > kSecretItemNames
project::YazeProject * project
SharedClipboard * shared_clipboard
WorkspaceWindowManager * window_manager
bool valid(int map_count=zelda3::kNumOverworldMaps) const
static constexpr const char * kTile16Editor