use bevy::prelude::*;
use bevy_mod_transform2d::prelude::*;
fn main() {
App::new()
.add_plugins((DefaultPlugins, Transform2dPlugin))
.add_systems(Startup, setup)
.add_systems(Update, (orbit, rotate))
.run();
}
fn orbit(mut query: Query<(&mut Transform2d, &Orbit)>, time: Res<Time>) {
for (mut transform, orbit) in &mut query {
transform.translate_around(orbit.point, orbit.speed * time.delta_seconds());
}
}
fn rotate(mut query: Query<(&mut Transform2d, &Rotate)>, time: Res<Time>) {
for (mut transform, rotate) in &mut query {
transform.rotation += rotate.speed * time.delta_seconds();
}
}
#[derive(Component)]
struct Orbit {
point: Vec2,
speed: f32,
}
#[derive(Component)]
struct Rotate {
speed: f32,
}
fn setup(mut commands: Commands) {
commands.spawn((
SpriteBundle {
sprite: Sprite {
color: Color::CRIMSON,
custom_size: Some(Vec2::splat(50.)),
..default()
},
..default()
},
Transform2d::default(),
Rotate { speed: 1. },
));
commands.spawn((
SpriteBundle {
sprite: Sprite {
color: Color::LIME_GREEN,
custom_size: Some(Vec2::splat(150.)),
..default()
},
..default()
},
Transform2d::from_xy(200., 0.),
Orbit {
point: Vec2::ZERO,
speed: 1.5,
},
Rotate { speed: -1.2 },
));
commands.spawn(Camera2dBundle::default());
}