bevy_replique 0.1.0

Bevy plugin for Replique, a pure rust dialogue manager
Documentation
use bevy::{
    app::{Plugin, PostUpdate},
    asset::AssetApp,
    ecs::schedule::{IntoScheduleConfigs, SystemSet},
};

use crate::{
    asset::{RepliqueDialogue, RepliqueDialogueLoader},
    call::command::{DialogueCommandRegistry, run_dialogue_commands},
    call::function::DialogueFunctionRegistry,
    message::{
        DialogueChoices, DialogueCommand, DialogueFinished, DialogueLine, ResumeDialogue,
        StartDialogue,
    },
    runner::{resume_dialogue, start_dialogue, start_pending_dialogue},
};

#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
pub enum DialogueSystem {
    Runner,
    Commands,
}

pub struct RepliquePlugin;

impl Plugin for RepliquePlugin {
    fn build(&self, app: &mut bevy::app::App) {
        app.configure_sets(
            PostUpdate,
            (DialogueSystem::Runner, DialogueSystem::Commands).chain(),
        );

        app.init_resource::<DialogueCommandRegistry>()
            .init_resource::<DialogueFunctionRegistry>();

        app.init_asset::<RepliqueDialogue>()
            .init_asset_loader::<RepliqueDialogueLoader>();

        app.add_message::<DialogueLine>()
            .add_message::<DialogueCommand>()
            .add_message::<DialogueChoices>()
            .add_message::<DialogueFinished>()
            .add_message::<StartDialogue>()
            .add_message::<ResumeDialogue>();

        app.add_systems(
            PostUpdate,
            (start_dialogue, resume_dialogue, start_pending_dialogue)
                .chain()
                .in_set(DialogueSystem::Runner),
        );

        app.add_systems(
            PostUpdate,
            run_dialogue_commands.in_set(DialogueSystem::Commands),
        );
    }
}