bevy_director 0.8.0-dev

Unreal-Sequencer-inspired cinematic camera and sequence system for Bevy
//! The Bevy shell around `cine::document`: an `AssetLoader` so a sequence
//! can be `asset_server.load()`ed like any other file. Parsing itself is
//! engine-free and lives in the core crate, so tests and tools reach it
//! without an asset server.

use bevy::{
    asset::{AssetLoader, LoadContext, io::Reader},
    reflect::TypePath,
};
use cine::sequence::SequenceAsset;

pub use cine::document::{SequenceError, parse_sequence, to_ron_string};
#[cfg(all(feature = "viewfinder", not(target_arch = "wasm32")))]
pub use cine::document::{load_sequence, save_sequence};

#[derive(Default, TypePath)]
pub struct SequenceLoader;

impl AssetLoader for SequenceLoader {
    type Asset = SequenceAsset;
    type Settings = ();
    type Error = SequenceError;

    async fn load(
        &self,
        reader: &mut dyn Reader,
        _settings: &(),
        _load_context: &mut LoadContext<'_>,
    ) -> Result<Self::Asset, Self::Error> {
        let mut bytes = Vec::new();
        reader.read_to_end(&mut bytes).await?;
        parse_sequence(&bytes)
    }

    fn extensions(&self) -> &[&str] {
        &["dir.ron"]
    }
}