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 void set_rom(Rom* rom) { rom_ = rom; }
61 Rom* rom() const { return rom_; }
62
63 private:
64 absl::Status RefreshGraphics();
65
67
68 absl::Status UpdateDungeonRoomView();
69
70 void DrawToolset();
71 void DrawRoomSelector();
73
74 void DrawDungeonTabView();
75 void DrawDungeonCanvas(int room_id);
76
77 void DrawRoomGraphics();
78 void DrawTileSelector();
79 void DrawObjectRenderer();
80
82 void DrawUsageStats();
83 void DrawUsageGrid();
84 void RenderSetUsage(const absl::flat_hash_map<uint16_t, int>& usage_map,
85 uint16_t& selected_set, int spriteset_offset = 0x00);
86
95
98
99 bool is_loaded_ = false;
100 bool object_loaded_ = false;
101 bool palette_showing_ = false;
102 bool refresh_graphics_ = false;
103
105 uint16_t current_room_id_ = 0;
108
109 ImVector<int> active_rooms_;
110
116
117 gui::Canvas canvas_{"##DungeonCanvas", ImVec2(0x200, 0x200)};
118 gui::Canvas room_gfx_canvas_{"##RoomGfxCanvas",
119 ImVec2(0x100 + 1, 0x10 * 0x40 + 1)};
121
122 std::array<gfx::Bitmap, kNumGfxSheets> graphics_bin_;
123
124 std::array<zelda3::Room, 0x128> rooms_ = {};
125 std::array<zelda3::RoomEntrance, 0x8C> entrances_ = {};
126 // zelda3::DungeonObjectRenderer object_renderer_;
127
128 absl::flat_hash_map<uint16_t, int> spriteset_usage_;
129 absl::flat_hash_map<uint16_t, int> blockset_usage_;
130 absl::flat_hash_map<uint16_t, int> palette_usage_;
131
132 std::vector<int64_t> room_size_pointers_;
133 std::vector<int64_t> room_sizes_;
134
135 uint16_t selected_blockset_ = 0xFFFF; // 0xFFFF indicates no selection
136 uint16_t selected_spriteset_ = 0xFFFF;
137 uint16_t selected_palette_ = 0xFFFF;
138
139 uint64_t total_room_size_ = 0;
140
141 std::unordered_map<int, int> room_size_addresses_;
142 std::unordered_map<int, ImVec4> room_palette_;
143
144 absl::Status status_;
145
147};
148
149} // namespace editor
150} // namespace yaze
151
152#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:58
absl::flat_hash_map< uint16_t, int > spriteset_usage_
absl::Status Update() override
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_
void RenderSetUsage(const absl::flat_hash_map< uint16_t, int > &usage_map, uint16_t &selected_set, int spriteset_offset=0x00)
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)
absl::Status Paste() override
std::vector< int64_t > room_sizes_
std::array< zelda3::RoomEntrance, 0x8C > entrances_
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
std::array< zelda3::Room, 0x128 > rooms_
EditorType type_
Definition editor.h:90
Manage graphics group configurations in a Rom.
Allows the user to view and edit in game palettes.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Represents a canvas for drawing and manipulating graphics.
Definition canvas.h:37
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.