Interactive node graph of Oracle narrative progression. More...
#include <story_event_graph_panel.h>


Public Member Functions | |
| StoryEventGraphPanel ()=default | |
| ~StoryEventGraphPanel () override | |
| void | SetManifest (core::HackManifest *manifest) |
| Inject manifest pointer (called by host editor or lazy-resolved). | |
| std::string | GetId () const override |
| Unique identifier for this panel. | |
| std::string | GetDisplayName () const override |
| Human-readable name shown in menus and title bars. | |
| std::string | GetIcon () const override |
| Material Design icon for this panel. | |
| std::string | GetEditorCategory () const override |
| Editor category this panel belongs to. | |
| PanelCategory | GetPanelCategory () const override |
| Get the lifecycle category for this panel. | |
| float | GetPreferredWidth () const override |
| Get preferred width for this panel (optional) | |
| void | Draw (bool *) override |
| Draw the panel content. | |
Public Member Functions inherited from yaze::editor::EditorPanel | |
| virtual | ~EditorPanel ()=default |
| virtual void | OnFirstDraw () |
| Called once before the first Draw() in a session. | |
| virtual bool | RequiresLazyInit () const |
| Whether this panel uses lazy initialization. | |
| void | InvalidateLazyInit () |
| Reset lazy init state so OnFirstDraw() runs again. | |
| virtual void | OnOpen () |
| Called when panel becomes visible. | |
| virtual void | OnClose () |
| Called when panel is hidden. | |
| virtual void | OnFocus () |
| Called when panel receives focus. | |
| virtual PanelContextScope | GetContextScope () const |
| Optional context binding for this panel (room/selection/etc) | |
| virtual PanelScope | GetScope () const |
| Get the registration scope for this panel. | |
| virtual bool | IsEnabled () const |
| Check if this panel is currently enabled. | |
| virtual std::string | GetDisabledTooltip () const |
| Get tooltip text when panel is disabled. | |
| virtual std::string | GetShortcutHint () const |
| Get keyboard shortcut hint for display. | |
| virtual int | GetPriority () const |
| Get display priority for menu ordering. | |
| virtual bool | IsVisibleByDefault () const |
| Whether this panel should be visible by default. | |
| virtual std::string | GetParentPanelId () const |
| Get parent panel ID for cascade behavior. | |
| virtual bool | CascadeCloseChildren () const |
| Whether closing this panel should close child panels. | |
| void | DrawWithLazyInit (bool *p_open) |
| Execute lazy initialization if needed, then call Draw() | |
Private Member Functions | |
| void | DrawNodeDetail (const core::StoryEventGraph &graph) |
| void | PublishJumpToRoom (int room_id) const |
| void | PublishJumpToMap (int map_id) const |
| void | PublishJumpToMessage (int message_id) const |
| void | PublishJumpToAssemblySymbol (const std::string &symbol) const |
| uint64_t | ComputeProgressionFingerprint () const |
| void | DrawFilterControls (const core::StoryEventGraph &graph) |
| bool | HasNonEmptyQuery () const |
| bool | IsNodeVisible (const std::string &id) const |
| bool | IsNodeQueryMatch (const std::string &id) const |
| void | UpdateFilterCache (const core::StoryEventGraph &graph) |
| void | ImportOracleSramFromFileDialog () |
| void | ClearOracleSramState () |
| void | DrawLiveSyncControls () |
| void | RefreshLiveClientBinding () |
| void | EnsureLiveSubscription () |
| void | ProcessPendingLiveRefresh () |
| bool | RefreshStateFromLiveSram () |
| void | DetachLiveListener () |
Static Private Member Functions | |
| static ImU32 | GetStatusColor (core::StoryNodeStatus status) |
| static std::optional< int > | ParseIntLoose (const std::string &input) |
| static uint8_t | StatusMask (bool completed, bool available, bool locked, bool blocked) |
Static Private Attributes | |
| static constexpr float | kNodeWidth = 160.0f |
| static constexpr float | kNodeHeight = 40.0f |
Additional Inherited Members | |
Protected Member Functions inherited from yaze::editor::EditorPanel | |
| void | InvalidateCache () |
| Invalidate all cached computations. | |
| template<typename T > | |
| T & | GetCached (const std::string &key, std::function< T()> compute) |
| Get or compute a cached value. | |
| bool | IsCacheValid () const |
| Check if cache has been invalidated. | |
| void | ClearCache () |
| Clear all cached values (more aggressive than InvalidateCache) | |
Interactive node graph of Oracle narrative progression.
Renders story events as rounded rectangles connected by Bezier curves, colored by SRAM completion state (green=completed, yellow=available, gray=locked, red=blocked).
Supports pan/zoom via mouse drag + scroll. Click a node to show detail sidebar with flags, locations, and text IDs.
Definition at line 41 of file story_event_graph_panel.h.
|
default |
|
inlineoverride |
Definition at line 44 of file story_event_graph_panel.h.
References DetachLiveListener().

