Remove kDrawDungeonRoomGraphics feature and related code from FeatureFlags and DungeonEditor for improved clarity and performance. Update room loading and rendering methods to streamline graphics management using gfx::Arena.
This commit is contained in:
@@ -29,9 +29,6 @@ class FeatureFlags {
|
|||||||
// and tile32 save.
|
// and tile32 save.
|
||||||
bool kSaveWithChangeQueue = false;
|
bool kSaveWithChangeQueue = false;
|
||||||
|
|
||||||
// Attempt to run the dungeon room draw routine when opening a room.
|
|
||||||
bool kDrawDungeonRoomGraphics = true;
|
|
||||||
|
|
||||||
// Save dungeon map edits to the Rom.
|
// Save dungeon map edits to the Rom.
|
||||||
bool kSaveDungeonMaps = false;
|
bool kSaveDungeonMaps = false;
|
||||||
|
|
||||||
@@ -81,8 +78,6 @@ class FeatureFlags {
|
|||||||
result +=
|
result +=
|
||||||
"kSaveWithChangeQueue: " + std::to_string(get().kSaveWithChangeQueue) +
|
"kSaveWithChangeQueue: " + std::to_string(get().kSaveWithChangeQueue) +
|
||||||
"\n";
|
"\n";
|
||||||
result += "kDrawDungeonRoomGraphics: " +
|
|
||||||
std::to_string(get().kDrawDungeonRoomGraphics) + "\n";
|
|
||||||
result +=
|
result +=
|
||||||
"kSaveDungeonMaps: " + std::to_string(get().kSaveDungeonMaps) + "\n";
|
"kSaveDungeonMaps: " + std::to_string(get().kSaveDungeonMaps) + "\n";
|
||||||
result += "kLogToConsole: " + std::to_string(get().kLogToConsole) + "\n";
|
result += "kLogToConsole: " + std::to_string(get().kLogToConsole) + "\n";
|
||||||
@@ -128,9 +123,6 @@ struct FlagsMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DrawDungeonFlags() {
|
void DrawDungeonFlags() {
|
||||||
Checkbox("Draw Dungeon Room Graphics",
|
|
||||||
&FeatureFlags::get().kDrawDungeonRoomGraphics);
|
|
||||||
Separator();
|
|
||||||
Checkbox("Save Dungeon Maps", &FeatureFlags::get().kSaveDungeonMaps);
|
Checkbox("Save Dungeon Maps", &FeatureFlags::get().kSaveDungeonMaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "dungeon_editor.h"
|
#include "dungeon_editor.h"
|
||||||
|
|
||||||
#include "absl/container/flat_hash_map.h"
|
#include "absl/container/flat_hash_map.h"
|
||||||
#include "app/core/features.h"
|
|
||||||
#include "app/core/platform/renderer.h"
|
#include "app/core/platform/renderer.h"
|
||||||
#include "app/gfx/arena.h"
|
#include "app/gfx/arena.h"
|
||||||
#include "app/gfx/snes_palette.h"
|
#include "app/gfx/snes_palette.h"
|
||||||
@@ -47,20 +46,16 @@ absl::Status DungeonEditor::Load() {
|
|||||||
auto dungeon_man_pal_group = rom()->palette_group().dungeon_main;
|
auto dungeon_man_pal_group = rom()->palette_group().dungeon_main;
|
||||||
|
|
||||||
for (int i = 0; i < 0x100 + 40; i++) {
|
for (int i = 0; i < 0x100 + 40; i++) {
|
||||||
rooms_[i] = zelda3::LoadRoomFromRom(rom(), i);
|
rooms_[i] = zelda3::LoadRoomFromRom(rom_, i);
|
||||||
|
|
||||||
auto room_size = zelda3::CalculateRoomSize(rom(), i);
|
auto room_size = zelda3::CalculateRoomSize(rom_, i);
|
||||||
room_size_pointers_.push_back(room_size.room_size_pointer);
|
room_size_pointers_.push_back(room_size.room_size_pointer);
|
||||||
room_sizes_.push_back(room_size.room_size);
|
room_sizes_.push_back(room_size.room_size);
|
||||||
if (room_size.room_size_pointer != 0x0A8000) {
|
if (room_size.room_size_pointer != 0x0A8000) {
|
||||||
room_size_addresses_[i] = room_size.room_size_pointer;
|
room_size_addresses_[i] = room_size.room_size_pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (core::FeatureFlags::get().kDrawDungeonRoomGraphics) {
|
rooms_[i].LoadObjects();
|
||||||
rooms_[i].LoadRoomGraphics();
|
|
||||||
}
|
|
||||||
|
|
||||||
// rooms_[i].LoadObjects();
|
|
||||||
|
|
||||||
auto dungeon_palette_ptr = rom()->paletteset_ids[rooms_[i].palette][0];
|
auto dungeon_palette_ptr = rom()->paletteset_ids[rooms_[i].palette][0];
|
||||||
auto palette_id = rom()->ReadWord(0xDEC4B + dungeon_palette_ptr);
|
auto palette_id = rom()->ReadWord(0xDEC4B + dungeon_palette_ptr);
|
||||||
@@ -87,7 +82,6 @@ absl::Status DungeonEditor::Load() {
|
|||||||
ASSIGN_OR_RETURN(current_palette_group_,
|
ASSIGN_OR_RETURN(current_palette_group_,
|
||||||
gfx::CreatePaletteGroupFromLargePalette(full_palette_))
|
gfx::CreatePaletteGroupFromLargePalette(full_palette_))
|
||||||
|
|
||||||
graphics_bin_ = GraphicsSheetManager::GetInstance().gfx_sheets();
|
|
||||||
CalculateUsageStats();
|
CalculateUsageStats();
|
||||||
is_loaded_ = true;
|
is_loaded_ = true;
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
@@ -117,22 +111,26 @@ absl::Status DungeonEditor::Update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status DungeonEditor::RefreshGraphics() {
|
absl::Status DungeonEditor::RefreshGraphics() {
|
||||||
std::for_each_n(rooms_[current_room_id_].blocks().begin(), 8,
|
std::for_each_n(
|
||||||
[this](int block) -> absl::Status {
|
rooms_[current_room_id_].blocks().begin(), 8,
|
||||||
graphics_bin_[block].SetPaletteWithTransparent(
|
[this](int block) -> absl::Status {
|
||||||
current_palette_group_[current_palette_id_], 0);
|
gfx::Arena::Get().gfx_sheets()[block].SetPaletteWithTransparent(
|
||||||
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block]);
|
current_palette_group_[current_palette_id_], 0);
|
||||||
return absl::OkStatus();
|
Renderer::GetInstance().UpdateBitmap(
|
||||||
});
|
&gfx::Arena::Get().gfx_sheets()[block]);
|
||||||
|
return absl::OkStatus();
|
||||||
|
});
|
||||||
|
|
||||||
auto sprites_aux1_pal_group = rom()->palette_group().sprites_aux1;
|
auto sprites_aux1_pal_group = rom()->palette_group().sprites_aux1;
|
||||||
std::for_each_n(rooms_[current_room_id_].blocks().begin() + 8, 8,
|
std::for_each_n(
|
||||||
[this, &sprites_aux1_pal_group](int block) -> absl::Status {
|
rooms_[current_room_id_].blocks().begin() + 8, 8,
|
||||||
graphics_bin_[block].SetPaletteWithTransparent(
|
[this, &sprites_aux1_pal_group](int block) -> absl::Status {
|
||||||
sprites_aux1_pal_group[current_palette_id_], 0);
|
gfx::Arena::Get().gfx_sheets()[block].SetPaletteWithTransparent(
|
||||||
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block]);
|
sprites_aux1_pal_group[current_palette_id_], 0);
|
||||||
return absl::OkStatus();
|
Renderer::GetInstance().UpdateBitmap(
|
||||||
});
|
&gfx::Arena::Get().gfx_sheets()[block]);
|
||||||
|
return absl::OkStatus();
|
||||||
|
});
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,17 +474,26 @@ void DungeonEditor::DrawDungeonCanvas(int room_id) {
|
|||||||
SameLine();
|
SameLine();
|
||||||
|
|
||||||
if (Button("Load Room")) {
|
if (Button("Load Room")) {
|
||||||
rooms_[room_id].LoadRoomGraphics();
|
rooms_[room_id].LoadRoomGraphics(rooms_[room_id].blockset);
|
||||||
|
rooms_[room_id].RenderRoomGraphics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool show_objects = false;
|
||||||
|
ImGui::Checkbox("Show Objects", &show_objects);
|
||||||
|
|
||||||
ImGui::EndGroup();
|
ImGui::EndGroup();
|
||||||
|
|
||||||
canvas_.DrawBackground();
|
canvas_.DrawBackground();
|
||||||
canvas_.DrawContextMenu();
|
canvas_.DrawContextMenu();
|
||||||
if (is_loaded_) {
|
if (is_loaded_) {
|
||||||
for (const auto &object : rooms_[room_id].tile_objects_) {
|
canvas_.DrawBitmap(gfx::Arena::Get().bg1().bitmap(), 0, true);
|
||||||
canvas_.DrawOutline(object.x_, object.y_, object.width_ * 16,
|
canvas_.DrawBitmap(gfx::Arena::Get().bg2().bitmap(), 0, true);
|
||||||
object.height_ * 16);
|
|
||||||
|
if (show_objects) {
|
||||||
|
for (const auto &object : rooms_[room_id].tile_objects_) {
|
||||||
|
canvas_.DrawOutline(object.x_, object.y_, object.width_ * 16,
|
||||||
|
object.height_ * 16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
canvas_.DrawGrid();
|
canvas_.DrawGrid();
|
||||||
@@ -508,7 +515,9 @@ void DungeonEditor::DrawRoomGraphics() {
|
|||||||
top_left_y = room_gfx_canvas_.zero_point().y + height * current_block;
|
top_left_y = room_gfx_canvas_.zero_point().y + height * current_block;
|
||||||
}
|
}
|
||||||
room_gfx_canvas_.draw_list()->AddImage(
|
room_gfx_canvas_.draw_list()->AddImage(
|
||||||
(ImTextureID)(intptr_t)graphics_bin_[block].texture(),
|
(ImTextureID)(intptr_t)gfx::Arena::Get()
|
||||||
|
.gfx_sheets()[block]
|
||||||
|
.texture(),
|
||||||
ImVec2(room_gfx_canvas_.zero_point().x + 2, top_left_y),
|
ImVec2(room_gfx_canvas_.zero_point().x + 2, top_left_y),
|
||||||
ImVec2(room_gfx_canvas_.zero_point().x + 0x100,
|
ImVec2(room_gfx_canvas_.zero_point().x + 0x100,
|
||||||
room_gfx_canvas_.zero_point().y + offset));
|
room_gfx_canvas_.zero_point().y + offset));
|
||||||
|
|||||||
Reference in New Issue
Block a user