use bevy::prelude::*;
use bones_bevy_renderer::*;
use bones_lib::prelude as bones;
#[derive(Deref, DerefMut, Resource)]
struct Session(pub bones_lib::prelude::World);
impl HasBonesWorld for Session {
fn world(&mut self) -> &mut bones::World {
&mut self.0
}
}
pub fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(BonesRendererPlugin::<Session>::new())
.add_startup_system(setup)
.add_system(spin)
.run();
}
fn setup(mut commands: Commands) {
let mut world = bones::World::new();
commands.spawn(Camera2dBundle::default());
world
.run_system(
|mut entities: bones::ResMut<bones::Entities>,
mut path2ds: bones::CompMut<bones::Path2d>,
mut transforms: bones::CompMut<bones::Transform>| {
const SIZE: f32 = 100.0;
let ent = entities.create();
path2ds.insert(
ent,
bones::Path2d {
color: bones::Color::RED,
points: vec![
glam::vec2(-SIZE, -SIZE),
glam::vec2(SIZE, -SIZE),
glam::vec2(SIZE, SIZE),
glam::vec2(-SIZE, SIZE),
glam::vec2(-SIZE, -SIZE),
],
thickness: 2.0,
..default()
},
);
transforms.insert(ent, default());
const SIZE2: f32 = SIZE / 2.0;
let ent = entities.create();
path2ds.insert(
ent,
bones::Path2d {
color: bones::Color::BLUE,
points: vec![
glam::vec2(-SIZE2, -SIZE2),
glam::vec2(SIZE2, -SIZE2),
glam::vec2(SIZE2, SIZE2),
glam::vec2(-SIZE2, SIZE2),
],
thickness: 4.0,
line_breaks: vec![2],
},
);
transforms.insert(ent, default());
},
)
.unwrap();
commands.insert_resource(Session(world));
}
fn spin(session: ResMut<Session>) {
session
.run_initialized_system(|mut transforms: bones::CompMut<bones::Transform>| {
transforms.iter_mut().for_each(|trans| {
trans.rotation *= Quat::from_axis_angle(Vec3::Z, f32::to_radians(0.1))
});
})
.unwrap();
}