Enhance DungeonEditor functionality by adding room graphics loading and rendering capabilities; implement bitmap drawing for background layers and room objects in the canvas, improving visual representation of dungeon rooms.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "absl/container/flat_hash_map.h"
|
||||
#include "app/core/features.h"
|
||||
#include "app/core/platform/renderer.h"
|
||||
#include "app/gfx/arena.h"
|
||||
#include "app/gfx/snes_palette.h"
|
||||
#include "app/gui/canvas.h"
|
||||
#include "app/gui/color.h"
|
||||
@@ -60,6 +61,8 @@ absl::Status DungeonEditor::Load() {
|
||||
rooms_[i].LoadRoomGraphics();
|
||||
}
|
||||
|
||||
// rooms_[i].LoadObjects();
|
||||
|
||||
auto dungeon_palette_ptr = rom()->paletteset_ids[rooms_[i].palette][0];
|
||||
auto palette_id = rom()->ReadWord(0xDEC4B + dungeon_palette_ptr);
|
||||
if (palette_id.status() != absl::OkStatus()) {
|
||||
@@ -477,11 +480,22 @@ void DungeonEditor::DrawDungeonCanvas(int room_id) {
|
||||
gui::InputHexWord("Message ID", &rooms_[room_id].message_id_);
|
||||
SameLine();
|
||||
|
||||
if (Button("Load Room")) {
|
||||
rooms_[room_id].LoadRoomGraphics();
|
||||
}
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
canvas_.DrawBackground(ImVec2(0x200, 0x200));
|
||||
canvas_.DrawBackground();
|
||||
canvas_.DrawContextMenu();
|
||||
if (is_loaded_) {
|
||||
canvas_.DrawBitmap(gfx::Arena::Get().bg1_bitmap(), 0, 0);
|
||||
canvas_.DrawBitmap(gfx::Arena::Get().bg2_bitmap(), 0, 0);
|
||||
|
||||
for (const auto &object : rooms_[room_id].tile_objects_) {
|
||||
canvas_.DrawOutline(object.x_, object.y_, object.width_ * 16,
|
||||
object.height_ * 16);
|
||||
}
|
||||
canvas_.DrawBitmap(rooms_[room_id].layer1(), 0, 0);
|
||||
}
|
||||
canvas_.DrawGrid();
|
||||
|
||||
@@ -40,8 +40,8 @@ constexpr ImGuiTableFlags kDungeonTableFlags =
|
||||
*/
|
||||
class DungeonEditor : public Editor {
|
||||
public:
|
||||
explicit DungeonEditor(Rom* rom = nullptr) : rom_(rom) {
|
||||
type_ = EditorType::kDungeon;
|
||||
explicit DungeonEditor(Rom* rom = nullptr) : rom_(rom) {
|
||||
type_ = EditorType::kDungeon;
|
||||
}
|
||||
|
||||
void Initialize() override;
|
||||
@@ -57,10 +57,7 @@ class DungeonEditor : public Editor {
|
||||
|
||||
void add_room(int i) { active_rooms_.push_back(i); }
|
||||
|
||||
// Set the ROM pointer
|
||||
void set_rom(Rom* rom) { rom_ = rom; }
|
||||
|
||||
// Get the ROM pointer
|
||||
Rom* rom() const { return rom_; }
|
||||
|
||||
private:
|
||||
@@ -118,7 +115,7 @@ class DungeonEditor : public Editor {
|
||||
gfx::SnesPalette full_palette_;
|
||||
gfx::PaletteGroup current_palette_group_;
|
||||
|
||||
gui::Canvas canvas_;
|
||||
gui::Canvas canvas_{"##DungeonCanvas", ImVec2(0x200, 0x200)};
|
||||
gui::Canvas room_gfx_canvas_;
|
||||
gui::Canvas object_canvas_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user