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"
34 const std::vector<zelda3::TrackCollisionResult>&,
40 std::string
GetId()
const override {
return "dungeon.minecart_tracks"; }
46 void Draw(
bool* p_open)
override;
116 const std::vector<MinecartTrack>&
GetTracks();
MinecartCollisionApply apply_collision_stamp_
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)
absl::Status RestoreTrackDraft(uint64_t generation, const MinecartTrack &expected, const MinecartTrack &replacement)
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.
void set_canvas_editing(bool enabled)
void set_collision_stamping(bool enabled)
std::string status_message_
std::optional< core::MinecartTrackLayout::Source > bound_source_identity_
uint64_t canvas_revision_
std::string overlay_minecart_sprite_ids_input_
void SetActiveRoom(int room)
void InvalidateRoomAudit()
const MinecartCollisionApply & collision_stamp_callback() const
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
uint64_t track_generation_
absl::Status LoadTracks()
absl::Status NotifyProjectDraftChanged()
std::function< bool()> draw_rail_palette_
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
bool collision_stamp_large_
void SetRailPaletteCallback(std::function< bool()> draw)
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_
uint64_t canvas_revision() const
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()
bool collision_stamping() const
void MarkPairedTrackDraft()
uint8_t collision_stamp_value_
absl::Status RebindProjectContext(project::YazeProject *project)
void SetTrackEditCallback(TrackEditCallback callback)
absl::StatusOr< std::filesystem::path > ResolveTrackSourcePath() const
bool overlay_inputs_initialized_
bool audit_includes_all_rooms_
bool HasUnpublishedChanges() const
void ClearOverlayInputs()
absl::Status MoveCartStart(const MinecartTrack &before, const MinecartTrack &after)
uint8_t collision_stamp_value() const
absl::Status BuildCollisionPreview(const std::vector< int > &room_ids)
uint64_t track_generation() const
absl::Status SetProject(project::YazeProject *project)
std::optional< core::MinecartTrackLayout::Source > loaded_source_identity_
std::function< absl::Status(const project::DungeonOverlaySettings &)> ProjectChangedCallback
int collision_stamp_size() const
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
int selected_track() const
void InitializeOverlayInputs()
void SetCollisionBatchApplyCallback(CollisionBatchApplyCallback callback)
absl::Status SaveProjectSettings()
absl::StatusOr< bool > ResetOverlaySettings()
bool canvas_editing() const
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_
TrackEditCallback track_edit_callback_
std::function< absl::Status( const MinecartTrack &, const MinecartTrack &, bool)> TrackEditCallback
std::string GetDisplayName() const override
Human-readable name shown in menus and title bars.
bool HasPairedTrackDraft() const
void SetCollisionStampCallback(MinecartCollisionApply apply)
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::function< absl::Status( int, const zelda3::CustomCollisionMap &, const MinecartCollisionStamp &)> MinecartCollisionApply
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.