1#ifndef YAZE_APP_EDITOR_DUNGEON_DUNGEON_CANVAS_VIEWER_H
2#define YAZE_APP_EDITOR_DUNGEON_DUNGEON_CANVAS_VIEWER_H
8#include <unordered_map>
19#include "imgui/imgui.h"
29class MinecartTrackEditorPanel;
48 void Draw(
int room_id);
67 std::array<zelda3::Room, 0x128>*
rooms()
const {
return rooms_; }
329 ? it->second.GetLayerBlendMode(layer)
335 uint8_t alpha = 128) {
477 std::array<zelda3::Room, 0x128>*
rooms_ =
nullptr;
494 std::function<void(
int,
int)>
530 std::unordered_map<int, DungeonRenderingHelpers::CollisionOverlayCache>
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
bool show_coordinate_overlay_
bool * mutable_show_track_collision_legend()
void SetHeaderReadOnly(bool read_only)
void SetCurrentPaletteId(uint64_t id)
bool show_object_bounds() const
const zelda3::RoomLayerManager & GetRoomLayerManager(int room_id) const
bool * mutable_show_camera_quadrant_overlay()
void SetShowEntranceListCallback(std::function< void()> callback)
void ApplyTrackCollisionConfig()
bool show_custom_objects_overlay_
std::bitset< 256 > minecart_sprite_ids_
bool show_track_collision_legend_
zelda3::GameData * game_data_
std::vector< uint16_t > track_tile_order_
std::array< zelda3::Room, 0x128 > * rooms() const
bool * mutable_show_texture_debug()
bool show_texture_debug() const
bool AreSpritesVisible() const
std::optional< std::pair< int, int > > pending_scroll_target_
bool * mutable_show_coordinate_overlay()
bool show_minecart_tracks() const
ObjectOutlineToggles object_outline_toggles_
void SetLayerBlendMode(int room_id, zelda3::LayerType layer, zelda3::LayerBlendMode mode)
void SetEditorSystem(zelda3::DungeonEditorSystem *system)
bool show_camera_quadrant_overlay_
std::array< zelda3::Room, 0x128 > * rooms_
bool * mutable_show_layer_info()
void RenderPotItems(const gui::CanvasRuntime &rt, const zelda3::Room &room)
bool * mutable_show_grid()
absl::Status LoadAndRenderRoomGraphics(int room_id)
bool show_room_debug_info_
void set_show_layer_info(bool show)
void set_show_water_fill_overlay(bool show)
void DrawRoomNavigation(int room_id)
bool IsBG1Visible(int room_id) const
void set_show_custom_collision_overlay(bool show)
int GetBG2LayerType(int room_id) const
void SetMinecartTrackPanel(MinecartTrackEditorPanel *panel)
void SetObjectTranslucent(int room_id, size_t object_index, bool translucent, uint8_t alpha=128)
bool HasPendingScrollTarget() const
int current_room_id() const
void SetShowItemPanelCallback(std::function< void()> callback)
void SetContext(EditorContext ctx)
void SetSpritesVisible(bool visible)
bool show_water_fill_overlay_
void SetRoomDetailsExpanded(bool expanded)
bool * mutable_show_minecart_tracks()
void SetPinned(bool pinned)
void SetCompactHeaderMode(bool compact)
void SetShowRoomGraphicsCallback(std::function< void()> callback)
EditorContext context() const
void set_show_track_collision_legend(bool show)
void set_show_track_route_overlay(bool show)
void SetProject(const project::YazeProject *project)
bool * mutable_show_track_collision_overlay()
void DrawRoomBackgroundLayers(int room_id)
bool show_track_gap_overlay() const
std::function< void(int, const zelda3::RoomObject &) edit_graphics_callback_)
const DungeonRenderingHelpers::CollisionOverlayCache & GetCollisionOverlayCache(int room_id)
void set_show_custom_objects_overlay(bool show)
void set_show_texture_debug(bool show)
void set_active_rooms(const ImVector< int > &rooms)
void SetRenderer(gfx::IRenderer *renderer)
void SetEditGraphicsCallback(std::function< void(int, const zelda3::RoomObject &)> callback)
bool show_track_gap_overlay_
void SetBG2LayerType(int room_id, int type)
zelda3::GameData * game_data() const
std::vector< uint16_t > switch_tile_order_
std::function< void()> show_entrance_list_callback_
bool object_interaction_enabled_
void SetHeaderVisible(bool visible)
bool show_custom_objects_overlay() const
void SetCurrentPaletteGroup(const gfx::PaletteGroup &group)
bool show_custom_collision_overlay_
void set_show_track_collision_overlay(bool show)
void SetShowRoomListCallback(std::function< void()> callback)
int current_active_room_tab_
bool show_track_collision_legend() const
bool compact_header_mode_
DungeonCanvasViewer(Rom *rom=nullptr)
DungeonObjectInteraction object_interaction_
void SetObjectRenderMode(ObjectRenderMode mode)
uint64_t last_palette_hash_
DungeonObjectInteraction & object_interaction()
void ClearPreviewObject()
std::function< void()> show_room_list_callback_
void set_show_minecart_sprite_overlay(bool show)
bool compact_header_mode() const
bool show_coordinate_overlay() const
bool * mutable_show_room_debug_info()
void SetShowRoomMatrixCallback(std::function< void()> callback)
const project::YazeProject * project_
bool show_room_debug_info() const
bool show_track_collision_overlay() const
void SetRoomNavigationCallback(std::function< void(int)> callback)
void DrawCompactLayerToggles(int room_id)
void SetShowSpritePanelCallback(std::function< void()> callback)
void SetPreviewObject(const zelda3::RoomObject &object)
std::function< void()> show_object_panel_callback_
std::function< void(bool)> pin_callback_
std::optional< std::pair< int, int > > GetPendingScrollTarget() const
void SetBG1Visible(int room_id, bool visible)
void SetBG2Visible(int room_id, bool visible)
ImVector< int > active_rooms_
bool IsLayerVisible(int room_id, zelda3::LayerType layer) const
bool show_minecart_sprite_overlay_
bool show_minecart_sprite_overlay() const
std::unordered_map< int, DungeonRenderingHelpers::CollisionOverlayCache > collision_overlay_cache_
void DrawLayerControls(zelda3::Room &room, int room_id)
bool IsObjectInteractionEnabled() const
bool header_read_only() const
void SetShowObjectPanelCallback(std::function< void()> callback)
void RenderSprites(const gui::CanvasRuntime &rt, const zelda3::Room &room)
uint64_t current_palette_id_
zelda3::RoomLayerManager & GetRoomLayerManager(int room_id)
ObjectRenderMode GetObjectRenderMode() const
bool show_water_fill_overlay() const
bool track_direction_map_enabled_
void set_current_palette_group_id(uint64_t id)
gfx::PaletteGroup current_palette_group_
bool show_track_route_overlay_
bool show_camera_quadrant_overlay() const
void DrawMaskHighlights(const gui::CanvasRuntime &rt, const zelda3::Room &room)
void set_show_object_bounds(bool show)
bool CanNavigateRooms() const
uint64_t current_palette_group_id_
void SetObjectInteractionEnabled(bool enabled)
gfx::IRenderer * renderer_
void set_show_coordinate_overlay(bool show)
std::function< void()> show_dungeon_settings_callback_
void SetRoomSwapCallback(std::function< void(int, int)> callback)
void set_show_room_debug_info(bool show)
void set_show_minecart_tracks(bool show)
std::function< void()> show_room_matrix_callback_
gui::CanvasTouchHandler touch_handler_
EntityVisibility entity_visibility_
void ScrollToTile(int tile_x, int tile_y)
void NavigateToRoom(int target_room)
zelda3::LayerBlendMode GetLayerBlendMode(int room_id, zelda3::LayerType layer) const
bool IsBG2Visible(int room_id) const
std::function< void()> show_room_graphics_callback_
bool * mutable_show_object_bounds()
void SetSaveRoomCallback(std::function< void(int)> callback)
void set_current_active_room_tab(int tab)
bool show_track_route_overlay() const
void set_show_track_gap_overlay(bool show)
void DrawDungeonCanvas(int room_id)
void DrawRoomHeader(zelda3::Room &room, int room_id)
void set_show_camera_quadrant_overlay(bool show)
std::function< void(int)> room_navigation_callback_
void RenderEntityOverlay(const gui::CanvasRuntime &rt, const zelda3::Room &room)
bool * mutable_show_custom_collision_overlay()
std::function< void()> show_item_panel_callback_
std::map< int, zelda3::RoomLayerManager > room_layer_managers_
std::vector< ObjectRenderCache > object_render_cache_
void DisplayObjectInfo(const gui::CanvasRuntime &rt, const zelda3::RoomObject &object, int canvas_x, int canvas_y)
bool show_minecart_tracks_
std::function< void()> show_sprite_panel_callback_
bool ArePotItemsVisible() const
std::function< void(int, int)> room_swap_callback_
ObjectRenderMode object_render_mode_
DungeonRenderingHelpers::TrackCollisionConfig track_collision_config_
void SetLayerVisible(int room_id, zelda3::LayerType layer, bool visible)
bool header_visible() const
void SetPotItemsVisible(bool visible)
void DrawObjectPositionOutlines(const gui::CanvasRuntime &rt, const zelda3::Room &room)
bool show_layer_info() const
void DrawRoomPropertyTable(zelda3::Room &room, int room_id)
void HandleTouchLongPressContextMenu(const gui::CanvasRuntime &rt, const zelda3::Room &room)
void SetShowDungeonSettingsCallback(std::function< void()> callback)
void DeleteSelectedObjects()
MinecartTrackEditorPanel * minecart_track_panel_
bool * mutable_show_minecart_sprite_overlay()
void SetRooms(std::array< zelda3::Room, 0x128 > *rooms)
bool show_custom_collision_overlay() const
void set_show_grid(bool show)
const gui::Canvas & canvas() const
void SetGameData(zelda3::GameData *game_data)
void SetPinCallback(std::function< void(bool)> callback)
std::function< void(int)> save_room_callback_
bool show_track_collision_overlay_
Handles object selection, placement, and interaction within the dungeon canvas.
void HandleDeleteSelected()
void SetCurrentPaletteGroup(const gfx::PaletteGroup &group)
void SetEditorSystem(zelda3::DungeonEditorSystem *system)
void SetPreviewObject(const zelda3::RoomObject &object, bool loaded)
Represents a bitmap image optimized for SNES ROM hacking.
Defines an abstract interface for all rendering operations.
Handles touch input integration for Canvas.
Modern, robust canvas for drawing and manipulating graphics.
Core dungeon editing system.
RoomLayerManager - Manages layer visibility and compositing.
void SetLayerBlendMode(LayerType layer, LayerBlendMode mode)
void SetLayerVisible(LayerType layer, bool visible)
void SetObjectTranslucency(size_t object_index, bool translucent, uint8_t alpha=128)
ObjectRenderMode
Handles the main dungeon canvas rendering and interaction.
LayerBlendMode
Layer blend modes for compositing.
LayerType
Layer types for the 4-way visibility system.
constexpr int kNumberOfRooms
gfx::Bitmap rendered_bitmap
Lightweight view into the essential runtime context (Rom + GameData)
zelda3::GameData * game_data
Represents a group of palettes.
Modern project structure with comprehensive settings consolidation.