|
inline |
Inject manifest pointer (called by host editor or lazy-resolved).
Definition at line 49 of file story_event_graph_panel.h.
References manifest_.
|
inlineoverridevirtual |
Unique identifier for this panel.
IDs should be:
Implements yaze::editor::EditorPanel.
Definition at line 51 of file story_event_graph_panel.h.
|
inlineoverridevirtual |
Human-readable name shown in menus and title bars.
Implements yaze::editor::EditorPanel.
Definition at line 52 of file story_event_graph_panel.h.
|
inlineoverridevirtual |
Material Design icon for this panel.
Implements yaze::editor::EditorPanel.
Definition at line 53 of file story_event_graph_panel.h.
References ICON_MD_ACCOUNT_TREE.
|
inlineoverridevirtual |
Editor category this panel belongs to.
Implements yaze::editor::EditorPanel.
Definition at line 54 of file story_event_graph_panel.h.
|
inlineoverridevirtual |
Get the lifecycle category for this panel.
Default is EditorBound (hidden when switching editors).
Reimplemented from yaze::editor::EditorPanel.
Definition at line 55 of file story_event_graph_panel.h.
References yaze::editor::CrossEditor.
|
inlineoverridevirtual |
Get preferred width for this panel (optional)
Override this to specify content-based sizing. For example, a tile selector with 8 tiles at 16px × 2.0 scale would return ~276px.
Reimplemented from yaze::editor::EditorPanel.
Definition at line 58 of file story_event_graph_panel.h.
|
inlineoverridevirtual |
Draw the panel content.
| p_open | Pointer to visibility flag (nullptr if not closable) |
Called by PanelManager when the panel is visible. Do NOT call ImGui::Begin/End - the PanelWindow wrapper handles that. Just draw your content directly.
Implements yaze::editor::EditorPanel.
Definition at line 60 of file story_event_graph_panel.h.
References ClearOracleSramState(), yaze::editor::ContentRegistry::Context::current_project(), DrawFilterControls(), DrawLiveSyncControls(), DrawNodeDetail(), EnsureLiveSubscription(), GetStatusColor(), HasNonEmptyQuery(), yaze::core::HackManifest::HasProjectRegistry(), hide_non_matching_, ImportOracleSramFromFileDialog(), IsNodeQueryMatch(), IsNodeVisible(), kNodeHeight, kNodeWidth, last_srm_error_, loaded_srm_path_, manifest_, yaze::core::HackManifest::oracle_progression_state(), ProcessPendingLiveRefresh(), yaze::core::HackManifest::project_registry(), RefreshLiveClientBinding(), scroll_x_, scroll_y_, selected_node_, yaze::core::ProjectRegistry::story_events, UpdateFilterCache(), and zoom_.
|
inlinestaticprivate |
Definition at line 293 of file story_event_graph_panel.h.
References yaze::core::kAvailable, yaze::core::kBlocked, yaze::core::kCompleted, and yaze::core::kLocked.
Referenced by Draw().
|
inlineprivate |
Definition at line 307 of file story_event_graph_panel.h.
References yaze::core::StoryEventGraph::GetNode(), ParseIntLoose(), PublishJumpToAssemblySymbol(), PublishJumpToMap(), PublishJumpToMessage(), PublishJumpToRoom(), and selected_node_.
Referenced by Draw().
|
inlinestaticprivate |
Definition at line 412 of file story_event_graph_panel.h.
Referenced by DrawNodeDetail().
|
inlineprivate |
Definition at line 429 of file story_event_graph_panel.h.
References yaze::editor::JumpToRoomRequestEvent::Create(), and yaze::editor::ContentRegistry::Context::event_bus().
Referenced by DrawNodeDetail().

|
inlineprivate |
Definition at line 435 of file story_event_graph_panel.h.
References yaze::editor::JumpToMapRequestEvent::Create(), and yaze::editor::ContentRegistry::Context::event_bus().
Referenced by DrawNodeDetail().

|
inlineprivate |
Definition at line 441 of file story_event_graph_panel.h.
References yaze::editor::JumpToMessageRequestEvent::Create(), and yaze::editor::ContentRegistry::Context::event_bus().
Referenced by DrawNodeDetail().

|
inlineprivate |
Definition at line 447 of file story_event_graph_panel.h.
References yaze::editor::JumpToAssemblySymbolRequestEvent::Create(), and yaze::editor::ContentRegistry::Context::event_bus().
Referenced by DrawNodeDetail().

|
inlineprivate |
Definition at line 453 of file story_event_graph_panel.h.
References manifest_, and yaze::core::HackManifest::oracle_progression_state().
Referenced by UpdateFilterCache().

