8 releases (breaking)

0.8.0 Aug 27, 2024
0.7.0 Jul 7, 2024
0.6.0 Feb 18, 2024
0.5.0 Nov 22, 2023
0.1.0 Feb 26, 2023

#468 in Game dev

Download history 1/week @ 2024-06-16 146/week @ 2024-07-07 21/week @ 2024-07-14 22/week @ 2024-07-21 85/week @ 2024-07-28 20/week @ 2024-08-04 9/week @ 2024-08-11 13/week @ 2024-08-18 174/week @ 2024-08-25 32/week @ 2024-09-01 15/week @ 2024-09-08 29/week @ 2024-09-15 26/week @ 2024-09-22 30/week @ 2024-09-29

105 downloads per month

MIT/Apache

43KB
440 lines

bevy_trickfilm

crates.io Bevy tracking docs.rs MIT/Apache 2.0

bevy bevy_trickfilm
main main
0.14 0.7.0, 0.8.0
0.13 0.6.0
0.12 0.4.0, 0.5.0
0.11 0.3.0
0.10 0.2.0
0.9 0.1.0

What is bevy_trickfilm?

Simple plugin to load spritesheet animations from manifest files written in ron. The animations are not directly tied to a certain sprite sheet. You can combine this with plugins that add the ability to load a texture atlas from a manifest file. For example: bevy_titan or bevy_heterogeneous_texture_atlas_loader.

Quickstart

# In your Cargo.toml
bevy_trickfilm = "0.8"

animation_clip.trickfilm.ron

//! A basic example of a trickfilm ron file.
{
    "idle": (
        keyframes: KeyframesRange((start: 0, end: 4)),
        duration: 1.0,
    ),
    "run": (
        keyframes: KeyframesRange((start: 4, end: 10)),
        duration: 0.6,
    ),
    "jump": (
        keyframes: KeyframesVec([10,11,12]),
	    keyframe_timestamps: Some([0.0. 1.0, 3.0]),
        duration: 0.4,
    ),
}

main.rs

//! A basic example of how to load an AnimationClip2D asset from a trickfilm file
//! and play the animation clip.
use bevy::prelude::*;
use bevy_trickfilm::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(Animation2DPlugin)
        .add_systems(Startup, (setup, load_texture_atlas).chain())
        .add_systems(Update, play_animation_once_loaded)
        .run();
}

fn setup() {
    /* Setup camera and other stuff */
}

fn load_texture_atlas(mut commands: Commands) {
    let texture_handle = /* Create your TextureAtlas and retrieve a handle to it */;
    let layout_handle = /* Create your TextureAtlas and retrieve a handle to it */;

    commands
        .spawn(SpriteBundle {
            texture: texture_handle,
            ..Default::default()
        })
        .insert(TextureAtlas {
            layout: layout_handle,
            ..Default::default()
        })
        .insert(AnimationPlayer2D::default());
}

// Once the scene is loaded, start the animation
fn play_animation_once_loaded(
    asset_server: Res<AssetServer>
    mut players: Query<&mut AnimationPlayer2D, Added<AnimationPlayer2D>>,
) {
    for mut player in &mut players {
        player.start(asset_server.load("animation_clip.trickfilm.ron#idle")).repeat();
    }
}

Documentation

Full API Documentation

File format specifiction

Examples

Future Work

  • Not sure

License

bevy_trickfilm is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

at your option. This means you can select the license you prefer!

Some of the code was adapted from other sources. The assets included in this repository fall under different open licenses. See CREDITS.md for the details of the origin of the adapted code and licenses of those files.

Your contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~37–74MB
~1.5M SLoC