bevy_easings 0.19.0

Easing plugin for Bevy
Documentation
use bevy::{color::palettes, prelude::*};

use bevy_easings::Ease;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    App::default()
        .add_plugins(DefaultPlugins)
        .add_plugins(bevy_easings::EasingsPlugin::default())
        .add_systems(Startup, setup)
        .add_systems(FixedUpdate, pause)
        .insert_resource(Time::<Fixed>::from_seconds(0.25))
        .run();

    Ok(())
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2d);

    commands.spawn((
        Sprite::from_color(palettes::basic::RED, Vec2::new(100., 100.)),
        Transform::from_translation(Vec3::new(-500., 0., 0.)).ease_to(
            Transform::from_translation(Vec3::new(500., 0., 0.)),
            bevy_easings::EaseFunction::QuadraticInOut,
            bevy_easings::EasingType::PingPong {
                duration: std::time::Duration::from_millis(500),
                pause: Some(std::time::Duration::from_millis(100)),
            },
        ),
    ));
}

fn pause(mut query: Query<&mut bevy_easings::EasingComponent<Transform>>) {
    for mut easing in query.iter_mut() {
        easing.state = !easing.state;
    }
}