|
inlineprivate |
Definition at line 467 of file story_event_graph_panel.h.
References filter_dirty_, filter_query_, hide_non_matching_, show_available_, show_blocked_, show_completed_, and show_locked_.
Referenced by Draw().
|
inlinestaticprivate |
Definition at line 506 of file story_event_graph_panel.h.
Referenced by UpdateFilterCache().
|
inlineprivate |
Definition at line 516 of file story_event_graph_panel.h.
References filter_query_.
Referenced by Draw().
|
inlineprivate |
Definition at line 518 of file story_event_graph_panel.h.
References node_visible_by_id_.
Referenced by Draw(), and UpdateFilterCache().
|
inlineprivate |
Definition at line 523 of file story_event_graph_panel.h.
References node_query_match_by_id_.
Referenced by Draw().
|
inlineprivate |
Definition at line 528 of file story_event_graph_panel.h.
References ComputeProgressionFingerprint(), filter_dirty_, filter_query_, hide_non_matching_, yaze::core::StoryEventNodeFilter::include_available, yaze::core::StoryEventNodeFilter::include_blocked, yaze::core::StoryEventNodeFilter::include_completed, yaze::core::StoryEventNodeFilter::include_locked, IsNodeVisible(), last_filter_query_, last_node_count_, last_progress_fp_, last_status_mask_, node_query_match_by_id_, node_visible_by_id_, yaze::core::StoryEventGraph::nodes(), yaze::core::StoryEventNodeFilter::query, selected_node_, show_available_, show_blocked_, show_completed_, show_locked_, StatusMask(), yaze::core::StoryEventNodeMatchesQuery(), and yaze::core::StoryNodeStatusAllowed().
Referenced by Draw().
|
inlineprivate |
Definition at line 574 of file story_event_graph_panel.h.
References filter_dirty_, yaze::util::FileDialogOptions::filters, last_srm_error_, loaded_srm_path_, yaze::core::LoadOracleProgressionFromSrmFile(), manifest_, yaze::core::HackManifest::SetOracleProgressionState(), and yaze::util::FileDialogWrapper::ShowOpenFileDialog().
Referenced by Draw().

|
inlineprivate |
Definition at line 603 of file story_event_graph_panel.h.
References yaze::core::HackManifest::ClearOracleProgressionState(), filter_dirty_, last_srm_error_, loaded_srm_path_, and manifest_.
Referenced by Draw().

|
inlineprivate |
Definition at line 611 of file story_event_graph_panel.h.
References live_client_, live_refresh_interval_seconds_, live_refresh_pending_, live_sync_enabled_, live_sync_error_, and RefreshStateFromLiveSram().
Referenced by Draw().

|
inlineprivate |
Definition at line 646 of file story_event_graph_panel.h.
References DetachLiveListener(), yaze::emu::mesen::MesenClientRegistry::GetClient(), live_client_, live_refresh_pending_, live_subscription_active_, and live_sync_error_.
Referenced by Draw().

|
inlineprivate |
Definition at line 662 of file story_event_graph_panel.h.
References last_subscribe_attempt_time_, live_client_, live_listener_id_, live_refresh_pending_, live_subscription_active_, live_sync_enabled_, live_sync_error_, and yaze::emu::mesen::MesenEvent::type.
Referenced by Draw().
|
inlineprivate |
Definition at line 702 of file story_event_graph_panel.h.
References last_live_refresh_time_, live_refresh_interval_seconds_, live_refresh_pending_, live_sync_enabled_, and RefreshStateFromLiveSram().
Referenced by Draw().

|
inlineprivate |
Definition at line 719 of file story_event_graph_panel.h.
References yaze::core::OracleProgressionState::crystal_bitfield, filter_dirty_, yaze::core::OracleProgressionState::game_state, yaze::core::OracleProgressionState::kCrystalOffset, yaze::core::OracleProgressionState::kGameStateOffset, yaze::core::OracleProgressionState::kOosProg2Offset, yaze::core::OracleProgressionState::kOosProgOffset, yaze::core::OracleProgressionState::kPendantOffset, yaze::core::OracleProgressionState::kSideQuestOffset, last_srm_error_, live_client_, live_sync_error_, loaded_srm_path_, manifest_, yaze::core::OracleProgressionState::oosprog, yaze::core::OracleProgressionState::oosprog2, yaze::core::OracleProgressionState::pendants, yaze::core::HackManifest::SetOracleProgressionState(), and yaze::core::OracleProgressionState::side_quest.
Referenced by DrawLiveSyncControls(), and ProcessPendingLiveRefresh().

