@@ -227,58 +227,75 @@ pub mod shape {
227
227
use bevy_math:: * ;
228
228
use hexasphere:: Hexasphere ;
229
229
230
- /// A cube.
231
- #[ derive( Debug ) ]
232
- pub struct Cube {
233
- /// Half the side length of the cube.
234
- pub size : f32 ,
230
+ pub struct Cuboid {
231
+ pub min_x : f32 ,
232
+ pub max_x : f32 ,
233
+
234
+ pub min_y : f32 ,
235
+ pub max_y : f32 ,
236
+
237
+ pub min_z : f32 ,
238
+ pub max_z : f32 ,
239
+ }
240
+
241
+ impl Cuboid {
242
+ pub fn new ( x_length : f32 , y_length : f32 , z_length : f32 ) -> Cuboid {
243
+ Cuboid {
244
+ max_x : x_length / 2.0 ,
245
+ min_x : -x_length / 2.0 ,
246
+ max_y : y_length / 2.0 ,
247
+ min_y : -y_length / 2.0 ,
248
+ max_z : z_length / 2.0 ,
249
+ min_z : -z_length / 2.0 ,
250
+ }
251
+ }
235
252
}
236
253
237
- impl Default for Cube {
254
+ impl Default for Cuboid {
238
255
fn default ( ) -> Self {
239
- Cube { size : 1.0 }
256
+ Cuboid :: new ( 2.0 , 1.0 , 1.0 )
240
257
}
241
258
}
242
259
243
- impl From < Cube > for Mesh {
244
- fn from ( cube : Cube ) -> Self {
245
- let size = cube. size ;
260
+ impl From < Cuboid > for Mesh {
261
+ fn from ( sp : Cuboid ) -> Self {
246
262
let vertices = & [
247
- // top (0., 0., size)
248
- ( [ -size , -size , size ] , [ 0. , 0. , size ] , [ 0. , 0. ] ) ,
249
- ( [ size , -size , size ] , [ 0. , 0. , size ] , [ size , 0. ] ) ,
250
- ( [ size , size , size ] , [ 0. , 0. , size ] , [ size , size ] ) ,
251
- ( [ -size , size , size ] , [ 0. , 0. , size ] , [ 0. , size ] ) ,
252
- // bottom (0., 0., -size)
253
- ( [ -size , size , -size ] , [ 0. , 0. , -size ] , [ size , 0. ] ) ,
254
- ( [ size , size , -size ] , [ 0. , 0. , -size ] , [ 0. , 0. ] ) ,
255
- ( [ size , -size , -size ] , [ 0. , 0. , -size ] , [ 0. , size ] ) ,
256
- ( [ -size , -size , -size ] , [ 0. , 0. , -size ] , [ size , size ] ) ,
257
- // right (size, 0., 0.)
258
- ( [ size , -size , -size ] , [ size , 0. , 0. ] , [ 0. , 0. ] ) ,
259
- ( [ size , size , -size ] , [ size , 0. , 0. ] , [ size , 0. ] ) ,
260
- ( [ size , size , size ] , [ size , 0. , 0. ] , [ size , size ] ) ,
261
- ( [ size , -size , size ] , [ size , 0. , 0. ] , [ 0. , size ] ) ,
262
- // left (-size, 0., 0.)
263
- ( [ -size , -size , size ] , [ -size , 0. , 0. ] , [ size , 0. ] ) ,
264
- ( [ -size , size , size ] , [ -size , 0. , 0. ] , [ 0. , 0. ] ) ,
265
- ( [ -size , size , -size ] , [ -size , 0. , 0. ] , [ 0. , size ] ) ,
266
- ( [ -size , -size , -size ] , [ -size , 0. , 0. ] , [ size , size ] ) ,
267
- // front (0., size, 0.)
268
- ( [ size , size , -size ] , [ 0. , size , 0. ] , [ size , 0. ] ) ,
269
- ( [ -size , size , -size ] , [ 0. , size , 0. ] , [ 0. , 0. ] ) ,
270
- ( [ -size , size , size ] , [ 0. , size , 0. ] , [ 0. , size ] ) ,
271
- ( [ size , size , size ] , [ 0. , size , 0. ] , [ size , size ] ) ,
272
- // back (0., -size, 0.)
273
- ( [ size , -size , size ] , [ 0. , -size , 0. ] , [ 0. , 0. ] ) ,
274
- ( [ -size , -size , size ] , [ 0. , -size , 0. ] , [ size , 0. ] ) ,
275
- ( [ -size , -size , -size ] , [ 0. , -size , 0. ] , [ size , size ] ) ,
276
- ( [ size , -size , -size ] , [ 0. , -size , 0. ] , [ 0. , size ] ) ,
263
+ // Top
264
+ ( [ sp . min_x , sp . min_y , sp . max_z ] , [ 0. , 0. , 1.0 ] , [ 0. , 0. ] ) ,
265
+ ( [ sp . max_x , sp . min_y , sp . max_z ] , [ 0. , 0. , 1.0 ] , [ 1.0 , 0. ] ) ,
266
+ ( [ sp . max_x , sp . max_y , sp . max_z ] , [ 0. , 0. , 1.0 ] , [ 1.0 , 1.0 ] ) ,
267
+ ( [ sp . min_x , sp . max_y , sp . max_z ] , [ 0. , 0. , 1.0 ] , [ 0. , 1.0 ] ) ,
268
+ // Bottom
269
+ ( [ sp . min_x , sp . max_y , sp . min_z ] , [ 0. , 0. , -1.0 ] , [ 1.0 , 0. ] ) ,
270
+ ( [ sp . max_x , sp . max_y , sp . min_z ] , [ 0. , 0. , -1.0 ] , [ 0. , 0. ] ) ,
271
+ ( [ sp . max_x , sp . min_y , sp . min_z ] , [ 0. , 0. , -1.0 ] , [ 0. , 1.0 ] ) ,
272
+ ( [ sp . min_x , sp . min_y , sp . min_z ] , [ 0. , 0. , -1.0 ] , [ 1.0 , 1.0 ] ) ,
273
+ // Right
274
+ ( [ sp . max_x , sp . min_y , sp . min_z ] , [ 1.0 , 0. , 0. ] , [ 0. , 0. ] ) ,
275
+ ( [ sp . max_x , sp . max_y , sp . min_z ] , [ 1.0 , 0. , 0. ] , [ 1.0 , 0. ] ) ,
276
+ ( [ sp . max_x , sp . max_y , sp . max_z ] , [ 1.0 , 0. , 0. ] , [ 1.0 , 1.0 ] ) ,
277
+ ( [ sp . max_x , sp . min_y , sp . max_z ] , [ 1.0 , 0. , 0. ] , [ 0. , 1.0 ] ) ,
278
+ // Left
279
+ ( [ sp . min_x , sp . min_y , sp . max_z ] , [ -1.0 , 0. , 0. ] , [ 1.0 , 0. ] ) ,
280
+ ( [ sp . min_x , sp . max_y , sp . max_z ] , [ -1.0 , 0. , 0. ] , [ 0. , 0. ] ) ,
281
+ ( [ sp . min_x , sp . max_y , sp . min_z ] , [ -1.0 , 0. , 0. ] , [ 0. , 1.0 ] ) ,
282
+ ( [ sp . min_x , sp . min_y , sp . min_z ] , [ -1.0 , 0. , 0. ] , [ 1.0 , 1.0 ] ) ,
283
+ // Front
284
+ ( [ sp . max_x , sp . max_y , sp . min_z ] , [ 0. , 1.0 , 0. ] , [ 1.0 , 0. ] ) ,
285
+ ( [ sp . min_x , sp . max_y , sp . min_z ] , [ 0. , 1.0 , 0. ] , [ 0. , 0. ] ) ,
286
+ ( [ sp . min_x , sp . max_y , sp . max_z ] , [ 0. , 1.0 , 0. ] , [ 0. , 1.0 ] ) ,
287
+ ( [ sp . max_x , sp . max_y , sp . max_z ] , [ 0. , 1.0 , 0. ] , [ 1.0 , 1.0 ] ) ,
288
+ // Back
289
+ ( [ sp . max_x , sp . min_y , sp . max_z ] , [ 0. , -1.0 , 0. ] , [ 0. , 0. ] ) ,
290
+ ( [ sp . min_x , sp . min_y , sp . max_z ] , [ 0. , -1.0 , 0. ] , [ 1.0 , 0. ] ) ,
291
+ ( [ sp . min_x , sp . min_y , sp . min_z ] , [ 0. , -1.0 , 0. ] , [ 1.0 , 1.0 ] ) ,
292
+ ( [ sp . max_x , sp . min_y , sp . min_z ] , [ 0. , -1.0 , 0. ] , [ 0. , 1.0 ] ) ,
277
293
] ;
278
294
279
- let mut positions = Vec :: new ( ) ;
280
- let mut normals = Vec :: new ( ) ;
281
- let mut uvs = Vec :: new ( ) ;
295
+ let mut positions = Vec :: with_capacity ( 24 ) ;
296
+ let mut normals = Vec :: with_capacity ( 24 ) ;
297
+ let mut uvs = Vec :: with_capacity ( 24 ) ;
298
+
282
299
for ( position, normal, uv) in vertices. iter ( ) {
283
300
positions. push ( * position) ;
284
301
normals. push ( * normal) ;
0 commit comments