1#ifndef YAZE_APP_EDITOR_DUNGEON_PANELS_MINECART_TRACK_EDITOR_PANEL_H
2#define YAZE_APP_EDITOR_DUNGEON_PANELS_MINECART_TRACK_EDITOR_PANEL_H
10#include <unordered_map>
14#include "absl/status/status.h"
15#include "absl/status/statusor.h"
33 const std::vector<zelda3::TrackCollisionResult>&,
39 std::string
GetId()
const override {
return "dungeon.minecart_tracks"; }
45 void Draw(
bool* p_open)
override;
76 const std::vector<MinecartTrack>&
GetTracks();
std::filesystem::path loaded_source_path_
std::string overlay_track_stop_tiles_input_
zelda3::GeneratorOptions collision_preview_options_
std::string overlay_track_object_ids_input_
std::string GetWorkflowGroup() const override
Optional workflow group for hack-centric actions.
void StartCoordinatePicking(int track_index)
std::string overlay_track_switch_tiles_input_
std::string bound_project_filepath_
bool IsDefaultTrack(const MinecartTrack &track) const
void SetRooms(DungeonRoomStore *rooms)
std::string GetId() const override
Unique identifier for this panel.
std::string GetIcon() const override
Material Design icon for this panel.
bool IsPickingCoordinates() const
absl::Status ReloadTracks()
absl::StatusOr< zelda3::GeneratorOptions > ResolveGeneratorOptions() const
std::string GetEditorCategory() const override
Editor category this panel belongs to.
std::string status_message_
std::optional< core::MinecartTrackLayout::Source > bound_source_identity_
std::string overlay_minecart_sprite_ids_input_
void InvalidateRoomAudit()
void SetProjectChangedCallback(ProjectChangedCallback callback)
bool UpdateOverlayList(const char *label, std::string &input, OverlayListMember member)
void Draw(bool *p_open) override
Draw the panel content.
std::string loaded_source_sha256_
int GetPickingTrackIndex() const
absl::Status LoadTracks()
absl::Status NotifyProjectDraftChanged()
const std::vector< MinecartTrack > & GetTracks()
ProjectDraftChangedCallback project_draft_changed_callback_
std::vector< uint16_t > project::DungeonOverlaySettings::* OverlayListMember
std::vector< bool > route_slot_used_
std::unordered_map< int, RoomTrackAudit > room_audit_
std::function< void(int room_id)> RoomNavigationCallback
std::function< absl::Status( const std::vector< zelda3::TrackCollisionResult > &, const zelda3::GeneratorOptions &)> CollisionBatchApplyCallback
CollisionBatchApplyCallback collision_batch_apply_callback_
std::vector< MinecartTrack > tracks_
RoomNavigationCallback room_navigation_callback_
void SetRoomNavigationCallback(RoomNavigationCallback callback)
absl::Status NotifyProjectChanged(const project::DungeonOverlaySettings &overlay)
std::vector< zelda3::TrackCollisionResult > collision_preview_
std::optional< MinecartTrackSourceDocument > source_document_
std::string overlay_track_tiles_input_
void DrawOverlaySettings()
absl::Status ValidateLoadedManifestIdentity() const
void DetachRuntimeContext()
absl::Status ApplyCollisionPreview()
absl::StatusOr< bool > CommitOverlayList(std::string &input, OverlayListMember member)
ProjectChangedCallback project_changed_callback_
absl::Status DiscardUnpublishedChanges()
absl::Status UpdateTrack(size_t track_index, const MinecartTrack &track)
absl::Status BuildAllEligibleCollisionPreview()
absl::Status RebindProjectContext(project::YazeProject *project)
absl::StatusOr< std::filesystem::path > ResolveTrackSourcePath() const
bool overlay_inputs_initialized_
bool audit_includes_all_rooms_
bool HasUnpublishedChanges() const
void ClearOverlayInputs()
absl::Status BuildCollisionPreview(const std::vector< int > &room_ids)
absl::Status SetProject(project::YazeProject *project)
std::optional< core::MinecartTrackLayout::Source > loaded_source_identity_
std::function< absl::Status(const project::DungeonOverlaySettings &)> ProjectChangedCallback
std::function< absl::Status()> ProjectSaveCallback
std::unordered_map< int, std::vector< int > > route_usage_rooms_
void CancelCoordinatePicking()
absl::Status RefreshProjectBinding()
friend class MinecartTrackEditorPanelTestPeer
void ClearCollisionPreview()
ProjectSaveCallback project_save_callback_
absl::Status SaveTracks()
MinecartTrackEditorPanel()=default
void InitializeOverlayInputs()
void SetCollisionBatchApplyCallback(CollisionBatchApplyCallback callback)
absl::Status SaveProjectSettings()
absl::StatusOr< bool > ResetOverlaySettings()
void RebuildAuditCache(bool include_unmaterialized=false)
absl::Status PrepareProjectSave()
void SetProjectDraftChangedCallback(ProjectDraftChangedCallback callback)
std::function< absl::Status()> ProjectDraftChangedCallback
void SetProjectSaveCallback(ProjectSaveCallback callback)
std::vector< MinecartTrack > loaded_tracks_
project::YazeProject * project_
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)
std::optional< project::DungeonOverlaySettings > overlay_inputs_model_
absl::StatusOr< bool > CommitOverlayInputsForSave()
bool HasPendingProjectDraftChanges() const
DungeonRoomStore * rooms_
Base interface for all logical window content components.
Editors are the view controllers for the application.
std::vector< int > track_subtypes
bool has_any_custom_collision
bool has_minecart_on_stop
std::vector< int > route_slots
Dungeon overlay configuration (per-project).
Modern project structure with comprehensive settings consolidation.