1use bottomless_pit::colour::Colour;
2use bottomless_pit::engine_handle::{Engine, EngineBuilder};
3use bottomless_pit::input::{Key, MouseKey};
4use bottomless_pit::material::{Material, MaterialBuilder};
5use bottomless_pit::render::RenderHandle;
6use bottomless_pit::resource::LoadingOp;
7use bottomless_pit::texture::Texture;
8use bottomless_pit::vec2;
9use bottomless_pit::vectors::Vec2;
10use bottomless_pit::Game;
11
12fn main() {
13 let mut engine = EngineBuilder::new().build().unwrap();
14
15 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
16
17 let texture_material = MaterialBuilder::new()
18 .add_texture(texture)
19 .build(&mut engine);
20 let regular_material = MaterialBuilder::new().build(&mut engine);
21
22 let pos = Position {
23 pos: vec2! { 0.0 },
24 regular_material,
25 texture_material,
26 state: false,
27 };
28
29 engine.run(pos);
30}
31
32struct Position {
33 pos: Vec2<f32>,
34 regular_material: Material,
35 texture_material: Material,
36 state: bool,
37}
38
39impl Game for Position {
40 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
41 let mut render_handle = render.begin_pass(Colour::BLACK);
42
43 let defualt_size = vec2! { 50.0 };
44 self.regular_material.add_rectangle(
45 vec2! { 0.0 },
46 defualt_size,
47 Colour::RED,
48 &render_handle,
49 );
50 self.regular_material
51 .add_rectangle(self.pos, vec2! { 100.0 }, Colour::RED, &render_handle);
52 self.texture_material.add_rectangle(
53 vec2! { 0.0, 50.0 },
54 defualt_size,
55 Colour::WHITE,
56 &render_handle,
57 );
58 self.texture_material.add_rectangle_with_uv(
59 Vec2 { x: 0.0, y: 100.0 },
60 defualt_size,
61 vec2! { 311.0 },
62 vec2! { 311.0 },
63 Colour::WHITE,
64 &render_handle,
65 );
66 self.regular_material.add_rectangle_with_rotation(
67 Vec2 { x: 0.0, y: 150.0 },
68 defualt_size,
69 Colour::GREEN,
70 45.0,
71 &render_handle,
72 );
73
74 let points = [
75 Vec2 { x: 0.0, y: 300.0 },
76 Vec2 { x: 80.0, y: 290.0 },
77 Vec2 { x: 100.0, y: 400.0 },
78 Vec2 { x: 60.0, y: 400.0 },
79 ];
80 let uvs = [
81 vec2! { 0.0 },
82 Vec2 { x: 1.0, y: 0.0 },
83 vec2! { 1.0 },
84 Vec2 { x: 0.0, y: 1.0 },
85 ];
86
87 self.regular_material
88 .add_custom(points, uvs, 0.0, Colour::RED, &render_handle);
89
90 self.regular_material.add_screenspace_rectangle(
91 vec2!(0.0, 0.0),
92 vec2!(1.0),
93 Colour::YELLOW,
94 &render_handle,
95 );
96
97 if self.state {
98 self.regular_material.add_rectangle(
99 vec2!(300.0),
100 vec2!(100.0),
101 Colour::GREEN,
102 &render_handle,
103 );
104 }
105
106 self.texture_material.draw(&mut render_handle);
107 self.regular_material.draw(&mut render_handle);
108 }
109
110 fn update(&mut self, engine_handle: &mut Engine) {
111 let dt = engine_handle.get_frame_delta_time();
112 self.pos.x += 100.0 * dt;
113 if engine_handle.is_mouse_key_pressed(MouseKey::Left) {
114 let new_texture = Texture::new(
115 engine_handle,
116 "examples/eggshark.png",
117 LoadingOp::Background,
118 );
119 self.texture_material.change_texture(new_texture);
120 }
121
122 self.state = engine_handle.is_key_down(Key::Space);
123 }
124}