1
+ use std:: f32:: consts:: FRAC_PI_2 ;
2
+
1
3
use bindings:: {
2
4
exports:: wired:: script:: types:: { Guest , GuestScript } ,
3
5
unavi:: {
4
6
scene:: api:: { Root , Scene } ,
5
7
shapes:: api:: { Cuboid , Cylinder , Rectangle , Sphere } ,
6
8
} ,
7
- wired:: math:: types:: { Transform , Vec2 , Vec3 } ,
9
+ wired:: {
10
+ math:: types:: { Quat , Transform , Vec2 , Vec3 } ,
11
+ scene:: {
12
+ material:: { Color , Material } ,
13
+ node:: Node ,
14
+ } ,
15
+ } ,
8
16
} ;
9
17
10
18
#[ allow( warnings) ]
@@ -18,31 +26,46 @@ impl GuestScript for Script {
18
26
let scene = Scene :: new ( ) ;
19
27
20
28
{
29
+ let translation = Vec3 :: new ( 3.0 , 0.0 , 0.0 ) ;
30
+ spawn_axis ( translation) ;
31
+
21
32
let cuboid = Cuboid :: new ( Vec3 :: new ( 1.0 , 0.5 , 1.5 ) ) . to_physics_node ( ) ;
22
- cuboid. set_transform ( Transform :: from_translation ( Vec3 :: new ( 3.0 , 0.0 , 0.0 ) ) ) ;
33
+ cuboid. set_transform ( Transform :: from_translation ( translation ) ) ;
23
34
scene. add_node ( & cuboid) ;
24
35
}
25
36
26
37
{
38
+ let translation = Vec3 :: new ( 1.5 , 0.0 , 2.0 ) ;
39
+ spawn_axis ( translation) ;
40
+
27
41
let sphere = Sphere :: new_ico ( 0.5 ) . to_physics_node ( ) ;
28
- sphere. set_transform ( Transform :: from_translation ( Vec3 :: new ( 1.5 , 0.0 , 2.0 ) ) ) ;
42
+ sphere. set_transform ( Transform :: from_translation ( translation ) ) ;
29
43
scene. add_node ( & sphere) ;
30
44
}
31
45
32
46
{
47
+ let translation = Vec3 :: new ( 1.5 , 0.0 , 0.0 ) ;
48
+ spawn_axis ( translation) ;
49
+
33
50
let sphere = Sphere :: new_uv ( 0.5 ) . to_physics_node ( ) ;
34
- sphere. set_transform ( Transform :: from_translation ( Vec3 :: new ( 1.5 , 0.0 , 0.0 ) ) ) ;
51
+ sphere. set_transform ( Transform :: from_translation ( translation ) ) ;
35
52
scene. add_node ( & sphere) ;
36
53
}
37
54
38
55
{
56
+ let translation = Vec3 :: default ( ) ;
57
+ spawn_axis ( translation) ;
58
+
39
59
let cylinder = Cylinder :: new ( 0.5 , 1.0 ) . to_physics_node ( ) ;
40
60
scene. add_node ( & cylinder) ;
41
61
}
42
62
43
63
{
64
+ let translation = Vec3 :: new ( -1.5 , 0.0 , 0.0 ) ;
65
+ spawn_axis ( translation) ;
66
+
44
67
let rectangle = Rectangle :: new ( Vec2 :: splat ( 1.0 ) ) . to_physics_node ( ) ;
45
- rectangle. set_transform ( Transform :: from_translation ( Vec3 :: new ( - 1.5 , 0.0 , 0.0 ) ) ) ;
68
+ rectangle. set_transform ( Transform :: from_translation ( translation ) ) ;
46
69
scene. add_node ( & rectangle) ;
47
70
}
48
71
@@ -54,6 +77,50 @@ impl GuestScript for Script {
54
77
fn update ( & self , _delta : f32 ) { }
55
78
}
56
79
80
+ fn spawn_axis ( translation : Vec3 ) {
81
+ let shape = Cylinder :: new ( 0.01 , 2.0 ) ;
82
+ shape. set_resolution ( 8 ) ;
83
+
84
+ let root = Node :: new ( ) ;
85
+ root. set_transform ( Transform :: from_translation ( translation) ) ;
86
+
87
+ let red = Material :: new ( ) ;
88
+ red. set_color ( Color {
89
+ r : 1.0 ,
90
+ g : 0.1 ,
91
+ b : 0.1 ,
92
+ a : 0.9 ,
93
+ } ) ;
94
+ let green = Material :: new ( ) ;
95
+ green. set_color ( Color {
96
+ r : 0.1 ,
97
+ g : 1.0 ,
98
+ b : 0.1 ,
99
+ a : 0.9 ,
100
+ } ) ;
101
+ let blue = Material :: new ( ) ;
102
+ blue. set_color ( Color {
103
+ r : 0.1 ,
104
+ g : 0.1 ,
105
+ b : 1.0 ,
106
+ a : 0.9 ,
107
+ } ) ;
108
+
109
+ let x = shape. to_node ( ) ;
110
+ root. add_child ( & x) ;
111
+ x. mesh ( ) . unwrap ( ) . list_primitives ( ) [ 0 ] . set_material ( Some ( & red) ) ;
112
+ x. set_transform ( Transform :: from_rotation ( Quat :: from_rotation_z ( FRAC_PI_2 ) ) ) ;
113
+
114
+ let y = shape. to_node ( ) ;
115
+ root. add_child ( & y) ;
116
+ y. mesh ( ) . unwrap ( ) . list_primitives ( ) [ 0 ] . set_material ( Some ( & green) ) ;
117
+
118
+ let z = shape. to_node ( ) ;
119
+ root. add_child ( & z) ;
120
+ z. mesh ( ) . unwrap ( ) . list_primitives ( ) [ 0 ] . set_material ( Some ( & blue) ) ;
121
+ z. set_transform ( Transform :: from_rotation ( Quat :: from_rotation_x ( FRAC_PI_2 ) ) ) ;
122
+ }
123
+
57
124
struct Types ;
58
125
59
126
impl Guest for Types {
0 commit comments