1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
/*
* Render Order example by https://github.com/akowi-sknobloch which shows which object is rendered on top.
*
* The license is same as the one on the root.
*/
// imports needed
use blue_engine::{primitive_shapes::square, Engine, ObjectSettings};
fn main() {
// initialize the engine
let mut engine = Engine::new().expect("couldn't initialize engine");
// make the first layer
square(
"layer1",
ObjectSettings::default(),
&mut engine.renderer,
&mut engine.objects,
)
.expect("failed to create square");
// make the second layer
square(
"layer2",
ObjectSettings::default(),
&mut engine.renderer,
&mut engine.objects,
)
.expect("failed to create square");
// Get layer 1 object
let layer1 = engine
.objects
.get_mut("layer1")
.expect("failed to gete object");
// set a color to differenciate it
layer1
.set_uniform_color(1f32, 0.5, 0f32, 1f32)
.expect("failed to set color");
// move it to left a bit
layer1.set_position(-0.5, 0f32, 0f32);
// set render order to 0th
layer1.set_render_order(0).unwrap();
// Get layer 2 object
let layer2 = engine
.objects
.get_mut("layer2")
.expect("failed to gete object");
// set a color to differenciate it
layer2
.set_uniform_color(0f32, 0f32, 1f32, 1f32)
.expect("failed to set color");
// move it to right a bit
layer2.set_position(0.5, 0f32, 0f32);
// set render order to 1st
layer2.set_render_order(1).unwrap();
// get a timer for order change
let start = std::time::SystemTime::now();
// start the update loop
engine
.update_loop(move |_, _, object_storage, _, _, _| {
// get the target layer to change order of
let target = object_storage.get_mut("layer1").unwrap();
// on ever 2 seconds change order
if start.elapsed().unwrap().as_secs() % 2 == 0 {
target.set_render_order(2).unwrap();
} else {
// change back to default
target.set_render_order(0).unwrap();
}
})
.expect("Error during update loop");
}