1use bevy::prelude::*;
4
5use data::DialogueDatabase;
6use loader::DialogueDatabaseLoader;
7
8pub mod prelude;
9
10pub mod data;
11pub mod loader;
12pub mod persist;
13pub mod runtime;
14pub mod saver;
15pub mod scripting;
16
17pub struct TalksPlugin;
19
20impl Plugin for TalksPlugin {
21 fn build(&self, app: &mut App) {
22 app.init_asset::<DialogueDatabase>()
23 .register_type::<DialogueDatabase>()
24 .init_asset_loader::<DialogueDatabaseLoader>()
25 .init_resource::<runtime::Variables>()
26 .init_resource::<runtime::Visits>()
27 .init_resource::<runtime::SequencerSettings>()
28 .init_resource::<scripting::DialogueSystems>()
29 .init_resource::<scripting::SequencerCommands>()
30 .init_resource::<scripting::ScriptEngine>()
31 .init_resource::<scripting::CompiledScripts>()
32 .init_resource::<scripting::cues::PendingCues>()
33 .add_systems(
34 Update,
35 (
36 scripting::rebuild_engine.run_if(
37 resource_changed::<scripting::DialogueSystems>
38 .or_eager(resource_changed::<scripting::SequencerCommands>),
39 ),
40 runtime::variables::seed_variables
41 .run_if(on_message::<AssetEvent<DialogueDatabase>>),
42 scripting::compile_scripts.run_if(on_message::<AssetEvent<DialogueDatabase>>),
43 runtime::runner::drive_runners
44 .run_if(any_with_component::<runtime::DialogueRunner>),
45 runtime::sequencer::drive_sequences
46 .run_if(any_with_component::<runtime::PlayingSequence>),
47 )
48 .chain(),
49 )
50 .add_observer(runtime::runner::on_advance)
51 .add_observer(runtime::runner::on_choose)
52 .add_observer(runtime::sequencer::on_finish_cue)
53 .add_observer(runtime::sequencer::on_skip_line);
54 }
55}