Handles the main dungeon canvas rendering and interaction. More...
#include <dungeon_canvas_viewer.h>
Classes | |
struct | ObjectOutlineToggles |
struct | ObjectRenderCache |
struct | RoomLayerSettings |
Public Member Functions | |
DungeonCanvasViewer (Rom *rom=nullptr) | |
void | DrawDungeonCanvas (int room_id) |
void | Draw (int room_id) |
void | SetRom (Rom *rom) |
Rom * | rom () const |
void | SetRooms (std::array< zelda3::Room, 0x128 > *rooms) |
void | set_active_rooms (const ImVector< int > &rooms) |
void | set_current_active_room_tab (int tab) |
void | set_current_palette_group_id (uint64_t id) |
void | SetCurrentPaletteId (uint64_t id) |
void | SetCurrentPaletteGroup (const gfx::PaletteGroup &group) |
gui::Canvas & | canvas () |
const gui::Canvas & | canvas () const |
DungeonObjectInteraction & | object_interaction () |
void | SetObjectInteractionEnabled (bool enabled) |
bool | IsObjectInteractionEnabled () const |
void | SetBG1Visible (int room_id, bool visible) |
void | SetBG2Visible (int room_id, bool visible) |
bool | IsBG1Visible (int room_id) const |
bool | IsBG2Visible (int room_id) const |
void | SetBG2LayerType (int room_id, int type) |
int | GetBG2LayerType (int room_id) const |
void | SetPreviewObject (const zelda3::RoomObject &object) |
void | ClearPreviewObject () |
Private Member Functions | |
void | DisplayObjectInfo (const zelda3::RoomObject &object, int canvas_x, int canvas_y) |
void | RenderSprites (const zelda3::Room &room) |
std::pair< int, int > | RoomToCanvasCoordinates (int room_x, int room_y) const |
std::pair< int, int > | CanvasToRoomCoordinates (int canvas_x, int canvas_y) const |
bool | IsWithinCanvasBounds (int canvas_x, int canvas_y, int margin=32) const |
void | CalculateWallDimensions (const zelda3::RoomObject &object, int &width, int &height) |
void | DrawObjectPositionOutlines (const zelda3::Room &room) |
absl::Status | LoadAndRenderRoomGraphics (int room_id) |
void | DrawRoomBackgroundLayers (int room_id) |
RoomLayerSettings & | GetRoomLayerSettings (int room_id) |
Private Attributes | |
Rom * | rom_ = nullptr |
gui::Canvas | canvas_ {"##DungeonCanvas", ImVec2(0x200, 0x200)} |
DungeonObjectInteraction | object_interaction_ |
std::array< zelda3::Room, 0x128 > * | rooms_ = nullptr |
ImVector< int > | active_rooms_ |
int | current_active_room_tab_ = 0 |
bool | object_interaction_enabled_ = true |
std::map< int, RoomLayerSettings > | room_layer_settings_ |
uint64_t | current_palette_group_id_ = 0 |
uint64_t | current_palette_id_ = 0 |
gfx::PaletteGroup | current_palette_group_ |
std::vector< ObjectRenderCache > | object_render_cache_ |
uint64_t | last_palette_hash_ = 0 |
bool | show_room_debug_info_ = false |
bool | show_texture_debug_ = false |
bool | show_object_bounds_ = false |
bool | show_layer_info_ = false |
int | layout_override_ = -1 |
ObjectOutlineToggles | object_outline_toggles_ |
Handles the main dungeon canvas rendering and interaction.
In Link to the Past, dungeon "layers" are not separate visual layers but a game concept where objects exist on different logical levels. Players move between these levels using stair objects that act as transitions between the different object planes.
Definition at line 24 of file dungeon_canvas_viewer.h.
|
inlineexplicit |
Definition at line 26 of file dungeon_canvas_viewer.h.
void yaze::editor::DungeonCanvasViewer::DrawDungeonCanvas | ( | int | room_id | ) |
Definition at line 21 of file dungeon_canvas_viewer.cc.
References yaze::gui::Canvas::AddContextMenuItem(), yaze::gui::Canvas::ContextMenuItem::callback, canvas_, yaze::gui::Canvas::canvas_size(), yaze::editor::DungeonObjectInteraction::CheckForObjectSelection(), yaze::gui::Canvas::ClearContextMenuItems(), yaze::gui::Canvas::custom_step(), yaze::gui::Canvas::DrawBackground(), yaze::gui::Canvas::DrawContextMenu(), yaze::gui::Canvas::DrawGrid(), DrawObjectPositionOutlines(), yaze::gui::Canvas::DrawOverlay(), DrawRoomBackgroundLayers(), yaze::editor::DungeonObjectInteraction::DrawSelectBox(), yaze::editor::DungeonObjectInteraction::DrawSelectionHighlights(), yaze::gui::Canvas::DrawText(), yaze::gui::Canvas::ContextMenuItem::enabled_condition, yaze::gfx::Arena::Get(), GetRoomLayerSettings(), yaze::gui::Canvas::global_scale(), yaze::editor::DungeonObjectInteraction::HandleCanvasMouseInput(), yaze::editor::DungeonObjectInteraction::HandleDeleteSelected(), yaze::gui::Canvas::height(), ICON_MD_ADD, ICON_MD_BUG_REPORT, ICON_MD_CROP_SQUARE, ICON_MD_DELETE, ICON_MD_IMAGE, ICON_MD_INFO, ICON_MD_LAYERS, ICON_MD_PRINT, ICON_MD_REFRESH, yaze::gui::InputHexByte(), yaze::gui::InputHexWord(), yaze::Rom::is_loaded(), yaze::gui::k8x8, yaze::gui::Canvas::ContextMenuItem::label, layout_override_, LoadAndRenderRoomGraphics(), LOG_DEBUG, object_interaction_, object_interaction_enabled_, object_outline_toggles_, yaze::gfx::Arena::ProcessTextureQueue(), RenderSprites(), rom_, rooms_, yaze::gui::Canvas::SetCanvasSize(), yaze::editor::DungeonObjectInteraction::SetCurrentRoom(), yaze::gui::Canvas::SetGridSize(), yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer0_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer1_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer2_objects, show_layer_info_, show_object_bounds_, show_room_debug_info_, show_texture_debug_, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type1_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type2_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type3_objects, yaze::editor::DungeonObjectInteraction::ShowContextMenu(), yaze::gui::Canvas::ContextMenuItem::subitems, yaze::gui::Canvas::width(), and yaze::gui::Canvas::zero_point().
Referenced by Draw(), and yaze::editor::DungeonEditorV2::DrawRoomTab().
void yaze::editor::DungeonCanvasViewer::Draw | ( | int | room_id | ) |
Definition at line 17 of file dungeon_canvas_viewer.cc.
References DrawDungeonCanvas().
|
inline |
Definition at line 33 of file dungeon_canvas_viewer.h.
Referenced by yaze::editor::DungeonEditorV2::set_rom().
|
inline |
|
inline |
Definition at line 39 of file dungeon_canvas_viewer.h.
References rooms_.
Referenced by yaze::editor::DungeonEditorV2::Load().
|
inline |
Definition at line 41 of file dungeon_canvas_viewer.h.
References active_rooms_.
|
inline |
Definition at line 42 of file dungeon_canvas_viewer.h.
References current_active_room_tab_.
|
inline |
Definition at line 45 of file dungeon_canvas_viewer.h.
References current_palette_group_id_.
|
inline |
Definition at line 46 of file dungeon_canvas_viewer.h.
References current_palette_id_.
Referenced by yaze::editor::DungeonEditorV2::Load().
|
inline |
Definition at line 47 of file dungeon_canvas_viewer.h.
References current_palette_group_.
Referenced by yaze::editor::DungeonEditorV2::Load().
|
inline |
Definition at line 50 of file dungeon_canvas_viewer.h.
References canvas_.
|
inline |
Definition at line 51 of file dungeon_canvas_viewer.h.
References canvas_.
|
inline |
Definition at line 54 of file dungeon_canvas_viewer.h.
References object_interaction_.
Referenced by yaze::editor::ObjectEditorCard::DrawSelectedObjectInfo().
|
inline |
Definition at line 57 of file dungeon_canvas_viewer.h.
References object_interaction_enabled_.
Referenced by yaze::editor::ObjectEditorCard::Draw(), and yaze::editor::ObjectEditorCard::DrawObjectSelector().
|
inline |
Definition at line 58 of file dungeon_canvas_viewer.h.
References object_interaction_enabled_.
|
inline |
Definition at line 61 of file dungeon_canvas_viewer.h.
References yaze::editor::DungeonCanvasViewer::RoomLayerSettings::bg1_visible, and GetRoomLayerSettings().
|
inline |
Definition at line 64 of file dungeon_canvas_viewer.h.
References yaze::editor::DungeonCanvasViewer::RoomLayerSettings::bg2_visible, and GetRoomLayerSettings().
|
inline |
Definition at line 67 of file dungeon_canvas_viewer.h.
References room_layer_settings_.
|
inline |
Definition at line 71 of file dungeon_canvas_viewer.h.
References room_layer_settings_.
|
inline |
Definition at line 77 of file dungeon_canvas_viewer.h.
References yaze::editor::DungeonCanvasViewer::RoomLayerSettings::bg2_layer_type, and GetRoomLayerSettings().
|
inline |
Definition at line 80 of file dungeon_canvas_viewer.h.
References room_layer_settings_.
|
inline |
Definition at line 86 of file dungeon_canvas_viewer.h.
References object_interaction_, and yaze::editor::DungeonObjectInteraction::SetPreviewObject().
Referenced by yaze::editor::ObjectEditorCard::Draw(), and yaze::editor::ObjectEditorCard::DrawObjectSelector().
|
inline |
Definition at line 89 of file dungeon_canvas_viewer.h.
References object_interaction_, and yaze::editor::DungeonObjectInteraction::SetPreviewObject().
Referenced by yaze::editor::ObjectEditorCard::Draw(), and yaze::editor::ObjectEditorCard::DrawObjectSelector().
|
private |
Definition at line 568 of file dungeon_canvas_viewer.cc.
References canvas_, and yaze::gui::Canvas::DrawText().
|
private |
Definition at line 578 of file dungeon_canvas_viewer.cc.
References canvas_, yaze::gui::Canvas::DrawRect(), yaze::gui::Canvas::DrawText(), yaze::zelda3::Room::GetSprites(), IsWithinCanvasBounds(), and RoomToCanvasCoordinates().
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 625 of file dungeon_canvas_viewer.cc.
Referenced by DrawObjectPositionOutlines(), and RenderSprites().
|
private |
Definition at line 636 of file dungeon_canvas_viewer.cc.
References canvas_, and yaze::gui::Canvas::global_scale().
|
private |
Definition at line 654 of file dungeon_canvas_viewer.cc.
References canvas_, yaze::gui::Canvas::height(), and yaze::gui::Canvas::width().
Referenced by RenderSprites().
|
private |
Definition at line 664 of file dungeon_canvas_viewer.cc.
|
private |
Definition at line 703 of file dungeon_canvas_viewer.cc.
References canvas_, yaze::gui::Canvas::DrawRect(), yaze::gui::Canvas::DrawText(), yaze::zelda3::Room::GetTileObjects(), object_outline_toggles_, RoomToCanvasCoordinates(), yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer0_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer1_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_layer2_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type1_objects, yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type2_objects, and yaze::editor::DungeonCanvasViewer::ObjectOutlineToggles::show_type3_objects.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 778 of file dungeon_canvas_viewer.cc.
References ASSIGN_OR_RETURN, yaze::gfx::CreatePaletteGroupFromLargePalette(), current_palette_group_, current_palette_group_id_, yaze::Rom::is_loaded(), LOG_DEBUG, yaze::Rom::palette_group(), yaze::Rom::paletteset_ids, yaze::Rom::ReadWord(), rom_, and rooms_.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 830 of file dungeon_canvas_viewer.cc.
References canvas_, yaze::gfx::Arena::CREATE, yaze::gui::Canvas::DrawBitmap(), yaze::gfx::Arena::Get(), GetRoomLayerSettings(), yaze::gui::Canvas::global_scale(), yaze::gui::Canvas::height(), LOG_DEBUG, yaze::zelda3::NumberOfRooms, yaze::gfx::Arena::QueueTextureCommand(), rooms_, yaze::gui::Canvas::width(), and yaze::gui::Canvas::zero_point().
Referenced by DrawDungeonCanvas().
|
inlineprivate |
Definition at line 137 of file dungeon_canvas_viewer.h.
References room_layer_settings_.
Referenced by DrawDungeonCanvas(), DrawRoomBackgroundLayers(), SetBG1Visible(), SetBG2LayerType(), and SetBG2Visible().
|
private |
Definition at line 114 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas(), LoadAndRenderRoomGraphics(), rom(), and SetRom().
|
private |
Definition at line 115 of file dungeon_canvas_viewer.h.
Referenced by canvas(), canvas(), CanvasToRoomCoordinates(), DisplayObjectInfo(), DrawDungeonCanvas(), DrawObjectPositionOutlines(), DrawRoomBackgroundLayers(), IsWithinCanvasBounds(), and RenderSprites().
|
private |
Definition at line 117 of file dungeon_canvas_viewer.h.
Referenced by ClearPreviewObject(), DrawDungeonCanvas(), object_interaction(), and SetPreviewObject().
|
private |
Definition at line 120 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas(), DrawRoomBackgroundLayers(), LoadAndRenderRoomGraphics(), and SetRooms().
|
private |
Definition at line 122 of file dungeon_canvas_viewer.h.
Referenced by set_active_rooms().
|
private |
Definition at line 123 of file dungeon_canvas_viewer.h.
Referenced by set_current_active_room_tab().
|
private |
Definition at line 126 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas(), IsObjectInteractionEnabled(), and SetObjectInteractionEnabled().
|
private |
Definition at line 134 of file dungeon_canvas_viewer.h.
Referenced by GetBG2LayerType(), GetRoomLayerSettings(), IsBG1Visible(), and IsBG2Visible().
|
private |
Definition at line 142 of file dungeon_canvas_viewer.h.
Referenced by LoadAndRenderRoomGraphics(), and set_current_palette_group_id().
|
private |
Definition at line 143 of file dungeon_canvas_viewer.h.
Referenced by SetCurrentPaletteId().
|
private |
Definition at line 144 of file dungeon_canvas_viewer.h.
Referenced by LoadAndRenderRoomGraphics(), and SetCurrentPaletteGroup().
|
private |
Definition at line 154 of file dungeon_canvas_viewer.h.
|
private |
Definition at line 155 of file dungeon_canvas_viewer.h.
|
private |
Definition at line 158 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 159 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 160 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 161 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 162 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas().
|
private |
Definition at line 173 of file dungeon_canvas_viewer.h.
Referenced by DrawDungeonCanvas(), and DrawObjectPositionOutlines().