yaze 0.2.0
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 "app/core/common.h"
5#include "app/core/labeling.h"
9#include "app/gui/canvas.h"
10#include "app/gui/icons.h"
11#include "app/rom.h"
12#include "imgui/imgui.h"
13#include "zelda3/dungeon/room.h"
16
17namespace yaze {
18namespace app {
19namespace editor {
20
21constexpr ImGuiTabItemFlags kDungeonTabFlags =
22 ImGuiTabItemFlags_Trailing | ImGuiTabItemFlags_NoTooltip;
23
24constexpr ImGuiTabBarFlags kDungeonTabBarFlags =
25 ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable |
26 ImGuiTabBarFlags_FittingPolicyResizeDown |
27 ImGuiTabBarFlags_TabListPopupButton;
28
29constexpr ImGuiTableFlags kDungeonTableFlags =
30 ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable |
31 ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter |
32 ImGuiTableFlags_BordersV;
33
44class DungeonEditor : public Editor,
45 public SharedRom,
47 public:
49
50 absl::Status Update() override;
51 absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
52 absl::Status Redo() override { return absl::UnimplementedError("Redo"); }
53 absl::Status Cut() override { return absl::UnimplementedError("Cut"); }
54 absl::Status Copy() override { return absl::UnimplementedError("Copy"); }
55 absl::Status Paste() override { return absl::UnimplementedError("Paste"); }
56 absl::Status Find() override { return absl::UnimplementedError("Find"); }
57
58 void add_room(int i) { active_rooms_.push_back(i); }
59
60 private:
61 absl::Status Initialize();
62 absl::Status RefreshGraphics();
63
65
66 absl::Status UpdateDungeonRoomView();
67
68 void DrawToolset();
69 void DrawRoomSelector();
71
72 void DrawDungeonTabView();
73 void DrawDungeonCanvas(int room_id);
74
75 void DrawRoomGraphics();
76 void DrawTileSelector();
77 void DrawObjectRenderer();
78
80 void DrawUsageStats();
81 void DrawUsageGrid();
82 void RenderSetUsage(const absl::flat_hash_map<uint16_t, int>& usage_map,
83 uint16_t& selected_set, int spriteset_offset = 0x00);
84
93
97
98 bool is_loaded_ = false;
99 bool object_loaded_ = false;
100 bool palette_showing_ = false;
101 bool refresh_graphics_ = false;
102
104 uint16_t current_room_id_ = 0;
107
108 ImVector<int> active_rooms_;
109
115
119
121 std::array<gfx::Bitmap, kNumGfxSheets> graphics_bin_;
122
123 std::vector<gfx::Bitmap*> room_gfx_sheets_;
124 std::vector<zelda3::dungeon::Room> rooms_;
125 std::vector<zelda3::dungeon::RoomEntrance> entrances_;
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
134 uint16_t selected_blockset_ = 0xFFFF; // 0xFFFF indicates no selection
135 uint16_t selected_spriteset_ = 0xFFFF;
136 uint16_t selected_palette_ = 0xFFFF;
137
138 uint64_t total_room_size_ = 0;
139
140 std::unordered_map<int, int> room_size_addresses_;
141 std::unordered_map<int, ImVec4> room_palette_;
142
143 absl::Status status_;
144};
145
146} // namespace editor
147} // namespace app
148} // namespace yaze
149
150#endif
A class to hold a shared pointer to a Rom object.
Definition rom.h:585
A class to manage experimental feature flags.
Definition common.h:30
DungeonEditor class for editing dungeons.
std::unordered_map< int, int > room_size_addresses_
absl::flat_hash_map< uint16_t, int > blockset_usage_
absl::Status Redo() override
std::vector< zelda3::dungeon::Room > rooms_
absl::Status Cut() override
std::array< gfx::Bitmap, kNumGfxSheets > graphics_bin_
absl::Status Undo() override
absl::flat_hash_map< uint16_t, int > palette_usage_
gfx::PaletteGroup current_palette_group_
std::vector< zelda3::dungeon::RoomEntrance > entrances_
absl::Status Copy() override
absl::Status Paste() override
std::vector< gfx::Bitmap * > room_gfx_sheets_
absl::Status Update() override
std::unordered_map< int, ImVec4 > room_palette_
zelda3::dungeon::DungeonObjectRenderer object_renderer_
absl::Status Find() override
std::vector< int64_t > room_size_pointers_
absl::flat_hash_map< uint16_t, int > spriteset_usage_
void RenderSetUsage(const absl::flat_hash_map< uint16_t, int > &usage_map, uint16_t &selected_set, int spriteset_offset=0x00)
Interface for editor classes.
Definition editor.h:39
Manage graphics group configurations in a Rom.
Allows the user to view and edit in game palettes.
Represents a bitmap image.
Definition bitmap.h:70
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Represents a canvas for drawing and manipulating graphics.
Definition canvas.h:36
constexpr ImGuiTableFlags kDungeonTableFlags
constexpr ImGuiTabBarFlags kDungeonTabBarFlags
constexpr ImGuiTabItemFlags kDungeonTabFlags
Definition common.cc:21
Represents a group of palettes.