yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
overworld_editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_OVERWORLDEDITOR_H
2#define YAZE_APP_EDITOR_OVERWORLDEDITOR_H
3
4#include "absl/status/status.h"
5#include "app/editor/editor.h"
9#include "app/gfx/bitmap.h"
11#include "app/gfx/tilemap.h"
12#include "app/gui/canvas.h"
13#include "app/gui/input.h"
14#include "app/gui/zeml.h"
15#include "app/rom.h"
17#include "imgui/imgui.h"
18
19namespace yaze {
20namespace editor {
21
22constexpr unsigned int k4BPP = 4;
23constexpr unsigned int kByteSize = 3;
24constexpr unsigned int kMessageIdSize = 5;
25constexpr unsigned int kNumSheetsToLoad = 223;
26constexpr unsigned int kOverworldMapSize = 0x200;
29constexpr ImVec2 kCurrentGfxCanvasSize(0x100 + 1, 0x10 * 0x40 + 1);
30constexpr ImVec2 kBlocksetCanvasSize(0x100 + 1, 0x4000 + 1);
31constexpr ImVec2 kGraphicsBinCanvasSize(0x100 + 1, kNumSheetsToLoad * 0x40 + 1);
32
33constexpr ImGuiTableFlags kOWMapFlags =
34 ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable |
35 ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingStretchProp;
36constexpr ImGuiTableFlags kToolsetTableFlags = ImGuiTableFlags_SizingFixedFit;
37constexpr ImGuiTableFlags kOWEditFlags =
38 ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable |
39 ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter |
40 ImGuiTableFlags_BordersV;
41
42static constexpr absl::string_view kToolsetColumnNames[] = {
43 "#undoTool", "#redoTool", "#separator2", "#zoomOutTool",
44 "#zoomInTool", "#separator", "#drawTool", "#history",
45 "#entranceTool", "#exitTool", "#itemTool", "#spriteTool",
46 "#transportTool", "#musicTool", "#separator3", "#tilemapTool",
47 "propertiesTool", "#separator4", "#experimentalTool", "#properties",
48 "#separator5"};
49
50constexpr absl::string_view kWorldList =
51 "Light World\0Dark World\0Extra World\0";
52
53constexpr absl::string_view kGamePartComboString = "Part 0\0Part 1\0Part 2\0";
54
55constexpr absl::string_view kTileSelectorTab = "##TileSelectorTabBar";
56constexpr absl::string_view kOWEditTable = "##OWEditTable";
57constexpr absl::string_view kOWMapTable = "#MapSettingsTable";
58
75class OverworldEditor : public Editor, public gfx::GfxContext {
76 public:
77 explicit OverworldEditor(Rom* rom) : rom_(rom) {
79 gfx_group_editor_.set_rom(rom);
80 }
81
82 void Initialize() override;
83 absl::Status Load() override;
84 absl::Status Update() final;
85 absl::Status Undo() override { return absl::UnimplementedError("Undo"); }
86 absl::Status Redo() override { return absl::UnimplementedError("Redo"); }
87 absl::Status Cut() override { return absl::UnimplementedError("Cut"); }
88 absl::Status Copy() override { return absl::UnimplementedError("Copy"); }
89 absl::Status Paste() override { return absl::UnimplementedError("Paste"); }
90 absl::Status Find() override { return absl::UnimplementedError("Find"); }
91 absl::Status Save() override;
92 absl::Status Clear() override;
93
94 int jump_to_tab() { return jump_to_tab_; }
95 int jump_to_tab_ = -1;
96
104 absl::Status LoadGraphics();
105
106 private:
108 void DrawToolset();
111
112 void RefreshChildMap(int i);
113 void RefreshOverworldMap();
114 absl::Status RefreshMapPalette();
116 absl::Status RefreshTile16Blockset();
117
118 void DrawOverworldEntrances(ImVec2 canvas_p, ImVec2 scrolling,
119 bool holes = false);
120 void DrawOverworldExits(ImVec2 zero, ImVec2 scrolling);
121 void DrawOverworldItems();
123
124 void DrawOverworldMaps();
125 void DrawOverworldEdits();
126 void RenderUpdatedMapBitmap(const ImVec2& click_position,
127 const std::vector<uint8_t>& tile_data);
128
138
143
149 absl::Status CheckForCurrentMap();
150 void CheckForMousePan();
151 void DrawOverworldCanvas();
152
153 absl::Status DrawTile16Selector();
154 void DrawTile8Selector();
155 absl::Status DrawAreaGraphics();
156 absl::Status DrawTileSelector();
157
158 absl::Status LoadSpriteGraphics();
159
161
162 absl::Status UpdateUsageStats();
163 void DrawUsageGrid();
164 void DrawDebugWindow();
165
176
179
194
203 int game_state_ = 1;
207
208 bool all_gfx_loaded_ = false;
217 bool current_map_lock_ = false;
218
220
222
226
228
233
234 std::array<gfx::Bitmap, zelda3::kNumOverworldMaps> maps_bmp_;
236 std::vector<gfx::Bitmap> sprite_previews_;
237
240
242
247
250
260
264
266 absl::Status status_;
267};
268} // namespace editor
269} // namespace yaze
270
271#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:58
EditorType type_
Definition editor.h:90
Manage graphics group configurations in a Rom.
absl::Status Clear() override
zelda3::OverworldItem current_item_
zelda3::OverworldEntranceTileTypes entrance_tiletypes_
zelda3::OverworldEntrance current_entrance_
absl::Status CheckForCurrentMap()
Check for changes to the overworld map. Calls RefreshOverworldMap and RefreshTile16Blockset on the cu...
absl::Status Cut() override
zelda3::OverworldBlockset refresh_blockset_
void DrawOverworldExits(ImVec2 zero, ImVec2 scrolling)
absl::Status Undo() override
zelda3::GameEntity * dragged_entity_
std::array< gfx::Bitmap, zelda3::kNumOverworldMaps > maps_bmp_
void CheckForOverworldEdits()
Check for changes to the overworld map.
zelda3::OverworldExit current_exit_
void RenderUpdatedMapBitmap(const ImVec2 &click_position, const std::vector< uint8_t > &tile_data)
absl::Status Redo() override
void CheckForSelectRectangle()
Draw and create the tile16 IDs that are currently selected.
absl::Status Load() override
std::vector< gfx::Bitmap > sprite_previews_
absl::Status Copy() override
absl::Status Paste() override
absl::Status LoadGraphics()
Load the Bitmap objects for each OverworldMap.
absl::Status Find() override
void DrawOverworldEntrances(ImVec2 canvas_p, ImVec2 scrolling, bool holes=false)
zelda3::GameEntity * current_entity_
Allows the user to view and edit in game palettes.
Popup window to edit Tile16 data.
Represents a bitmap image.
Definition bitmap.h:59
Shared graphical context across editors.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Represents a canvas for drawing and manipulating graphics.
Definition canvas.h:37
Base class for all overworld and dungeon entities.
Definition common.h:20
Represents the full Overworld data, light and dark world.
Definition overworld.h:111
A class for managing sprites in the overworld and underworld.
Definition sprite.h:279
Editors are the view controllers for the application.
constexpr ImVec2 kOverworldCanvasSize(kOverworldMapSize *8, kOverworldMapSize *8)
constexpr absl::string_view kOWMapTable
constexpr ImGuiTableFlags kOWMapFlags
constexpr unsigned int kOverworldMapSize
constexpr absl::string_view kWorldList
constexpr absl::string_view kGamePartComboString
constexpr ImGuiTableFlags kToolsetTableFlags
constexpr unsigned int kNumSheetsToLoad
constexpr ImVec2 kCurrentGfxCanvasSize(0x100+1, 0x10 *0x40+1)
constexpr ImVec2 kBlocksetCanvasSize(0x100+1, 0x4000+1)
constexpr ImVec2 kGraphicsBinCanvasSize(0x100+1, kNumSheetsToLoad *0x40+1)
constexpr unsigned int kByteSize
constexpr ImGuiTableFlags kOWEditFlags
constexpr absl::string_view kOWEditTable
constexpr absl::string_view kTileSelectorTab
constexpr unsigned int k4BPP
constexpr unsigned int kMessageIdSize
std::unordered_map< int, gfx::Bitmap > BitmapTable
Definition bitmap.h:199
std::vector< std::vector< uint16_t > > OverworldBlockset
Represents tile32 data for the overworld.
Main namespace for the application.
Definition controller.cc:12
Node for a zeml tree.
Definition zeml.h:124