NarrativeEngine class

NarrativeEngine - Core processor for in-game sentence execution

This class is responsible for executing in-game sentences one by one, enabling narration, player interaction, and navigation control.

It uses a ListQueue to manage upcoming sentences and exposes processed ones through callbacks for display. Each sentence is delegated to a NarrativeInterpreter for instruction parsing.

Key Responsibilities:

  • Manage sentence queue (enqueue, process, clear)
  • Control execution flow (pause, resume, cancel, complete)
  • Support external stream listeners for engine status updates
  • Integrate blocking flow (e.g., wait for user tap)
  • Deduplicate writing using external SafeNarrativeWriter

Usage Example:

final engine = NarrativeEngine(
  onStatusChange: (status) => print('Status: $status'),
  onSentencesChanged: (sentences) => setState(() {}),
);
engine.registerInterpreter(myInterpreter);
engine.enqueue(sentences);
engine.process(onComplete: () => print("Done"));

Constructors

NarrativeEngine({ValueChanged<ProcessingStatus>? onStatusChange, ValueChanged<List<BaseNarrativeModel>>? onSentencesChanged, ValueChanged<int>? onProcessingIndexChanged, NarrativeInterpreter? interpreter})
Constructor with optional status change and sentences changed callbacks.

Properties

hashCode → int
The hash code for this object.
no setterinherited
interpreter ↔ NarrativeInterpreter?
Interpreter responsible for executing sentence logic (read, write, ask, etc.)
getter/setter pair
onProcessingIndexChanged → ValueChanged<int>?
Callback when processing index changes.
final
onSentencesChanged → ValueChanged<List<BaseNarrativeModel>>?
Callback when processed sentences list changes.
final
onStatusChange → ValueChanged<ProcessingStatus>?
Callback for status changes (idle, processing, paused, etc.)
final
onStatusChanged → Stream<ProcessingStatus>
Stream of status changes (useful for UI or controllers).
no setter
processingIndex → int
Index of the currently processing sentence.
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
sentences → List<BaseNarrativeModel>
List of displayed/written sentences.
no setter
status → ProcessingStatus
Current processing status.
no setter

Methods

addSentenceToWritten(BaseNarrativeModel baseSentenceModel) → void
Appends a sentence to the visible list of written sentences.
cancel() → void
Cancels sentence processing and resets everything.
clearProcessedSentences() → void
Clears all processed sentences.
continueAfterUserInput() → void
Resumes processing if waiting on user input.
dispose() → void
Disposes resources (call when done with the engine).
enqueue(List<BaseNarrativeModel> newSentences) → void
Adds new sentences to the queue to be processed.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
pause() → void
Pauses the engine (useful for "tap to continue" style interactions).
pauseUntilUserContinues() → Future<void>
Pauses execution and blocks until continueAfterUserInput() is called.
process({VoidCallback? onComplete, VoidCallback? onInterrupted}) → Future<void>
Starts processing the sentence queue.
registerInterpreter(NarrativeInterpreter interpreter) → void
Registers or replaces the sentence interpreter.
reset() → void
Completely clears all internal state.
resume() → void
Resumes the engine from a paused state.
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited