1#ifndef YAZE_APP_ZELDA3_DUNGEON_DUNGEON_EDITOR_SYSTEM_H
2#define YAZE_APP_ZELDA3_DUNGEON_DUNGEON_EDITOR_SYSTEM_H
6#include <unordered_map>
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
172 absl::StatusOr<Room>
GetRoom(
int room_id);
173 absl::Status
CreateRoom(
int room_id,
const std::string& name =
"");
175 absl::Status
DuplicateRoom(
int source_room_id,
int target_room_id);
185 absl::StatusOr<SpriteData>
GetSprite(
int sprite_id);
188 absl::Status
MoveSprite(
int sprite_id,
int new_x,
int new_y);
195 absl::StatusOr<ItemData>
GetItem(
int item_id);
196 absl::StatusOr<std::vector<ItemData>>
GetItemsByRoom(
int room_id);
198 absl::Status
MoveItem(
int item_id,
int new_x,
int new_y);
205 absl::StatusOr<EntranceData>
GetEntrance(
int entrance_id);
208 absl::Status
ConnectRooms(
int room1_id,
int room2_id,
int x1,
int y1,
int x2,
int y2);
215 absl::StatusOr<DoorData>
GetDoor(
int door_id);
216 absl::StatusOr<std::vector<DoorData>>
GetDoorsByRoom(
int room_id);
224 absl::StatusOr<ChestData>
GetChest(
int chest_id);
226 absl::Status
SetChestItem(
int chest_id,
int item_id,
int quantity);
273 absl::StatusOr<gfx::Bitmap>
RenderRoom(
int room_id);
365 std::unordered_map<int, ItemData>
items_;
367 std::unordered_map<int, DoorData>
doors_;
391 std::unordered_map<int, Room>
rooms;
393 std::unordered_map<int, ItemData>
items;
395 std::unordered_map<int, DoorData>
doors;
396 std::unordered_map<int, ChestData>
chests;
413namespace SpriteTypes {
467namespace EntranceTypes {
The Rom class is used to load, save, and modify Rom data.
Comprehensive dungeon editing system.
absl::StatusOr< DungeonSettings > GetDungeonSettings()
void SetSpriteChangedCallback(SpriteChangedCallback callback)
absl::Status UpdateItem(int item_id, const ItemData &item_data)
absl::Status DuplicateRoom(int source_room_id, int target_room_id)
absl::Status UpdateDoor(int door_id, const DoorData &door_data)
bool HasUnsavedChanges() const
int GetCurrentRoom() const
absl::StatusOr< EntranceData > GetEntrance(int entrance_id)
absl::Status InitializeChestSystem()
absl::Status SaveRoom(int room_id)
std::unordered_map< int, DoorData > doors_
absl::Status ExportRoomToFile(int room_id, const std::string &file_path)
absl::Status InitializeObjectEditor()
std::function< void(const std::vector< std::string > &errors)> ValidationCallback
std::unordered_map< int, EntranceData > entrances_
absl::Status ValidateRoom(int room_id)
absl::StatusOr< std::vector< SpriteData > > GetSpritesByType(DungeonEditorSystem::SpriteType type)
absl::Status SetRoomProperties(int room_id, const RoomProperties &properties)
absl::Status RemoveEntrance(int entrance_id)
RoomChangedCallback room_changed_callback_
absl::Status SetChestOpened(int chest_id, bool opened)
std::function< void(int sprite_id)> SpriteChangedCallback
absl::Status SaveDoorData()
std::unordered_map< int, SpriteData > sprites_
absl::Status SaveDungeon()
absl::StatusOr< std::vector< DoorData > > GetDoorsByRoom(int room_id)
absl::Status InitializeDoorSystem()
std::function< void(int door_id)> DoorChangedCallback
absl::Status RemoveItem(int item_id)
absl::StatusOr< SpriteData > GetSprite(int sprite_id)
absl::Status SaveItemData()
void SetEditorMode(EditorMode mode)
DungeonSettings dungeon_settings_
SpriteChangedCallback sprite_changed_callback_
absl::Status MoveSprite(int sprite_id, int new_x, int new_y)
absl::Status ValidateChest(const ChestData &chest)
absl::Status LoadDoorData()
EntranceChangedCallback entrance_changed_callback_
absl::Status SetDoorKeyRequirement(int door_id, bool requires_key, int key_type)
absl::Status InitializeSpriteSystem()
absl::Status LoadSpriteData()
void SetRoomChangedCallback(RoomChangedCallback callback)
absl::Status ValidateEntrance(const EntranceData &entrance)
absl::Status SaveRoomData(int room_id)
void SetEntranceChangedCallback(EntranceChangedCallback callback)
std::vector< std::string > GetValidationErrors(int room_id)
ModeChangedCallback mode_changed_callback_
absl::StatusOr< RoomProperties > GetRoomProperties(int room_id)
std::shared_ptr< DungeonObjectEditor > object_editor_
absl::Status AddSprite(const SpriteData &sprite_data)
EditorState GetEditorState() const
std::shared_ptr< DungeonObjectEditor > GetObjectEditor()
absl::Status LoadEntranceData()
absl::Status SaveSpriteData()
absl::Status SaveChestData()
absl::Status SetSpriteActive(int sprite_id, bool active)
void SetChestChangedCallback(ChestChangedCallback callback)
absl::Status SetCurrentRoom(int room_id)
absl::StatusOr< std::vector< ItemData > > GetItemsByType(DungeonEditorSystem::ItemType type)
absl::Status ConnectRooms(int room1_id, int room2_id, int x1, int y1, int x2, int y2)
absl::Status ValidateDungeon()
absl::StatusOr< gfx::Bitmap > RenderRoomPreview(int room_id, EditorMode mode)
absl::Status DeleteRoom(int room_id)
absl::Status ValidateDoor(const DoorData &door)
absl::Status RemoveDoor(int door_id)
std::vector< std::string > GetDungeonValidationErrors()
std::unordered_map< int, ChestData > chests_
std::unordered_map< int, ItemData > items_
absl::Status AddDoor(const DoorData &door_data)
absl::Status RemoveChest(int chest_id)
absl::Status InitializeEntranceSystem()
EditorMode GetEditorMode() const
std::function< void(int item_id)> ItemChangedCallback
absl::Status ValidateItem(const ItemData &item)
absl::StatusOr< std::vector< EntranceData > > GetEntrancesByRoom(int room_id)
absl::Status SetDungeonSettings(const DungeonSettings &settings)
absl::Status ValidateSprite(const SpriteData &sprite)
std::unordered_map< int, Room > rooms_
absl::Status ImportDungeonFromFile(const std::string &file_path)
absl::StatusOr< gfx::Bitmap > RenderRoom(int room_id)
ItemChangedCallback item_changed_callback_
EditorState editor_state_
absl::Status UpdateEntrance(int entrance_id, const EntranceData &entrance_data)
std::vector< UndoPoint > redo_history_
void SetModeChangedCallback(ModeChangedCallback callback)
absl::Status LoadItemData()
absl::Status InitializeItemSystem()
absl::Status Initialize()
absl::StatusOr< gfx::Bitmap > RenderDungeonMap()
absl::Status SetObjectEditorMode()
absl::Status DisconnectRooms(int room1_id, int room2_id)
ValidationCallback validation_callback_
std::unordered_map< int, RoomProperties > room_properties_
~DungeonEditorSystem()=default
absl::Status ExportDungeonToFile(const std::string &file_path)
absl::Status LoadRoomData(int room_id)
absl::Status ReloadRoom(int room_id)
DoorChangedCallback door_changed_callback_
std::vector< UndoPoint > undo_history_
std::function< void(EditorMode mode)> ModeChangedCallback
absl::Status RemoveSprite(int sprite_id)
absl::StatusOr< std::vector< ChestData > > GetChestsByRoom(int room_id)
absl::Status LoadDungeon(int dungeon_id)
absl::StatusOr< std::vector< ItemData > > GetItemsByRoom(int room_id)
ChestChangedCallback chest_changed_callback_
std::function< void(int room_id)> RoomChangedCallback
absl::Status MoveItem(int item_id, int new_x, int new_y)
absl::StatusOr< ChestData > GetChest(int chest_id)
absl::StatusOr< DoorData > GetDoor(int door_id)
absl::Status SetChestItem(int chest_id, int item_id, int quantity)
absl::StatusOr< std::vector< SpriteData > > GetSpritesByRoom(int room_id)
absl::Status UpdateChest(int chest_id, const ChestData &chest_data)
void SetDoorChangedCallback(DoorChangedCallback callback)
std::function< void(int chest_id)> ChestChangedCallback
absl::Status LoadChestData()
absl::Status UpdateSprite(int sprite_id, const SpriteData &sprite_data)
absl::StatusOr< std::vector< EntranceData > > GetEntrancesByType(DungeonEditorSystem::EntranceType type)
absl::Status SetItemHidden(int item_id, bool hidden)
void SetItemChangedCallback(ItemChangedCallback callback)
absl::Status CreateRoom(int room_id, const std::string &name="")
absl::Status AddEntrance(const EntranceData &entrance_data)
absl::Status ImportRoomFromFile(const std::string &file_path, int room_id)
absl::Status SaveEntranceData()
static constexpr size_t kMaxUndoHistory
absl::StatusOr< ItemData > GetItem(int item_id)
absl::Status AddChest(const ChestData &chest_data)
absl::StatusOr< Room > GetRoom(int room_id)
absl::Status SetDoorLocked(int door_id, bool locked)
void SetValidationCallback(ValidationCallback callback)
std::function< void(int entrance_id)> EntranceChangedCallback
absl::Status AddItem(const ItemData &item_data)
absl::StatusOr< EntranceInfo > GetEntranceInfo(int entrance_id)
std::vector< EntranceInfo > GetEntrancesByType(DungeonEditorSystem::EntranceType type)
std::vector< EntranceInfo > GetAllEntranceInfos()
absl::StatusOr< std::string > GetItemCategory(int item_id)
std::vector< ItemInfo > GetItemsByType(DungeonEditorSystem::ItemType type)
absl::StatusOr< ItemInfo > GetItemInfo(int item_id)
std::vector< ItemInfo > GetAllItemInfos()
std::vector< SpriteInfo > GetAllSpriteInfos()
std::vector< SpriteInfo > GetSpritesByType(DungeonEditorSystem::SpriteType type)
absl::StatusOr< SpriteInfo > GetSpriteInfo(int sprite_id)
absl::StatusOr< std::string > GetSpriteCategory(int sprite_id)
std::unique_ptr< DungeonEditorSystem > CreateDungeonEditorSystem(Rom *rom)
Factory function to create dungeon editor system.
Main namespace for the application.
Legacy chest data structure.
std::unordered_map< std::string, std::string > properties
std::unordered_map< std::string, std::string > properties
std::unordered_map< std::string, std::string > custom_settings
std::chrono::steady_clock::time_point last_save_time
std::unordered_map< std::string, std::string > properties
DungeonEditorSystem::EntranceType type
DungeonEditorSystem::ItemType type
std::unordered_map< std::string, std::string > properties
std::unordered_map< std::string, std::string > custom_properties
DungeonEditorSystem::SpriteType type
std::unordered_map< std::string, std::string > properties
std::unordered_map< int, Room > rooms
std::unordered_map< int, DoorData > doors
std::chrono::steady_clock::time_point timestamp
std::unordered_map< int, ChestData > chests
std::unordered_map< int, SpriteData > sprites
std::unordered_map< int, EntranceData > entrances
std::unordered_map< int, ItemData > items
Get entrance information by ID.
std::vector< std::pair< std::string, std::string > > default_properties
DungeonEditorSystem::EntranceType type
Get item information by ID.
std::vector< std::pair< std::string, std::string > > default_properties
DungeonEditorSystem::ItemType type
Get sprite information by ID.
DungeonEditorSystem::SpriteType type
std::vector< std::pair< std::string, std::string > > default_properties