yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEONEDITOR_H
2#define YAZE_APP_EDITOR_DUNGEONEDITOR_H
3
4#include "absl/container/flat_hash_map.h"
5#include "app/editor/editor.h"
8#include "app/gui/canvas.h"
9#include "app/rom.h"
10#include "imgui/imgui.h"
11#include "zelda3/dungeon/room.h"
14
15namespace yaze {
16namespace editor {
17
18constexpr ImGuiTabItemFlags kDungeonTabFlags =
19 ImGuiTabItemFlags_Trailing | ImGuiTabItemFlags_NoTooltip;
20
21constexpr ImGuiTabBarFlags kDungeonTabBarFlags =
22 ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable |
23 ImGuiTabBarFlags_FittingPolicyResizeDown |
24 ImGuiTabBarFlags_TabListPopupButton;
25
26constexpr ImGuiTableFlags kDungeonTableFlags =
27 ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable |
28 ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter |
29 ImGuiTableFlags_BordersV;
30
41class DungeonEditor : public Editor {
42 public:
43 explicit DungeonEditor(Rom* rom = nullptr) : rom_(rom) {
45 }
46
47 void Initialize() override;
48 absl::Status Load() override;
49 absl::Status Update() override;
50 absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
51 absl::Status Redo() override { return absl::UnimplementedError("Redo"); }
52 absl::Status Cut() override { return absl::UnimplementedError("Cut"); }
53 absl::Status Copy() override { return absl::UnimplementedError("Copy"); }
54 absl::Status Paste() override { return absl::UnimplementedError("Paste"); }
55 absl::Status Find() override { return absl::UnimplementedError("Find"); }
56 absl::Status Save() override { return absl::UnimplementedError("Save"); }
57
58 void add_room(int i) { active_rooms_.push_back(i); }
59
60 // Set the ROM pointer
61 void set_rom(Rom* rom) { rom_ = rom; }
62
63 // Get the ROM pointer
64 Rom* rom() const { return rom_; }
65
66 private:
67 absl::Status RefreshGraphics();
68
70
71 absl::Status UpdateDungeonRoomView();
72
73 void DrawToolset();
74 void DrawRoomSelector();
76
77 void DrawDungeonTabView();
78 void DrawDungeonCanvas(int room_id);
79
80 void DrawRoomGraphics();
81 void DrawTileSelector();
82 void DrawObjectRenderer();
83
85 void DrawUsageStats();
86 void DrawUsageGrid();
87 void RenderSetUsage(const absl::flat_hash_map<uint16_t, int>& usage_map,
88 uint16_t& selected_set, int spriteset_offset = 0x00);
89
98
102
103 bool is_loaded_ = false;
104 bool object_loaded_ = false;
105 bool palette_showing_ = false;
106 bool refresh_graphics_ = false;
107
109 uint16_t current_room_id_ = 0;
112
113 ImVector<int> active_rooms_;
114
120
124
126 std::array<gfx::Bitmap, kNumGfxSheets> graphics_bin_;
127
128 std::vector<gfx::Bitmap*> room_gfx_sheets_;
129 std::vector<zelda3::Room> rooms_;
130 std::vector<zelda3::RoomEntrance> entrances_;
132
133 absl::flat_hash_map<uint16_t, int> spriteset_usage_;
134 absl::flat_hash_map<uint16_t, int> blockset_usage_;
135 absl::flat_hash_map<uint16_t, int> palette_usage_;
136
137 std::vector<int64_t> room_size_pointers_;
138 std::vector<int64_t> room_sizes_;
139
140 uint16_t selected_blockset_ = 0xFFFF; // 0xFFFF indicates no selection
141 uint16_t selected_spriteset_ = 0xFFFF;
142 uint16_t selected_palette_ = 0xFFFF;
143
144 uint64_t total_room_size_ = 0;
145
146 std::unordered_map<int, int> room_size_addresses_;
147 std::unordered_map<int, ImVec4> room_palette_;
148
149 absl::Status status_;
150
152};
153
154} // namespace editor
155} // namespace yaze
156
157#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:59
absl::flat_hash_map< uint16_t, int > spriteset_usage_
absl::Status Update() override
std::vector< zelda3::RoomEntrance > entrances_
std::unordered_map< int, ImVec4 > room_palette_
absl::Status Cut() override
absl::flat_hash_map< uint16_t, int > blockset_usage_
absl::flat_hash_map< uint16_t, int > palette_usage_
std::vector< zelda3::Room > rooms_
void RenderSetUsage(const absl::flat_hash_map< uint16_t, int > &usage_map, uint16_t &selected_set, int spriteset_offset=0x00)
std::vector< gfx::Bitmap * > room_gfx_sheets_
gfx::SnesPalette current_palette_
gfx::PaletteGroup current_palette_group_
void DrawDungeonCanvas(int room_id)
std::unordered_map< int, int > room_size_addresses_
absl::Status Redo() override
DungeonEditor(Rom *rom=nullptr)
zelda3::DungeonObjectRenderer object_renderer_
absl::Status Paste() override
std::vector< int64_t > room_sizes_
absl::Status Save() override
std::vector< int64_t > room_size_pointers_
absl::Status Load() override
std::array< gfx::Bitmap, kNumGfxSheets > graphics_bin_
absl::Status Copy() override
absl::Status Find() override
absl::Status Undo() override
EditorType type_
Definition editor.h:92
Manage graphics group configurations in a Rom.
Allows the user to view and edit in game palettes.
Represents a bitmap image.
Definition bitmap.h:66
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Represents a canvas for drawing and manipulating graphics.
Definition canvas.h:36
Renders dungeon objects from Link to the Past.
Editors are the view controllers for the application.
constexpr ImGuiTableFlags kDungeonTableFlags
constexpr ImGuiTabItemFlags kDungeonTabFlags
constexpr ImGuiTabBarFlags kDungeonTabBarFlags
Main namespace for the application.
Definition controller.cc:18
Represents a group of palettes.