5#include "absl/status/status.h"
15#include "imgui/imgui.h"
23using ImGui::BeginChild;
24using ImGui::BeginMenu;
25using ImGui::BeginMenuBar;
26using ImGui::BeginTabBar;
27using ImGui::BeginTabItem;
28using ImGui::BeginTable;
33using ImGui::EndMenuBar;
34using ImGui::EndTabBar;
35using ImGui::EndTabItem;
37using ImGui::GetContentRegionAvail;
38using ImGui::Separator;
39using ImGui::TableHeadersRow;
40using ImGui::TableNextColumn;
41using ImGui::TableNextRow;
42using ImGui::TableSetupColumn;
47 std::array<uint8_t, 0x200> &all_tiles_types) {
54 tile16_blockset_bmp.
width(), tile16_blockset_bmp.
height(),
55 tile16_blockset_bmp.
depth(), tile16_blockset_bmp.
vector());
60 ImVector<std::string> tile16_names;
61 for (
int i = 0; i < 0x200; ++i) {
63 tile16_names.push_back(str);
67 return absl::OkStatus();
72 return absl::InvalidArgumentError(
"Blockset not initialized, open a ROM.");
76 if (BeginTabBar(
"Tile16 Editor Tabs")) {
82 return absl::OkStatus();
87 if (BeginMenu(
"View")) {
88 Checkbox(
"Show Collision Types",
96 return absl::OkStatus();
100 if (BeginTabItem(
"Tile16 Editing")) {
103 TableSetupColumn(
"Blockset", ImGuiTableColumnFlags_WidthFixed,
104 GetContentRegionAvail().x);
105 TableSetupColumn(
"Properties", ImGuiTableColumnFlags_WidthStretch,
106 GetContentRegionAvail().x);
117 if (
status_ != absl::OkStatus()) {
148 auto ow_main_pal_group =
rom()->palette_group().overworld_main;
155 return absl::OkStatus();
159 constexpr int tile8_size = 8;
160 constexpr int tile16_size = 16;
164 int tile_index_x =
static_cast<int>(click_position.x) / tile8_size;
165 int tile_index_y =
static_cast<int>(click_position.y) / tile8_size;
166 std::cout <<
"Tile Index X: " << tile_index_x << std::endl;
167 std::cout <<
"Tile Index Y: " << tile_index_y << std::endl;
170 ImVec2 start_position;
171 start_position.x = tile_index_x * 0x40;
172 start_position.y = tile_index_y * 0x40;
173 std::cout <<
"Start Position X: " << start_position.x << std::endl;
174 std::cout <<
"Start Position Y: " << start_position.y << std::endl;
177 for (
int y = 0; y < tile8_size; ++y) {
178 for (
int x = 0; x < tile8_size; ++x) {
180 (start_position.y + y) * tile16_size + ((start_position.x) + x);
181 int gfx_pixel_index = y * tile8_size + x;
188 return absl::OkStatus();
192 auto ow_main_pal_group =
rom()->palette_group().overworld_main;
194 if (BeginChild(
"Tile8 Selector", ImVec2(GetContentRegionAvail().x, 0x175),
224 if (BeginChild(
"Tile16 Editor Options",
225 ImVec2(GetContentRegionAvail().x, 0x50),
true)) {
241 return absl::OkStatus();
273 Checkbox(
"X Flip", &
x_flip);
274 Checkbox(
"Y Flip", &
y_flip);
277 return absl::OkStatus();
281 auto ow_main_pal_group =
rom()->palette_group().overworld_main;
284 std::vector<std::future<std::array<uint8_t, 0x40>>> futures;
286 for (
int index = 0; index < 1024; index++) {
287 auto task_function = [&]() {
288 std::array<uint8_t, 0x40> tile_data;
290 for (
int ty = 0; ty < 8; ty++) {
291 for (
int tx = 0; tx < 8; tx++) {
296 int position = tx + (ty * 0x08);
300 int x = (index % num_columns) * 8 + tx;
301 int y = (index / num_columns) * 8 + ty;
302 int gfx_position = x + (y * 0x100);
311 tile_data[position] = value;
316 futures.emplace_back(std::async(std::launch::async, task_function));
319 for (
auto &future : futures) {
321 auto tile_data = future.get();
324 tile_bitmap.Create(0x08, 0x08, 0x08, tile_data);
332 return absl::OkStatus();
338 auto ow_main_pal_group =
rom()->palette_group().overworld_main;
342 return absl::OkStatus();
345#pragma mark - Tile16Transfer
348 if (BeginTabItem(
"Tile16 Transfer")) {
351 TableSetupColumn(
"Current ROM Tiles", ImGuiTableColumnFlags_WidthFixed,
352 GetContentRegionAvail().x / 2);
353 TableSetupColumn(
"Transfer ROM Tiles", ImGuiTableColumnFlags_WidthFixed,
354 GetContentRegionAvail().x / 2);
369 return absl::OkStatus();
374 if (Button(
"Load ROM")) {
401 return absl::OkStatus();
static std::string ShowOpenFileDialog()
ShowOpenFileDialog opens a file dialog and returns the selected filepath.
void UpdateBitmap(gfx::Bitmap *bitmap)
Used to update a bitmap on the screen.
static Renderer & GetInstance()
void RenderBitmap(gfx::Bitmap *bitmap)
Used to render a bitmap to the screen.
static Renderer & GetInstance()
gfx::Bitmap current_gfx_bmp_
util::NotifyValue< uint32_t > notify_tile16
absl::Status UpdateTransferTileCanvas()
bool map_blockset_loaded_
std::array< uint8_t, 0x200 > all_tiles_types_
gfx::SnesPalette palette_
absl::Status UpdateTile16Transfer()
absl::Status UpdateTile16Edit()
absl::Status UpdateBlockset()
absl::Status SetCurrentTile(int id)
absl::Status DrawToCurrentTile16(ImVec2 pos)
gui::Canvas transfer_canvas_
bool transfer_blockset_loaded_
gui::Canvas tile16_edit_canvas_
gui::Canvas blockset_canvas_
gui::Canvas tile8_source_canvas_
absl::Status transfer_status_
zelda3::Overworld transfer_overworld_
gfx::Bitmap tile16_blockset_bmp_
gfx::Bitmap transfer_blockset_bmp_
std::vector< gfx::Bitmap > current_gfx_individual_
std::array< gfx::Bitmap, kNumGfxSheets > transfer_gfx_
absl::Status DrawTileEditControls()
std::array< gfx::Bitmap, zelda3::kNumTile16Individual > & tile16_individual_
gfx::Bitmap current_tile16_bmp_
absl::Status InitBlockset(const gfx::Bitmap &tile16_blockset_bmp, const gfx::Bitmap ¤t_gfx_bmp, std::array< uint8_t, 0x200 > &all_tiles_types)
util::NotifyValue< uint8_t > notify_palette
Represents a bitmap image.
static std::unordered_map< uint8_t, gfx::Paletteset > palettesets_
#define TABLE_BORDERS_RESIZABLE
#define PRINT_IF_ERROR(expression)
#define RETURN_IF_ERROR(expression)
#define ASSIGN_OR_RETURN(type_variable_name, expression)
Editors are the view controllers for the application.
void BitmapCanvasPipeline(gui::Canvas &canvas, const gfx::Bitmap &bitmap, int width, int height, int tile_size, bool is_loaded, bool scrollbar, int canvas_id)
bool InputHexByte(const char *label, uint8_t *data, float input_width, bool no_step)
void BeginChildWithScrollbar(const char *str_id)
std::string HexByte(uint8_t byte, HexStringParams params)
Main namespace for the application.
absl::StatusOr< std::array< gfx::Bitmap, kNumGfxSheets > > LoadAllGraphicsData(Rom &rom, bool defer_render)
This function iterates over all graphics sheets in the Rom and loads them into memory....