//! Demonstrates how to work with Cubic curves. use bevy::{ math::{cubic_splines::CubicCurve, vec3}, prelude::*, }; #[derive(Component)] pub struct Curve(CubicCurve); fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup) .add_systems(Update, animate_cube) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { // Define your control points // These points will define the curve // You can learn more about bezier curves here // https://en.wikipedia.org/wiki/B%C3%A9zier_curve let points = [[ vec3(-6., 2., 0.), vec3(12., 8., 0.), vec3(-12., 8., 0.), vec3(6., 2., 0.), ]]; // Make a CubicCurve let bezier = CubicBezier::new(points).to_curve(); // Spawning a cube to experiment on commands.spawn(( PbrBundle { mesh: meshes.add(shape::Cube::default().into()), material: materials.add(Color::ORANGE.into()), transform: Transform::from_translation(points[0][0]), ..default() }, Curve(bezier), )); // Some light to see something commands.spawn(PointLightBundle { point_light: PointLight { intensity: 9000., range: 100., shadows_enabled: true, ..default() }, transform: Transform::from_xyz(8., 16., 8.), ..default() }); // ground plane commands.spawn(PbrBundle { mesh: meshes.add(shape::Plane::from_size(50.).into()), material: materials.add(Color::SILVER.into()), ..default() }); // The camera commands.spawn(Camera3dBundle { transform: Transform::from_xyz(0., 6., 12.).looking_at(Vec3::new(0., 3., 0.), Vec3::Y), ..default() }); } pub fn animate_cube( time: Res