housekeeping

This commit is contained in:
scawful
2024-07-20 09:02:04 -04:00
parent 94690f9175
commit 5fcd2a8f7e
7 changed files with 43 additions and 18 deletions

View File

@@ -228,6 +228,9 @@ void GfxGroupEditor::DrawSpritesetViewer(bool sheet_only) {
namespace { namespace {
void DrawPaletteFromPaletteGroup(gfx::SnesPalette &palette) { void DrawPaletteFromPaletteGroup(gfx::SnesPalette &palette) {
if (palette.empty()) {
return;
}
for (int n = 0; n < palette.size(); n++) { for (int n = 0; n < palette.size(); n++) {
PushID(n); PushID(n);
if ((n % 8) != 0) SameLine(0.0f, GetStyle().ItemSpacing.y); if ((n % 8) != 0) SameLine(0.0f, GetStyle().ItemSpacing.y);

View File

@@ -183,7 +183,7 @@ void GraphicsEditor::DrawGfxEditToolset() {
} }
TableNextColumn(); TableNextColumn();
gui::InputHexByte("Tile Size", &tile_size_, 0x01); gui::InputHexByte("Tile Size", &tile_size_);
ImGui::EndTable(); ImGui::EndTable();
} }

View File

@@ -43,6 +43,8 @@ using ImGui::TableNextRow;
using ImGui::TableSetupColumn; using ImGui::TableSetupColumn;
using ImGui::Text; using ImGui::Text;
constexpr uint16_t kOverworldMapSize = 0x200;
void OverworldEditor::InitializeZeml() { void OverworldEditor::InitializeZeml() {
// Load zeml string from layouts/overworld.zeml // Load zeml string from layouts/overworld.zeml
std::string layout = gui::zeml::LoadFile("overworld.zeml"); std::string layout = gui::zeml::LoadFile("overworld.zeml");
@@ -461,8 +463,8 @@ void OverworldEditor::DrawOverworldMaps() {
int yy = 0; int yy = 0;
for (int i = 0; i < 0x40; i++) { for (int i = 0; i < 0x40; i++) {
int world_index = i + (current_world_ * 0x40); int world_index = i + (current_world_ * 0x40);
int map_x = (xx * 0x200 * ow_map_canvas_.global_scale()); int map_x = (xx * kOverworldMapSize * ow_map_canvas_.global_scale());
int map_y = (yy * 0x200 * ow_map_canvas_.global_scale()); int map_y = (yy * kOverworldMapSize * ow_map_canvas_.global_scale());
ow_map_canvas_.DrawBitmap(maps_bmp_[world_index], map_x, map_y, ow_map_canvas_.DrawBitmap(maps_bmp_[world_index], map_x, map_y,
ow_map_canvas_.global_scale()); ow_map_canvas_.global_scale());
xx++; xx++;
@@ -531,7 +533,8 @@ void OverworldEditor::RenderUpdatedMapBitmap(const ImVec2 &click_position,
// Update the bitmap's pixel data based on the start_position and tile_data // Update the bitmap's pixel data based on the start_position and tile_data
for (int y = 0; y < tile_size; ++y) { for (int y = 0; y < tile_size; ++y) {
for (int x = 0; x < tile_size; ++x) { for (int x = 0; x < tile_size; ++x) {
int pixel_index = (start_position.y + y) * 0x200 + (start_position.x + x); int pixel_index =
(start_position.y + y) * kOverworldMapSize + (start_position.x + x);
current_bitmap.WriteToPixel(pixel_index, tile_data[y * tile_size + x]); current_bitmap.WriteToPixel(pixel_index, tile_data[y * tile_size + x]);
} }
} }
@@ -797,7 +800,8 @@ absl::Status OverworldEditor::DrawAreaGraphics() {
palette_ = overworld_.AreaPalette(); palette_ = overworld_.AreaPalette();
gfx::Bitmap bmp; gfx::Bitmap bmp;
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap( RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
0x80, 0x200, 0x08, overworld_.current_graphics(), bmp, palette_)); 0x80, kOverworldMapSize, 0x08, overworld_.current_graphics(), bmp,
palette_));
current_graphics_set_[current_map_] = bmp; current_graphics_set_[current_map_] = bmp;
} }
} }
@@ -1605,7 +1609,7 @@ absl::Status OverworldEditor::LoadGraphics() {
palette_ = overworld_.AreaPalette(); palette_ = overworld_.AreaPalette();
// Create the area graphics image // Create the area graphics image
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(0x80, 0x200, 0x40, RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(0x80, kOverworldMapSize, 0x40,
overworld_.current_graphics(), overworld_.current_graphics(),
current_gfx_bmp_, palette_)); current_gfx_bmp_, palette_));
@@ -1650,7 +1654,8 @@ absl::Status OverworldEditor::LoadGraphics() {
overworld_.set_current_map(i); overworld_.set_current_map(i);
auto palette = overworld_.AreaPalette(); auto palette = overworld_.AreaPalette();
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap( RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
0x200, 0x200, 0x200, overworld_.BitmapData(), maps_bmp_[i], palette)); kOverworldMapSize, kOverworldMapSize, 0x200, overworld_.BitmapData(),
maps_bmp_[i], palette));
} }
if (flags()->overworld.kDrawOverworldSprites) { if (flags()->overworld.kDrawOverworldSprites) {
@@ -1977,8 +1982,8 @@ absl::Status OverworldEditor::LoadAnimatedMaps() {
RETURN_IF_ERROR(map.BuildBitmap(blockset)); RETURN_IF_ERROR(map.BuildBitmap(blockset));
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap( RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
0x200, 0x200, 0x200, map.bitmap_data(), animated_maps_[world_index], kOverworldMapSize, kOverworldMapSize, 0x200, map.bitmap_data(),
*map.mutable_current_palette())); animated_maps_[world_index], *map.mutable_current_palette()));
animated_built[world_index] = true; animated_built[world_index] = true;
} }

