tile16 editor ptr bug fix
This commit is contained in:
@@ -50,7 +50,7 @@ using ImGui::TableSetupColumn;
|
|||||||
using ImGui::Text;
|
using ImGui::Text;
|
||||||
|
|
||||||
absl::Status Tile16Editor::InitBlockset(
|
absl::Status Tile16Editor::InitBlockset(
|
||||||
gfx::Bitmap* tile16_blockset_bmp, gfx::Bitmap current_gfx_bmp,
|
const gfx::Bitmap& tile16_blockset_bmp, const gfx::Bitmap& current_gfx_bmp,
|
||||||
const std::vector<gfx::Bitmap>& tile16_individual,
|
const std::vector<gfx::Bitmap>& tile16_individual,
|
||||||
uint8_t all_tiles_types[0x200]) {
|
uint8_t all_tiles_types[0x200]) {
|
||||||
all_tiles_types_ = all_tiles_types;
|
all_tiles_types_ = all_tiles_types;
|
||||||
@@ -132,7 +132,7 @@ absl::Status Tile16Editor::UpdateBlockset() {
|
|||||||
{
|
{
|
||||||
blockset_canvas_.DrawContextMenu();
|
blockset_canvas_.DrawContextMenu();
|
||||||
blockset_canvas_.DrawTileSelector(32);
|
blockset_canvas_.DrawTileSelector(32);
|
||||||
blockset_canvas_.DrawBitmap(*tile16_blockset_bmp_, 0, map_blockset_loaded_);
|
blockset_canvas_.DrawBitmap(tile16_blockset_bmp_, 0, map_blockset_loaded_);
|
||||||
blockset_canvas_.DrawGrid();
|
blockset_canvas_.DrawGrid();
|
||||||
blockset_canvas_.DrawOverlay();
|
blockset_canvas_.DrawOverlay();
|
||||||
EndChild();
|
EndChild();
|
||||||
@@ -144,11 +144,11 @@ absl::Status Tile16Editor::UpdateBlockset() {
|
|||||||
|
|
||||||
if (notify_tile16.modified()) {
|
if (notify_tile16.modified()) {
|
||||||
current_tile16_ = notify_tile16.get();
|
current_tile16_ = notify_tile16.get();
|
||||||
current_tile16_bmp_ = &tile16_individual_[notify_tile16];
|
current_tile16_bmp_ = tile16_individual_[notify_tile16];
|
||||||
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
||||||
RETURN_IF_ERROR(current_tile16_bmp_->ApplyPalette(
|
RETURN_IF_ERROR(current_tile16_bmp_.ApplyPalette(
|
||||||
ow_main_pal_group[current_palette_]));
|
ow_main_pal_group[current_palette_]));
|
||||||
Renderer::GetInstance().RenderBitmap(current_tile16_bmp_);
|
Renderer::GetInstance().RenderBitmap(¤t_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ absl::Status Tile16Editor::DrawToCurrentTile16(ImVec2 click_position) {
|
|||||||
int pixel_index =
|
int pixel_index =
|
||||||
(start_position.y + y) * tile16_size + ((start_position.x) + x);
|
(start_position.y + y) * tile16_size + ((start_position.x) + x);
|
||||||
int gfx_pixel_index = y * tile8_size + x;
|
int gfx_pixel_index = y * tile8_size + x;
|
||||||
current_tile16_bmp_->WriteToPixel(
|
current_tile16_bmp_.WriteToPixel(
|
||||||
pixel_index,
|
pixel_index,
|
||||||
current_gfx_individual_[current_tile8_].data()[gfx_pixel_index]);
|
current_gfx_individual_[current_tile8_].data()[gfx_pixel_index]);
|
||||||
}
|
}
|
||||||
@@ -224,14 +224,14 @@ absl::Status Tile16Editor::UpdateTile16Edit() {
|
|||||||
if (BeginChild("Tile16 Editor Options",
|
if (BeginChild("Tile16 Editor Options",
|
||||||
ImVec2(GetContentRegionAvail().x, 0x50), true)) {
|
ImVec2(GetContentRegionAvail().x, 0x50), true)) {
|
||||||
tile16_edit_canvas_.DrawBackground();
|
tile16_edit_canvas_.DrawBackground();
|
||||||
tile16_edit_canvas_.DrawContextMenu(current_tile16_bmp_);
|
tile16_edit_canvas_.DrawContextMenu(¤t_tile16_bmp_);
|
||||||
tile16_edit_canvas_.DrawBitmap(*current_tile16_bmp_, 0, 0, 4.0f);
|
tile16_edit_canvas_.DrawBitmap(current_tile16_bmp_, 0, 0, 4.0f);
|
||||||
if (!tile8_source_canvas_.points().empty()) {
|
if (!tile8_source_canvas_.points().empty()) {
|
||||||
if (tile16_edit_canvas_.DrawTilePainter(
|
if (tile16_edit_canvas_.DrawTilePainter(
|
||||||
current_gfx_individual_[current_tile8_], 16, 2.0f)) {
|
current_gfx_individual_[current_tile8_], 16, 2.0f)) {
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
DrawToCurrentTile16(tile16_edit_canvas_.drawn_tile_position()));
|
DrawToCurrentTile16(tile16_edit_canvas_.drawn_tile_position()));
|
||||||
Renderer::GetInstance().UpdateBitmap(current_tile16_bmp_);
|
Renderer::GetInstance().UpdateBitmap(¤t_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tile16_edit_canvas_.DrawGrid();
|
tile16_edit_canvas_.DrawGrid();
|
||||||
@@ -263,9 +263,9 @@ absl::Status Tile16Editor::DrawTileEditControls() {
|
|||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_gfx_bmp_.ApplyPaletteWithTransparent(palette, value));
|
current_gfx_bmp_.ApplyPaletteWithTransparent(palette, value));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_tile16_bmp_->ApplyPaletteWithTransparent(palette, value));
|
current_tile16_bmp_.ApplyPaletteWithTransparent(palette, value));
|
||||||
Renderer::GetInstance().UpdateBitmap(¤t_gfx_bmp_);
|
Renderer::GetInstance().UpdateBitmap(¤t_gfx_bmp_);
|
||||||
Renderer::GetInstance().UpdateBitmap(current_tile16_bmp_);
|
Renderer::GetInstance().UpdateBitmap(¤t_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,11 +391,11 @@ absl::Status Tile16Editor::UpdateTransferTileCanvas() {
|
|||||||
|
|
||||||
absl::Status Tile16Editor::SetCurrentTile(int id) {
|
absl::Status Tile16Editor::SetCurrentTile(int id) {
|
||||||
current_tile16_ = id;
|
current_tile16_ = id;
|
||||||
current_tile16_bmp_ = &tile16_individual_[id];
|
current_tile16_bmp_ = tile16_individual_[id];
|
||||||
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_tile16_bmp_->ApplyPalette(ow_main_pal_group[current_palette_]));
|
current_tile16_bmp_.ApplyPalette(ow_main_pal_group[current_palette_]));
|
||||||
Renderer::GetInstance().RenderBitmap(current_tile16_bmp_);
|
Renderer::GetInstance().RenderBitmap(¤t_tile16_bmp_);
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef YAZE_APP_EDITOR_TILE16EDITOR_H
|
#ifndef YAZE_APP_EDITOR_TILE16EDITOR_H
|
||||||
#define YAZE_APP_EDITOR_TILE16EDITOR_H
|
#define YAZE_APP_EDITOR_TILE16EDITOR_H
|
||||||
|
|
||||||
#include "imgui/imgui.h"
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
@@ -18,6 +16,7 @@
|
|||||||
#include "app/gui/icons.h"
|
#include "app/gui/icons.h"
|
||||||
#include "app/rom.h"
|
#include "app/rom.h"
|
||||||
#include "app/zelda3/overworld/overworld.h"
|
#include "app/zelda3/overworld/overworld.h"
|
||||||
|
#include "imgui/imgui.h"
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
namespace app {
|
namespace app {
|
||||||
@@ -28,8 +27,8 @@ 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,
|
absl::Status InitBlockset(const gfx::Bitmap& tile16_blockset_bmp,
|
||||||
gfx::Bitmap current_gfx_bmp,
|
const gfx::Bitmap& current_gfx_bmp,
|
||||||
const std::vector<gfx::Bitmap>& tile16_individual,
|
const std::vector<gfx::Bitmap>& tile16_individual,
|
||||||
uint8_t all_tiles_types[0x200]);
|
uint8_t all_tiles_types[0x200]);
|
||||||
|
|
||||||
@@ -75,12 +74,12 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
// Tile16 blockset for selecting the tile to edit
|
// Tile16 blockset for selecting the tile to edit
|
||||||
gui::Canvas blockset_canvas_{"blocksetCanvas", ImVec2(0x100, 0x4000),
|
gui::Canvas blockset_canvas_{"blocksetCanvas", ImVec2(0x100, 0x4000),
|
||||||
gui::CanvasGridSize::k32x32};
|
gui::CanvasGridSize::k32x32};
|
||||||
gfx::Bitmap* tile16_blockset_bmp_;
|
gfx::Bitmap tile16_blockset_bmp_;
|
||||||
|
|
||||||
// Canvas for editing the selected tile
|
// Canvas for editing the selected tile
|
||||||
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_;
|
||||||
|
|
||||||
// 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_{
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ absl::Status OverworldEditor::Update() {
|
|||||||
status_ = absl::OkStatus();
|
status_ = absl::OkStatus();
|
||||||
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
||||||
RETURN_IF_ERROR(tile16_editor_.InitBlockset(
|
RETURN_IF_ERROR(tile16_editor_.InitBlockset(
|
||||||
&tile16_blockset_bmp_, current_gfx_bmp_, 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()));
|
||||||
@@ -649,7 +649,8 @@ void OverworldEditor::DrawOverworldCanvas() {
|
|||||||
EndChild();
|
EndChild();
|
||||||
|
|
||||||
// Handle mouse wheel activity
|
// Handle mouse wheel activity
|
||||||
if (ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows) && ImGui::IsMouseDragging(ImGuiMouseButton_Middle)) {
|
if (ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows) &&
|
||||||
|
ImGui::IsMouseDragging(ImGuiMouseButton_Middle)) {
|
||||||
ImGui::SetScrollX(ImGui::GetScrollX() + ImGui::GetIO().MouseWheelH * 16.0f);
|
ImGui::SetScrollX(ImGui::GetScrollX() + ImGui::GetIO().MouseWheelH * 16.0f);
|
||||||
ImGui::SetScrollY(ImGui::GetScrollY() + ImGui::GetIO().MouseWheel * 16.0f);
|
ImGui::SetScrollY(ImGui::GetScrollY() + ImGui::GetIO().MouseWheel * 16.0f);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user