13 const ImVec2& screen_position) {
21 const bool menu_gesture =
32 canvas.zero_point(), canvas.scrolling(), canvas.global_scale(),
40 target->parent_map_id = target->map_id;
45 target->parent_map_id =
46 map->parent() == 0xFF ? target->map_id : map->parent();
52 const auto& world_tiles = target->world == 0 ? tiles->light_world
53 : target->world == 1 ? tiles->dark_world
54 : tiles->special_world;
55 const int x =
static_cast<int>(target->world_position.x) / 16;
56 const int y =
static_cast<int>(target->world_position.y) / 16;
60 if (project_tile.ok()) {
61 target->tile16_id = *project_tile;
63 }
else if (x <
static_cast<int>(world_tiles.size()) &&
64 y <
static_cast<int>(world_tiles[x].size())) {
65 target->tile16_id = world_tiles[x][y];
76 if (!target.
valid()) {
79 if (entity_type ==
"item") {
104 return absl::InvalidArgumentError(
"The clicked Tile16 is unavailable");
128 const std::optional<OverworldContextTarget>& target) {
135 ImGui::OpenPopup(
"Insert Item");
138 if (!ImGui::BeginPopup(
"Insert Item")) {
142 ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f),
145 "Persistent event storage (SRAM $7EF000-$7EF4FF) is not yet allocated "
146 "for maps $A0-$BF.");
147 if (ImGui::Button(
"Close")) {
148 ImGui::CloseCurrentPopup();
153 ImGui::TextUnformatted(tr(
"Choose an item"));
154 ImGui::BeginChild(
"##ItemInsertList", ImVec2(220.0f, 220.0f),
155 ImGuiChildFlags_Borders);
158 const auto item_id =
static_cast<uint8_t
>(i);
169 ImGui::CloseCurrentPopup();
174 ImGui::TextDisabled(tr(
"Click the map to place the item."));
181 !ImGui::IsMouseClicked(ImGuiMouseButton_Left) ||
193 ImVec2(0.0f, 0.0f), ImVec2(0.0f, 0.0f), scale);
201 target->parent_map_id =
202 map->parent() == 0xFF ? target->map_id : map->parent();
203 if (!target->valid()) {
217 const size_t session_id =
absl::StatusOr< uint16_t > tile(int global_x, int global_y) const
EditorDependencies dependencies_
const core::LyraTerrainDocument * document() const
OverworldEditor * editor_
Non-owning pointer to the parent editor.
bool PrepareContextMenu(const ImVec2 &screen_position)
bool IsProjectTerrainMap(int map_id) const
std::unique_ptr< MapPropertiesSystem > map_properties_system_
bool item_insert_popup_requested_
bool map_blockset_loaded_
int DisplayedMapCount() const
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...
LyraTerrainCanvas lyra_canvas_
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