View File

@@ -137,6 +137,7 @@ class SnesPalette {
} }
auto size() const { return colors.size(); } auto size() const { return colors.size(); }
auto empty() const { return colors.empty(); }
SnesColor& operator[](int i) { SnesColor& operator[](int i) {
if (i > size_) { if (i > size_) {

View File

@@ -503,7 +503,7 @@ struct GfxSheetAssetBrowser {
ImGui::GetColorU32(ImVec4(1, 1, 1, 1))); ImGui::GetColorU32(ImVec4(1, 1, 1, 1)));
draw_list->AddText( draw_list->AddText(
ImVec2(box_min.x, box_max.y - ImGui::GetFontSize()), ImVec2(box_min.x, box_max.y - ImGui::GetFontSize()),
label_col, "ID"); label_col, absl::StrFormat("%X", item_data->ID).c_str());
} }
} }

View File

@@ -47,9 +47,9 @@ bool InputScalarLeft(const char* label, ImGuiDataType data_type, void* p_data,
// value_changed = DataTypeApplyFromText(buf, data_type, p_data, format); // value_changed = DataTypeApplyFromText(buf, data_type, p_data, format);
// } else { // } else {
const float button_size = GetFrameHeight(); const float button_size = GetFrameHeight();
ImGui::AlignTextToFramePadding(); AlignTextToFramePadding();
ImGui::Text("%s", label); Text("%s", label);
ImGui::SameLine(); SameLine();
BeginGroup(); // The only purpose of the group here is to allow the caller BeginGroup(); // The only purpose of the group here is to allow the caller
// to query item data e.g. IsItemActive() // to query item data e.g. IsItemActive()
PushID(label); PushID(label);
@@ -57,12 +57,12 @@ bool InputScalarLeft(const char* label, ImGuiDataType data_type, void* p_data,
1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2)); 1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
// Place the label on the left of the input field // Place the label on the left of the input field
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, PushStyleVar(ImGuiStyleVar_ItemSpacing,
ImVec2{style.ItemSpacing.x, style.ItemSpacing.y}); ImVec2{style.ItemSpacing.x, style.ItemSpacing.y});
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, PushStyleVar(ImGuiStyleVar_FramePadding,
ImVec2{style.FramePadding.x, style.FramePadding.y}); ImVec2{style.FramePadding.x, style.FramePadding.y});
ImGui::SetNextItemWidth(input_width); SetNextItemWidth(input_width);
if (InputText("", buf, IM_ARRAYSIZE(buf), if (InputText("", buf, IM_ARRAYSIZE(buf),
flags)) // PushId(label) + "" gives us the expected ID flags)) // PushId(label) + "" gives us the expected ID
// from outside point of view // from outside point of view
@@ -173,6 +173,19 @@ bool InputHexByte(const char* label, uint8_t* data, float input_width,
ImGuiInputTextFlags_CharsHexadecimal, no_step); ImGuiInputTextFlags_CharsHexadecimal, no_step);
} }
bool InputHexByte(const char* label, uint8_t* data, uint8_t max_value,
float input_width, bool no_step) {
if (ImGui::InputScalarLeft(label, ImGuiDataType_U8, data, &kStepOneHex,
&kStepFastHex, "%02X", input_width,
ImGuiInputTextFlags_CharsHexadecimal, no_step)) {
if (*data > max_value) {
*data = max_value;
}
return true;
}
return false;
}
void ItemLabel(absl::string_view title, ItemLabelFlags flags) { void ItemLabel(absl::string_view title, ItemLabelFlags flags) {
ImGuiWindow* window = ImGui::GetCurrentWindow(); ImGuiWindow* window = ImGui::GetCurrentWindow();
const ImVec2 lineStart = ImGui::GetCursorScreenPos(); const ImVec2 lineStart = ImGui::GetCursorScreenPos();

View File

@@ -31,6 +31,9 @@ IMGUI_API bool InputHexWord(const char* label, int16_t* data,
IMGUI_API bool InputHexByte(const char* label, uint8_t* data, IMGUI_API bool InputHexByte(const char* label, uint8_t* data,
float input_width = 50.f, bool no_step = false); float input_width = 50.f, bool no_step = false);
IMGUI_API bool InputHexByte(const char* label, uint8_t* data, uint8_t max_value,
float input_width = 50.f, bool no_step = false);
IMGUI_API bool ListBox(const char* label, int* current_item, IMGUI_API bool ListBox(const char* label, int* current_item,
const std::vector<std::string>& items, const std::vector<std::string>& items,
int height_in_items = -1); int height_in_items = -1);