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
79
80
81
82
83
84
85
86
87
88
use maple::prelude::*;
fn main() {
App::new(Config::default())
.add_plugin(Core3D)
.add_plugin(Physics3D)
.load_scene(MainScene)
.run();
}
pub struct MainScene;
impl SceneBuilder for MainScene {
fn build(self, assets: &AssetLibrary) -> Scene {
let scene = Scene::default();
scene
.spawn(
Camera3D::builder()
.position((-10.0, 10.0, 10.0))
.far_plane(1000.0)
.looking_at(Vec3::ZERO)
.build(),
)
.on::<Ready>(|ctx| {
ctx.game
.get_resource_mut::<Window>()
.set_cursor_locked(true);
})
// .on::<FixedUpdate>(|ctx| println!("{}", ctx.get_resource::<Frame>().fps))
.on::<Update>(Camera3D::free_fly(1.0, 1.0));
scene.spawn(
MeshInstance3D::builder()
.mesh(assets.add(Plane {
size: Vec2 { x: 100.0, y: 100.0 },
..Default::default()
}))
.material(assets.add(Color::GREY))
.position((0.0, -5.0, 0.0))
.build(),
);
scene
.spawn(Empty::builder().scale_factor(2.0).build())
.child_asset(assets.load::<GltfScene>("res/DamagedHelmet.glb"));
scene
.spawn(Empty::builder().position((0.0, 1.0, 0.0)).build())
.on::<FixedUpdate>(|ctx| {
ctx.node_mut()
.transform
.rotate_euler_xyz_degrees((0.0, 1.0, 0.0));
})
.with(|pivot| {
let colors_pos = [
(Color::WHITE, (2.5, 0.0, 2.5)),
(Color::RED, (2.5, 0.0, -2.5)),
(Color::GREEN, (-2.5, 0.0, 2.5)),
(Color::BLUE, (-2.5, 0.0, -2.5)),
];
for (color, pos) in colors_pos {
pivot
.spawn_child(
PointLight::builder()
.position(pos)
.color(color)
.intensity(10.0)
.build(),
)
.spawn_child(
MeshInstance3D::builder()
.mesh(assets.add(Sphere::default().radius(0.1)))
.material(assets.add(PbrMaterial {
base_color_factor: color,
cast_shadows: false,
emissive_factor: color.with_intensity(20.0),
..Default::default()
}))
.build(),
);
}
});
scene
}
}