yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
minecart_track_editor_panel.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_PANELS_MINECART_TRACK_EDITOR_PANEL_H
2#define YAZE_APP_EDITOR_DUNGEON_PANELS_MINECART_TRACK_EDITOR_PANEL_H
3
4#include <array>
5#include <cstdint>
6#include <functional>
7#include <string>
8#include <unordered_map>
9#include <vector>
10
11#include "app/gui/core/icons.h"
12#include "core/project.h"
13#include "rom/rom.h"
14#include "zelda3/dungeon/room.h"
15
16namespace yaze::editor {
17
19 int id;
23};
24
25} // namespace yaze::editor
26
28
29namespace yaze::editor {
30
32 public:
33 explicit MinecartTrackEditorPanel(const std::string& start_root = "")
34 : project_root_(start_root) {}
35
36 // EditorPanel overrides
37 std::string GetId() const override { return "dungeon.minecart_tracks"; }
38 std::string GetDisplayName() const override { return "Minecart Tracks"; }
39 std::string GetIcon() const override { return ICON_MD_TRAIN; }
40 std::string GetEditorCategory() const override { return "Dungeon"; }
41
42 void Draw(bool* p_open) override;
43
44 // Custom methods
45 void SetProjectRoot(const std::string& root);
46 void SetRooms(std::array<zelda3::Room, 0x128>* rooms) {
47 rooms_ = rooms;
48 audit_dirty_ = true;
49 }
51 project_ = project;
53 audit_dirty_ = true;
54 }
55 void SetRom(Rom* rom) { rom_ = rom; }
56 void SaveTracks();
57
58 // Coordinate picking from dungeon canvas
59 // When picking mode is active, the next canvas click will set the coordinates
60 // for the selected track slot
61 void SetPickedCoordinates(int room_id, uint16_t camera_x, uint16_t camera_y);
62 bool IsPickingCoordinates() const { return picking_mode_; }
64 const std::vector<MinecartTrack>& GetTracks();
65
66 // Callback to navigate to a specific room for coordinate picking
67 using RoomNavigationCallback = std::function<void(int room_id)>;
69 room_navigation_callback_ = std::move(callback);
70 }
71
72 private:
73 void LoadTracks();
74 bool ParseSection(const std::string& content, const std::string& label,
75 std::vector<int>& out_values);
76 std::string FormatSection(const std::string& label,
77 const std::vector<int>& values);
78 void StartCoordinatePicking(int track_index);
80 void RebuildAuditCache();
81 bool IsDefaultTrack(const MinecartTrack& track) const;
84 bool UpdateOverlayList(const char* label, std::string& input,
85 std::vector<uint16_t>& target);
86
88 bool has_track_collision = false;
89 bool has_stop_tiles = false;
90 bool has_minecart_sprite = false;
92 std::vector<int> track_subtypes;
93 };
94
95 std::vector<MinecartTrack> tracks_;
96 std::string project_root_;
97 Rom* rom_ = nullptr;
98 std::array<zelda3::Room, 0x128>* rooms_ = nullptr;
100 std::unordered_map<int, RoomTrackAudit> room_audit_;
101 std::unordered_map<int, std::vector<int>> track_usage_rooms_;
102 std::vector<bool> track_subtype_used_;
103 bool audit_dirty_ = true;
104 bool loaded_ = false;
105 std::string status_message_;
106 bool show_success_ = false;
107 float success_timer_ = 0.0f;
108
109 // Coordinate picking state
110 bool picking_mode_ = false;
112
113 // Last picked coordinates (for display)
114 uint16_t last_picked_x_ = 0;
115 uint16_t last_picked_y_ = 0;
116 bool has_picked_coords_ = false;
117
119
120 // Overlay config input state
127};
128
129} // namespace yaze::editor
130
131#endif
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
Base interface for all logical panel components.
void SetProject(project::YazeProject *project)
std::string FormatSection(const std::string &label, const std::vector< int > &values)
bool IsDefaultTrack(const MinecartTrack &track) const
std::string GetId() const override
Unique identifier for this panel.
std::string GetIcon() const override
Material Design icon for this panel.
std::string GetEditorCategory() const override
Editor category this panel belongs to.
void Draw(bool *p_open) override
Draw the panel content.
const std::vector< MinecartTrack > & GetTracks()
std::unordered_map< int, RoomTrackAudit > room_audit_
std::function< void(int room_id)> RoomNavigationCallback
void SetRoomNavigationCallback(RoomNavigationCallback callback)
std::array< zelda3::Room, 0x128 > * rooms_
MinecartTrackEditorPanel(const std::string &start_root="")
void SetRooms(std::array< zelda3::Room, 0x128 > *rooms)
std::unordered_map< int, std::vector< int > > track_usage_rooms_
bool ParseSection(const std::string &content, const std::string &label, std::vector< int > &out_values)
std::string GetDisplayName() const override
Human-readable name shown in menus and title bars.
void SetPickedCoordinates(int room_id, uint16_t camera_x, uint16_t camera_y)
bool UpdateOverlayList(const char *label, std::string &input, std::vector< uint16_t > &target)
#define ICON_MD_TRAIN
Definition icons.h:2005
Editors are the view controllers for the application.
Modern project structure with comprehensive settings consolidation.
Definition project.h:120