|
inlineprivate |
Definition at line 765 of file story_event_graph_panel.h.
References live_client_, live_listener_id_, and live_subscription_active_.
Referenced by RefreshLiveClientBinding(), and ~StoryEventGraphPanel().
|
staticconstexprprivate |
Definition at line 290 of file story_event_graph_panel.h.
Referenced by Draw().
|
staticconstexprprivate |
Definition at line 291 of file story_event_graph_panel.h.
Referenced by Draw().
|
private |
Definition at line 773 of file story_event_graph_panel.h.
Referenced by ClearOracleSramState(), ComputeProgressionFingerprint(), Draw(), ImportOracleSramFromFileDialog(), RefreshStateFromLiveSram(), and SetManifest().
|
private |
Definition at line 774 of file story_event_graph_panel.h.
Referenced by Draw(), DrawNodeDetail(), and UpdateFilterCache().
|
private |
Definition at line 775 of file story_event_graph_panel.h.
Referenced by Draw().
|
private |
Definition at line 776 of file story_event_graph_panel.h.
Referenced by Draw().
|
private |
Definition at line 777 of file story_event_graph_panel.h.
Referenced by Draw().
|
private |
Definition at line 780 of file story_event_graph_panel.h.
Referenced by DrawFilterControls(), HasNonEmptyQuery(), and UpdateFilterCache().
|
private |
Definition at line 781 of file story_event_graph_panel.h.
Referenced by Draw(), DrawFilterControls(), and UpdateFilterCache().
|
private |
Definition at line 782 of file story_event_graph_panel.h.
Referenced by DrawFilterControls(), and UpdateFilterCache().
|
private |
Definition at line 783 of file story_event_graph_panel.h.
Referenced by DrawFilterControls(), and UpdateFilterCache().
|
private |
Definition at line 784 of file story_event_graph_panel.h.
Referenced by DrawFilterControls(), and UpdateFilterCache().
|
private |
Definition at line 785 of file story_event_graph_panel.h.
Referenced by DrawFilterControls(), and UpdateFilterCache().
|
private |
Definition at line 788 of file story_event_graph_panel.h.
Referenced by ClearOracleSramState(), DrawFilterControls(), ImportOracleSramFromFileDialog(), RefreshStateFromLiveSram(), and UpdateFilterCache().
|
private |
Definition at line 789 of file story_event_graph_panel.h.
Referenced by UpdateFilterCache().
|
private |
Definition at line 790 of file story_event_graph_panel.h.
Referenced by UpdateFilterCache().
|
private |
Definition at line 791 of file story_event_graph_panel.h.
Referenced by UpdateFilterCache().
|
private |
Definition at line 792 of file story_event_graph_panel.h.
Referenced by IsNodeQueryMatch(), and UpdateFilterCache().
|
private |
Definition at line 793 of file story_event_graph_panel.h.
Referenced by IsNodeVisible(), and UpdateFilterCache().
|
private |
Definition at line 796 of file story_event_graph_panel.h.
Referenced by ClearOracleSramState(), Draw(), ImportOracleSramFromFileDialog(), and RefreshStateFromLiveSram().
|
private |
Definition at line 797 of file story_event_graph_panel.h.
Referenced by ClearOracleSramState(), Draw(), ImportOracleSramFromFileDialog(), and RefreshStateFromLiveSram().
|
private |
Definition at line 799 of file story_event_graph_panel.h.
Referenced by DetachLiveListener(), DrawLiveSyncControls(), EnsureLiveSubscription(), RefreshLiveClientBinding(), and RefreshStateFromLiveSram().
|
private |
Definition at line 800 of file story_event_graph_panel.h.
Referenced by DetachLiveListener(), and EnsureLiveSubscription().
|
private |
Definition at line 801 of file story_event_graph_panel.h.
Referenced by DrawLiveSyncControls(), EnsureLiveSubscription(), and ProcessPendingLiveRefresh().
|
private |
Definition at line 802 of file story_event_graph_panel.h.
Referenced by DetachLiveListener(), EnsureLiveSubscription(), and RefreshLiveClientBinding().
|
private |
Definition at line 803 of file story_event_graph_panel.h.
Referenced by DrawLiveSyncControls(), EnsureLiveSubscription(), ProcessPendingLiveRefresh(), and RefreshLiveClientBinding().
|
private |
Definition at line 804 of file story_event_graph_panel.h.
Referenced by DrawLiveSyncControls(), and ProcessPendingLiveRefresh().
|
private |
Definition at line 805 of file story_event_graph_panel.h.
Referenced by ProcessPendingLiveRefresh().
|
private |
Definition at line 806 of file story_event_graph_panel.h.
Referenced by EnsureLiveSubscription().
|
private |
Definition at line 807 of file story_event_graph_panel.h.
Referenced by DrawLiveSyncControls(), EnsureLiveSubscription(), RefreshLiveClientBinding(), and RefreshStateFromLiveSram().
|
private |
Definition at line 809 of file story_event_graph_panel.h.
Referenced by UpdateFilterCache().