diff --git a/Cargo.toml b/Cargo.toml index c95f9460742cd901d66fdb81592bc824592195c4..09587ba737c2805e841da2f03f083c34662cf8cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,10 @@ required-features = [ "bevy/bevy_winit" ] name = "ui_position" required-features = [ "bevy/bevy_winit" ] +[[example]] +name = "text_color" +required-features = [ "bevy/bevy_winit" ] + [[example]] name = "sequence" required-features = [ "bevy/bevy_winit" ] diff --git a/examples/text_color.gif b/examples/text_color.gif new file mode 100644 index 0000000000000000000000000000000000000000..b21715830defbbf04b412cd07bac9bea03a036cb Binary files /dev/null and b/examples/text_color.gif differ diff --git a/examples/text_color.rs b/examples/text_color.rs new file mode 100644 index 0000000000000000000000000000000000000000..adc513f2e99970be12f83ce7c056de2b1fe8d4ce --- /dev/null +++ b/examples/text_color.rs @@ -0,0 +1,121 @@ +use bevy::prelude::*; +use bevy_tweening::{lens::*, *}; + +const WIDTH: f32 = 1200.; +const HEIGHT: f32 = 600.; + +fn main() -> Result<(), Box<dyn std::error::Error>> { + App::default() + .insert_resource(WindowDescriptor { + title: "TextColorLens".to_string(), + width: WIDTH, + height: HEIGHT, + vsync: true, + ..Default::default() + }) + .add_plugins(DefaultPlugins) + .add_plugin(TweeningPlugin) + .add_startup_system(setup) + .run(); + + Ok(()) +} + +fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { + commands.spawn_bundle(UiCameraBundle::default()); + + let font = asset_server.load("fonts/FiraMono-Regular.ttf"); + + let size_x = 140.; + let size_y = 40.; + + let delta_x = WIDTH / 5.; + let delta_y = HEIGHT / 6.; + + let mut x = 20.; + let mut y = 20.; + let mut iy = 0; + + for (ease_function, ease_name) in &[ + (EaseFunction::QuadraticIn, "QuadraticIn"), + (EaseFunction::QuadraticOut, "QuadraticOut"), + (EaseFunction::QuadraticInOut, "QuadraticInOut"), + (EaseFunction::CubicIn, "CubicIn"), + (EaseFunction::CubicOut, "CubicOut"), + (EaseFunction::CubicInOut, "CubicInOut"), + (EaseFunction::QuarticIn, "QuarticIn"), + (EaseFunction::QuarticOut, "QuarticOut"), + (EaseFunction::QuarticInOut, "QuarticInOut"), + (EaseFunction::QuinticIn, "QuinticIn"), + (EaseFunction::QuinticOut, "QuinticOut"), + (EaseFunction::QuinticInOut, "QuinticInOut"), + (EaseFunction::SineIn, "SineIn"), + (EaseFunction::SineOut, "SineOut"), + (EaseFunction::SineInOut, "SineInOut"), + (EaseFunction::CircularIn, "CircularIn"), + (EaseFunction::CircularOut, "CircularOut"), + (EaseFunction::CircularInOut, "CircularInOut"), + (EaseFunction::ExponentialIn, "ExponentialIn"), + (EaseFunction::ExponentialOut, "ExponentialOut"), + (EaseFunction::ExponentialInOut, "ExponentialInOut"), + (EaseFunction::ElasticIn, "ElasticIn"), + (EaseFunction::ElasticOut, "ElasticOut"), + (EaseFunction::ElasticInOut, "ElasticInOut"), + (EaseFunction::BackIn, "BackIn"), + (EaseFunction::BackOut, "BackOut"), + (EaseFunction::BackInOut, "BackInOut"), + (EaseFunction::BounceIn, "BounceIn"), + (EaseFunction::BounceOut, "BounceOut"), + (EaseFunction::BounceInOut, "BounceInOut"), + ] { + let tween = Tween::new( + *ease_function, + TweeningType::PingPong, + std::time::Duration::from_secs(1), + TextColorLens { + start: Color::RED, + end: Color::BLUE, + section: 0, + }, + ); + + commands + .spawn_bundle(TextBundle { + style: Style { + size: Size::new(Val::Px(size_x), Val::Px(size_y)), + position: Rect { + left: Val::Px(x), + top: Val::Px(y), + right: Val::Auto, + bottom: Val::Auto, + }, + position_type: PositionType::Absolute, + align_content: AlignContent::Center, + align_items: AlignItems::Center, + align_self: AlignSelf::Center, + justify_content: JustifyContent::Center, + ..Default::default() + }, + text: Text::with_section( + *ease_name, + TextStyle { + font: font.clone(), + font_size: 24.0, + color: Color::WHITE, + }, + // you can still use Default + Default::default(), + ), + ..Default::default() + }) + .insert(Animator::new(tween)); + + y += delta_y; + iy += 1; + if iy >= 6 { + x += delta_x; + y = 20.; + iy = 0; + } + } +}