canvas_recursion/
canvas_recursion.rs1use bevy::{color::palettes::css::*, prelude::*};
4use bevy_vector_shapes::prelude::*;
5
6fn main() {
7 App::new()
8 .add_plugins(DefaultPlugins)
9 .add_plugins(ShapePlugin::default())
10 .insert_resource(ClearColor(DIM_GRAY.into()))
11 .add_systems(Startup, setup)
12 .add_systems(Update, draw_shapes)
13 .run();
14}
15
16fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
17 let config = CanvasConfig::new(1024, 1024);
18 commands.spawn_canvas(images.as_mut(), config);
19
20 commands.spawn((
21 Camera3d::default(),
22 Transform::from_xyz(0., 0., 16.).looking_at(Vec3::ZERO, Vec3::Y),
23 Msaa::Off,
24 ));
25}
26
27fn draw_shapes(time: Res<Time>, mut painter: ShapePainter, canvas: Single<(Entity, &Canvas)>) {
28 let (canvas_e, canvas) = canvas.into_inner();
29 painter.image(canvas.image.clone(), Vec2::splat(12.));
30
31 painter.set_canvas(canvas_e);
32 painter.hollow = true;
33 painter.thickness = 16.0;
34 painter.set_color(SEA_GREEN + Srgba::WHITE * 0.25);
35 painter.rect(Vec2::splat(1024.0));
36
37 painter.rotate_z(time.elapsed_secs().sin());
38 painter.image(canvas.image.clone(), Vec2::splat(980.0));
39
40 painter.reset();
41}