@@ -2,12 +2,8 @@ use std::ffi::{c_uint, c_void, CStr};
2
2
use std:: mem:: MaybeUninit ;
3
3
use std:: ptr;
4
4
5
- use jolt_sys:: {
6
- JPC_BodyInterface_AddBody , JPC_BodyInterface_CreateBody ,
7
- JPC_BodyInterface_GetCenterOfMassPosition , JPC_BodyInterface_GetLinearVelocity , JPC_Body_GetID ,
8
- JPC_BroadPhaseLayer , JPC_ObjectLayer , Real , JPC_ACTIVATION_ACTIVATE ,
9
- JPC_ACTIVATION_DONT_ACTIVATE , JPC_MOTION_TYPE_DYNAMIC , JPC_MOTION_TYPE_STATIC ,
10
- } ;
5
+ // Everything prefixed with `JPC_` comes from the jolt_sys crate.
6
+ use jolt_sys:: * ;
11
7
12
8
const OL_NON_MOVING : JPC_ObjectLayer = 0 ;
13
9
const OL_MOVING : JPC_ObjectLayer = 1 ;
@@ -31,7 +27,7 @@ unsafe extern "C" fn bpl_get_broad_phase_layer(
31
27
}
32
28
}
33
29
34
- const BPL : jolt_sys :: JPC_BroadPhaseLayerInterfaceFns = jolt_sys :: JPC_BroadPhaseLayerInterfaceFns {
30
+ const BPL : JPC_BroadPhaseLayerInterfaceFns = JPC_BroadPhaseLayerInterfaceFns {
35
31
GetNumBroadPhaseLayers : Some ( bpl_get_num_broad_phase_layers as _ ) ,
36
32
GetBroadPhaseLayer : Some ( bpl_get_broad_phase_layer as _ ) ,
37
33
} ;
@@ -48,10 +44,9 @@ unsafe extern "C" fn ovb_should_collide(
48
44
}
49
45
}
50
46
51
- const OVB : jolt_sys:: JPC_ObjectVsBroadPhaseLayerFilterFns =
52
- jolt_sys:: JPC_ObjectVsBroadPhaseLayerFilterFns {
53
- ShouldCollide : Some ( ovb_should_collide as _ ) ,
54
- } ;
47
+ const OVB : JPC_ObjectVsBroadPhaseLayerFilterFns = JPC_ObjectVsBroadPhaseLayerFilterFns {
48
+ ShouldCollide : Some ( ovb_should_collide as _ ) ,
49
+ } ;
55
50
56
51
unsafe extern "C" fn ovo_should_collide (
57
52
_this : * const c_void ,
@@ -65,48 +60,44 @@ unsafe extern "C" fn ovo_should_collide(
65
60
}
66
61
}
67
62
68
- const OVO : jolt_sys :: JPC_ObjectLayerPairFilterFns = jolt_sys :: JPC_ObjectLayerPairFilterFns {
63
+ const OVO : JPC_ObjectLayerPairFilterFns = JPC_ObjectLayerPairFilterFns {
69
64
ShouldCollide : Some ( ovo_should_collide as _ ) ,
70
65
} ;
71
66
72
- fn vec3 ( x : f32 , y : f32 , z : f32 ) -> jolt_sys :: JPC_Vec3 {
73
- jolt_sys :: JPC_Vec3 { x, y, z, _w : z }
67
+ fn vec3 ( x : f32 , y : f32 , z : f32 ) -> JPC_Vec3 {
68
+ JPC_Vec3 { x, y, z, _w : z }
74
69
}
75
70
76
- fn rvec3 ( x : Real , y : Real , z : Real ) -> jolt_sys :: JPC_RVec3 {
77
- jolt_sys :: JPC_RVec3 { x, y, z, _w : z }
71
+ fn rvec3 ( x : Real , y : Real , z : Real ) -> JPC_RVec3 {
72
+ JPC_RVec3 { x, y, z, _w : z }
78
73
}
79
74
80
75
fn main ( ) {
81
76
unsafe {
82
- jolt_sys :: JPC_RegisterDefaultAllocator ( ) ;
83
- jolt_sys :: JPC_FactoryInit ( ) ;
84
- jolt_sys :: JPC_RegisterTypes ( ) ;
77
+ JPC_RegisterDefaultAllocator ( ) ;
78
+ JPC_FactoryInit ( ) ;
79
+ JPC_RegisterTypes ( ) ;
85
80
86
- let temp_allocator = jolt_sys :: JPC_TempAllocatorImpl_new ( 10 * 1024 * 1024 ) ;
81
+ let temp_allocator = JPC_TempAllocatorImpl_new ( 10 * 1024 * 1024 ) ;
87
82
88
- let job_system = jolt_sys:: JPC_JobSystemThreadPool_new2 (
89
- jolt_sys:: JPC_MAX_PHYSICS_JOBS as _ ,
90
- jolt_sys:: JPC_MAX_PHYSICS_BARRIERS as _ ,
91
- ) ;
83
+ let job_system =
84
+ JPC_JobSystemThreadPool_new2 ( JPC_MAX_PHYSICS_JOBS as _ , JPC_MAX_PHYSICS_BARRIERS as _ ) ;
92
85
93
- let broad_phase_layer_interface =
94
- jolt_sys:: JPC_BroadPhaseLayerInterface_new ( ptr:: null ( ) , BPL ) ;
86
+ let broad_phase_layer_interface = JPC_BroadPhaseLayerInterface_new ( ptr:: null ( ) , BPL ) ;
95
87
96
88
let object_vs_broad_phase_layer_filter =
97
- jolt_sys :: JPC_ObjectVsBroadPhaseLayerFilter_new ( ptr:: null_mut ( ) , OVB ) ;
89
+ JPC_ObjectVsBroadPhaseLayerFilter_new ( ptr:: null_mut ( ) , OVB ) ;
98
90
99
- let object_vs_object_layer_filter =
100
- jolt_sys:: JPC_ObjectLayerPairFilter_new ( ptr:: null_mut ( ) , OVO ) ;
91
+ let object_vs_object_layer_filter = JPC_ObjectLayerPairFilter_new ( ptr:: null_mut ( ) , OVO ) ;
101
92
102
- let physics_system = jolt_sys :: JPC_PhysicsSystem_new ( ) ;
93
+ let physics_system = JPC_PhysicsSystem_new ( ) ;
103
94
104
95
let max_bodies = 1024 ;
105
96
let num_body_mutexes = 0 ;
106
97
let max_body_pairs = 1024 ;
107
98
let max_contact_constraints = 1024 ;
108
99
109
- jolt_sys :: JPC_PhysicsSystem_Init (
100
+ JPC_PhysicsSystem_Init (
110
101
physics_system,
111
102
max_bodies,
112
103
num_body_mutexes,
@@ -120,25 +111,22 @@ fn main() {
120
111
// TODO: register body activation listener
121
112
// TODO: register contact listener
122
113
123
- let body_interface = jolt_sys :: JPC_PhysicsSystem_GetBodyInterface ( physics_system) ;
114
+ let body_interface = JPC_PhysicsSystem_GetBodyInterface ( physics_system) ;
124
115
125
- let floor_shape_settings = jolt_sys :: JPC_BoxShapeSettings_new ( vec3 ( 100.0 , 1.0 , 100.0 ) ) ;
116
+ let floor_shape_settings = JPC_BoxShapeSettings_new ( vec3 ( 100.0 , 1.0 , 100.0 ) ) ;
126
117
127
- let mut floor_shape: * mut jolt_sys :: JPC_Shape = ptr:: null_mut ( ) ;
128
- let mut err: * mut jolt_sys :: JPC_String = ptr:: null_mut ( ) ;
129
- if !jolt_sys :: JPC_ShapeSettings_Create (
130
- floor_shape_settings. cast :: < jolt_sys :: JPC_ShapeSettings > ( ) ,
118
+ let mut floor_shape: * mut JPC_Shape = ptr:: null_mut ( ) ;
119
+ let mut err: * mut JPC_String = ptr:: null_mut ( ) ;
120
+ if !JPC_ShapeSettings_Create (
121
+ floor_shape_settings. cast :: < JPC_ShapeSettings > ( ) ,
131
122
& mut floor_shape,
132
123
& mut err,
133
124
) {
134
- panic ! (
135
- "Fatal error: {:?}" ,
136
- CStr :: from_ptr( jolt_sys:: JPC_String_c_str ( err) )
137
- ) ;
125
+ panic ! ( "Fatal error: {:?}" , CStr :: from_ptr( JPC_String_c_str ( err) ) ) ;
138
126
}
139
127
140
- let mut floor_settings = MaybeUninit :: < jolt_sys :: JPC_BodyCreationSettings > :: zeroed ( ) ;
141
- jolt_sys :: JPC_BodyCreationSettings_default ( floor_settings. as_mut_ptr ( ) ) ;
128
+ let mut floor_settings = MaybeUninit :: < JPC_BodyCreationSettings > :: zeroed ( ) ;
129
+ JPC_BodyCreationSettings_default ( floor_settings. as_mut_ptr ( ) ) ;
142
130
let mut floor_settings = floor_settings. assume_init ( ) ;
143
131
floor_settings. Position = rvec3 ( 0.0 , -1.0 , 0.0 ) ;
144
132
floor_settings. MotionType = JPC_MOTION_TYPE_STATIC ;
@@ -152,23 +140,20 @@ fn main() {
152
140
JPC_ACTIVATION_DONT_ACTIVATE ,
153
141
) ;
154
142
155
- let sphere_shape_settings = jolt_sys :: JPC_SphereShapeSettings_new ( 0.5 ) ;
143
+ let sphere_shape_settings = JPC_SphereShapeSettings_new ( 0.5 ) ;
156
144
157
- let mut sphere_shape: * mut jolt_sys :: JPC_Shape = ptr:: null_mut ( ) ;
158
- let mut err: * mut jolt_sys :: JPC_String = ptr:: null_mut ( ) ;
159
- if !jolt_sys :: JPC_ShapeSettings_Create (
160
- sphere_shape_settings. cast :: < jolt_sys :: JPC_ShapeSettings > ( ) ,
145
+ let mut sphere_shape: * mut JPC_Shape = ptr:: null_mut ( ) ;
146
+ let mut err: * mut JPC_String = ptr:: null_mut ( ) ;
147
+ if !JPC_ShapeSettings_Create (
148
+ sphere_shape_settings. cast :: < JPC_ShapeSettings > ( ) ,
161
149
& mut sphere_shape,
162
150
& mut err,
163
151
) {
164
- panic ! (
165
- "Fatal error: {:?}" ,
166
- CStr :: from_ptr( jolt_sys:: JPC_String_c_str ( err) )
167
- ) ;
152
+ panic ! ( "Fatal error: {:?}" , CStr :: from_ptr( JPC_String_c_str ( err) ) ) ;
168
153
}
169
154
170
- let mut sphere_settings = MaybeUninit :: < jolt_sys :: JPC_BodyCreationSettings > :: zeroed ( ) ;
171
- jolt_sys :: JPC_BodyCreationSettings_default ( sphere_settings. as_mut_ptr ( ) ) ;
155
+ let mut sphere_settings = MaybeUninit :: < JPC_BodyCreationSettings > :: zeroed ( ) ;
156
+ JPC_BodyCreationSettings_default ( sphere_settings. as_mut_ptr ( ) ) ;
172
157
let mut sphere_settings = sphere_settings. assume_init ( ) ;
173
158
sphere_settings. Position = rvec3 ( 0.0 , 2.0 , 0.0 ) ;
174
159
sphere_settings. MotionType = JPC_MOTION_TYPE_DYNAMIC ;
@@ -193,7 +178,7 @@ fn main() {
193
178
position. x, position. y, position. z, velocity. x, velocity. y, velocity. z
194
179
) ;
195
180
196
- jolt_sys :: JPC_PhysicsSystem_Update (
181
+ JPC_PhysicsSystem_Update (
197
182
physics_system,
198
183
delta_time,
199
184
collision_steps,
@@ -202,18 +187,22 @@ fn main() {
202
187
) ;
203
188
}
204
189
205
- // TODO: RemoveBody and DestroyBody
190
+ JPC_BodyInterface_RemoveBody ( body_interface, JPC_Body_GetID ( floor) ) ;
191
+ JPC_BodyInterface_DestroyBody ( body_interface, JPC_Body_GetID ( floor) ) ;
192
+
193
+ JPC_BodyInterface_RemoveBody ( body_interface, sphere_id) ;
194
+ JPC_BodyInterface_DestroyBody ( body_interface, sphere_id) ;
206
195
207
- jolt_sys :: JPC_PhysicsSystem_delete ( physics_system) ;
208
- jolt_sys :: JPC_BroadPhaseLayerInterface_delete ( broad_phase_layer_interface) ;
209
- jolt_sys :: JPC_ObjectVsBroadPhaseLayerFilter_delete ( object_vs_broad_phase_layer_filter) ;
210
- jolt_sys :: JPC_ObjectLayerPairFilter_delete ( object_vs_object_layer_filter) ;
196
+ JPC_PhysicsSystem_delete ( physics_system) ;
197
+ JPC_BroadPhaseLayerInterface_delete ( broad_phase_layer_interface) ;
198
+ JPC_ObjectVsBroadPhaseLayerFilter_delete ( object_vs_broad_phase_layer_filter) ;
199
+ JPC_ObjectLayerPairFilter_delete ( object_vs_object_layer_filter) ;
211
200
212
- jolt_sys :: JPC_JobSystemThreadPool_delete ( job_system) ;
213
- jolt_sys :: JPC_TempAllocatorImpl_delete ( temp_allocator) ;
201
+ JPC_JobSystemThreadPool_delete ( job_system) ;
202
+ JPC_TempAllocatorImpl_delete ( temp_allocator) ;
214
203
215
- jolt_sys :: JPC_UnregisterTypes ( ) ;
216
- jolt_sys :: JPC_FactoryDelete ( ) ;
204
+ JPC_UnregisterTypes ( ) ;
205
+ JPC_FactoryDelete ( ) ;
217
206
}
218
207
219
208
println ! ( "Hello, world!" ) ;
0 commit comments