update tile16 editor init and error handling
This commit is contained in:
@@ -38,17 +38,30 @@ using ImGui::TableNextColumn;
|
|||||||
using ImGui::TableNextRow;
|
using ImGui::TableNextRow;
|
||||||
using ImGui::TableSetupColumn;
|
using ImGui::TableSetupColumn;
|
||||||
|
|
||||||
absl::Status Tile16Editor::Update() {
|
absl::Status Tile16Editor::InitBlockset(
|
||||||
if (rom()->is_loaded() && !map_blockset_loaded_) {
|
gfx::Bitmap* tile16_blockset_bmp, gfx::Bitmap current_gfx_bmp,
|
||||||
RETURN_IF_ERROR(LoadTile8());
|
const std::vector<gfx::Bitmap>& tile16_individual,
|
||||||
ImVector<std::string> tile16_names;
|
uint8_t all_tiles_types[0x200]) {
|
||||||
for (int i = 0; i < 0x200; ++i) {
|
all_tiles_types_ = all_tiles_types;
|
||||||
std::string str = core::UppercaseHexByte(all_tiles_types_[i]);
|
tile16_blockset_bmp_ = tile16_blockset_bmp;
|
||||||
tile16_names.push_back(str);
|
tile16_individual_ = tile16_individual;
|
||||||
}
|
current_gfx_bmp_ = current_gfx_bmp;
|
||||||
|
tile8_gfx_data_ = current_gfx_bmp_.vector();
|
||||||
|
RETURN_IF_ERROR(LoadTile8());
|
||||||
|
ImVector<std::string> tile16_names;
|
||||||
|
for (int i = 0; i < 0x200; ++i) {
|
||||||
|
std::string str = core::UppercaseHexByte(all_tiles_types_[i]);
|
||||||
|
tile16_names.push_back(str);
|
||||||
|
}
|
||||||
|
|
||||||
*tile8_source_canvas_.mutable_labels(0) = tile16_names;
|
*tile8_source_canvas_.mutable_labels(0) = tile16_names;
|
||||||
*tile8_source_canvas_.custom_labels_enabled() = true;
|
*tile8_source_canvas_.custom_labels_enabled() = true;
|
||||||
|
return absl::OkStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
absl::Status Tile16Editor::Update() {
|
||||||
|
if (!map_blockset_loaded_) {
|
||||||
|
return absl::InvalidArgumentError("Blockset not initialized, open a ROM.");
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_IF_ERROR(DrawMenu());
|
RETURN_IF_ERROR(DrawMenu());
|
||||||
@@ -367,6 +380,16 @@ absl::Status Tile16Editor::UpdateTransferTileCanvas() {
|
|||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
absl::Status Tile16Editor::SetCurrentTile(int id) {
|
||||||
|
current_tile16_ = id;
|
||||||
|
current_tile16_bmp_ = &tile16_individual_[id];
|
||||||
|
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
||||||
|
RETURN_IF_ERROR(
|
||||||
|
current_tile16_bmp_->ApplyPalette(ow_main_pal_group[current_palette_]));
|
||||||
|
rom()->RenderBitmap(current_tile16_bmp_);
|
||||||
|
return absl::OkStatus();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace editor
|
} // namespace editor
|
||||||
} // namespace app
|
} // namespace app
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
@@ -29,6 +29,11 @@ namespace editor {
|
|||||||
*/
|
*/
|
||||||
class Tile16Editor : public context::GfxContext, public SharedRom {
|
class Tile16Editor : public context::GfxContext, public SharedRom {
|
||||||
public:
|
public:
|
||||||
|
absl::Status InitBlockset(gfx::Bitmap* tile16_blockset_bmp,
|
||||||
|
gfx::Bitmap current_gfx_bmp,
|
||||||
|
const std::vector<gfx::Bitmap>& tile16_individual,
|
||||||
|
uint8_t all_tiles_types[0x200]);
|
||||||
|
|
||||||
absl::Status Update();
|
absl::Status Update();
|
||||||
absl::Status DrawMenu();
|
absl::Status DrawMenu();
|
||||||
|
|
||||||
@@ -44,28 +49,9 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
|
|
||||||
absl::Status UpdateTransferTileCanvas();
|
absl::Status UpdateTransferTileCanvas();
|
||||||
|
|
||||||
void InitBlockset(gfx::Bitmap* tile16_blockset_bmp,
|
|
||||||
gfx::Bitmap current_gfx_bmp,
|
|
||||||
const std::vector<gfx::Bitmap>& tile16_individual,
|
|
||||||
uint8_t all_tiles_types[0x200]) {
|
|
||||||
all_tiles_types_ = all_tiles_types;
|
|
||||||
tile16_blockset_bmp_ = tile16_blockset_bmp;
|
|
||||||
tile16_individual_ = tile16_individual;
|
|
||||||
current_gfx_bmp_ = current_gfx_bmp;
|
|
||||||
tile8_gfx_data_ = current_gfx_bmp_.vector();
|
|
||||||
}
|
|
||||||
|
|
||||||
absl::Status LoadTile8();
|
absl::Status LoadTile8();
|
||||||
|
|
||||||
absl::Status set_tile16(int id) {
|
absl::Status SetCurrentTile(int id);
|
||||||
current_tile16_ = id;
|
|
||||||
current_tile16_bmp_ = &tile16_individual_[id];
|
|
||||||
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
|
||||||
RETURN_IF_ERROR(
|
|
||||||
current_tile16_bmp_->ApplyPalette(ow_main_pal_group[current_palette_]));
|
|
||||||
rom()->RenderBitmap(current_tile16_bmp_);
|
|
||||||
return absl::OkStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool map_blockset_loaded_ = false;
|
bool map_blockset_loaded_ = false;
|
||||||
@@ -79,9 +65,6 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
core::NotifyValue<uint32_t> notify_tile16;
|
core::NotifyValue<uint32_t> notify_tile16;
|
||||||
core::NotifyValue<uint8_t> notify_palette;
|
core::NotifyValue<uint8_t> notify_palette;
|
||||||
|
|
||||||
// Texture ID for the canvas
|
|
||||||
int texture_id;
|
|
||||||
|
|
||||||
// Various options for the Tile16 Editor
|
// Various options for the Tile16 Editor
|
||||||
bool x_flip;
|
bool x_flip;
|
||||||
bool y_flip;
|
bool y_flip;
|
||||||
@@ -99,7 +82,6 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
gui::Canvas tile16_edit_canvas_{"Tile16EditCanvas", ImVec2(0x40, 0x40),
|
gui::Canvas tile16_edit_canvas_{"Tile16EditCanvas", ImVec2(0x40, 0x40),
|
||||||
gui::CanvasGridSize::k64x64};
|
gui::CanvasGridSize::k64x64};
|
||||||
gfx::Bitmap* current_tile16_bmp_;
|
gfx::Bitmap* current_tile16_bmp_;
|
||||||
gfx::Bitmap* current_tile8_bmp_;
|
|
||||||
|
|
||||||
// Tile8 canvas to get the tile to drawing in the tile16_edit_canvas_
|
// Tile8 canvas to get the tile to drawing in the tile16_edit_canvas_
|
||||||
gui::Canvas tile8_source_canvas_{
|
gui::Canvas tile8_source_canvas_{
|
||||||
@@ -107,11 +89,9 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
ImVec2(core::kTilesheetWidth * 4, core::kTilesheetHeight * 0x10 * 4),
|
ImVec2(core::kTilesheetWidth * 4, core::kTilesheetHeight * 0x10 * 4),
|
||||||
gui::CanvasGridSize::k32x32};
|
gui::CanvasGridSize::k32x32};
|
||||||
gfx::Bitmap current_gfx_bmp_;
|
gfx::Bitmap current_gfx_bmp_;
|
||||||
std::vector<gfx::Tilesheet> current_tilesheets_;
|
|
||||||
|
|
||||||
gui::Canvas transfer_canvas_;
|
gui::Canvas transfer_canvas_;
|
||||||
gfx::Bitmap transfer_blockset_bmp_;
|
gfx::Bitmap transfer_blockset_bmp_;
|
||||||
gfx::Bitmap transfer_current_bmp_;
|
|
||||||
|
|
||||||
std::vector<Bytes> tile16_individual_data_;
|
std::vector<Bytes> tile16_individual_data_;
|
||||||
std::vector<gfx::Bitmap> tile16_individual_;
|
std::vector<gfx::Bitmap> tile16_individual_;
|
||||||
|
|||||||
@@ -75,9 +75,9 @@ void OverworldEditor::InitializeZeml() {
|
|||||||
absl::Status OverworldEditor::Update() {
|
absl::Status OverworldEditor::Update() {
|
||||||
status_ = absl::OkStatus();
|
status_ = absl::OkStatus();
|
||||||
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
||||||
tile16_editor_.InitBlockset(&tile16_blockset_bmp_, current_gfx_bmp_,
|
RETURN_IF_ERROR(tile16_editor_.InitBlockset(
|
||||||
tile16_individual_,
|
&tile16_blockset_bmp_, current_gfx_bmp_, tile16_individual_,
|
||||||
*overworld_.mutable_all_tiles_types());
|
*overworld_.mutable_all_tiles_types()));
|
||||||
gfx_group_editor_.InitBlockset(&tile16_blockset_bmp_);
|
gfx_group_editor_.InitBlockset(&tile16_blockset_bmp_);
|
||||||
RETURN_IF_ERROR(LoadEntranceTileTypes(*rom()));
|
RETURN_IF_ERROR(LoadEntranceTileTypes(*rom()));
|
||||||
all_gfx_loaded_ = true;
|
all_gfx_loaded_ = true;
|
||||||
@@ -750,7 +750,7 @@ absl::Status OverworldEditor::DrawTile16Selector() {
|
|||||||
int grid_x = static_cast<int>(tile_pos.x / 32);
|
int grid_x = static_cast<int>(tile_pos.x / 32);
|
||||||
int grid_y = static_cast<int>(tile_pos.y / 32);
|
int grid_y = static_cast<int>(tile_pos.y / 32);
|
||||||
int id = grid_x + grid_y * 8;
|
int id = grid_x + grid_y * 8;
|
||||||
RETURN_IF_ERROR(tile16_editor_.set_tile16(id));
|
RETURN_IF_ERROR(tile16_editor_.SetCurrentTile(id));
|
||||||
show_tile16_editor_ = true;
|
show_tile16_editor_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user