1use macroquad::prelude::*;
2
3fn tree(gl: &mut QuadGl, time: f64, deep: u32, angle: f32, tall: f32) {
4 if deep >= 8 {
5 return;
6 }
7
8 draw_rectangle(-0.01 / 2., 0., 0.01, tall, DARKGRAY);
10
11 gl.push_model_matrix(glam::Mat4::from_translation(glam::vec3(0., tall, 0.)));
13
14 gl.push_model_matrix(glam::Mat4::from_rotation_z(angle + time.sin() as f32 * 0.1));
16 tree(gl, time, deep + 1, angle * 0.7, tall * 0.8);
17 gl.pop_model_matrix();
18
19 gl.push_model_matrix(glam::Mat4::from_rotation_z(
21 -angle - time.cos() as f32 * 0.1,
22 ));
23 tree(gl, time, deep + 1, angle * 0.7, tall * 0.8);
24 gl.pop_model_matrix();
25
26 gl.pop_model_matrix();
27}
28
29#[macroquad::main("Tree")]
30async fn main() {
31 let camera = Camera2D {
32 zoom: vec2(1., 1.),
33 target: vec2(0.0, 0.5),
34 ..Default::default()
35 };
36
37 set_camera(&camera);
38 loop {
39 clear_background(LIGHTGRAY);
40
41 draw_circle(0., 0., 0.03, DARKGRAY);
42 tree(unsafe { get_internal_gl().quad_gl }, get_time(), 0, 1., 0.3);
43
44 next_frame().await
45 }
46}