diff --git a/examples/tweening_test.rs b/examples/tweening_test.rs new file mode 100644 index 0000000..90d64dc --- /dev/null +++ b/examples/tweening_test.rs @@ -0,0 +1,125 @@ +use bevy::prelude::*; +use bevy_inspector_egui::{Inspectable, InspectorPlugin}; + +use bevy_tweening::{lens::*, *}; + +fn main() { + App::default() + .add_plugins(DefaultPlugins.set(WindowPlugin { + window: WindowDescriptor { + title: "TransformPositionLens".to_string(), + width: 1400., + height: 600., + present_mode: bevy::window::PresentMode::Fifo, // vsync + ..default() + }, + ..default() + })) + .add_system(bevy::window::close_on_esc) + .add_plugin(TweeningPlugin) + .add_plugin(InspectorPlugin::::new()) + .add_startup_system(setup) + .add_system(update_animation_speed) + .run(); +} + +#[derive(Copy, Clone, PartialEq, Inspectable, Resource)] +struct Options { + #[inspectable(min = 0.01, max = 100.)] + speed: f32, +} + +impl Default for Options { + fn default() -> Self { + Self { speed: 1. } + } +} + +fn setup(mut commands: Commands) { + commands.spawn(Camera2dBundle::default()); + + let size = 25.; + + let spacing = 1.5; + let screen_x = 570.; + let screen_y = 150.; + let mut x = -screen_x; + + for ease_function in &[ + EaseFunction::QuadraticIn, + EaseFunction::QuadraticOut, + EaseFunction::QuadraticInOut, + EaseFunction::CubicIn, + EaseFunction::CubicOut, + EaseFunction::CubicInOut, + EaseFunction::QuarticIn, + EaseFunction::QuarticOut, + EaseFunction::QuarticInOut, + EaseFunction::QuinticIn, + EaseFunction::QuinticOut, + EaseFunction::QuinticInOut, + EaseFunction::SineIn, + EaseFunction::SineOut, + EaseFunction::SineInOut, + EaseFunction::CircularIn, + EaseFunction::CircularOut, + EaseFunction::CircularInOut, + EaseFunction::ExponentialIn, + EaseFunction::ExponentialOut, + EaseFunction::ExponentialInOut, + EaseFunction::ElasticIn, + EaseFunction::ElasticOut, + EaseFunction::ElasticInOut, + EaseFunction::BackIn, + EaseFunction::BackOut, + EaseFunction::BackInOut, + EaseFunction::BounceIn, + EaseFunction::BounceOut, + EaseFunction::BounceInOut, + ] { + let tween = Tween::new( + *ease_function, + std::time::Duration::from_secs(1), + TransformPositionLens { + start: Vec3::new(x, screen_y, 0.), + end: Vec3::new(x, -screen_y, 0.), + }, + ) + .then( + Tween::new( + EaseFunction::QuadraticInOut, + std::time::Duration::from_millis(200), + TransformRotateZLens { + start: 0.05, + end: -0.05, + }, + ) + .with_repeat_strategy(bevy_tweening::RepeatStrategy::MirroredRepeat) + .with_repeat_count(RepeatCount::Infinite), + ); + + commands.spawn(( + SpriteBundle { + sprite: Sprite { + color: Color::RED, + custom_size: Some(Vec2::new(size, size)), + ..default() + }, + ..default() + }, + Animator::new(tween), + )); + + x += size * spacing; + } +} + +fn update_animation_speed(options: Res, mut animators: Query<&mut Animator>) { + if !options.is_changed() { + return; + } + + for mut animator in animators.iter_mut() { + animator.set_speed(options.speed); + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..0cfecff --- /dev/null +++ b/src/main.rs @@ -0,0 +1,29 @@ +use bevy::prelude::*; +use bevy_inspector_egui::Inspectable; +use turtle_lib::{get_a_turtle, TurtlePlugin}; + +use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; + +#[derive(Component, Inspectable)] +struct Egon {} + +fn main() { + App::new() + .add_plugin(TurtlePlugin) + .add_startup_system(setup) + //.add_system(plan) + .add_plugin(LogDiagnosticsPlugin::default()) + .add_plugin(FrameTimeDiagnosticsPlugin::default()) + .run(); +} + +fn setup(mut commands: Commands) { + let mut turtle = get_a_turtle(); + turtle.forward(10.); + turtle.forward(10.); + turtle.forward(10.); + turtle.forward(10.); + turtle.forward(10.); + turtle.forward(10.); + commands.spawn((turtle, Egon {})); +}