From 46313b4880647e120b342222b8c89ac25b239b38 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 5 Jan 2024 13:25:44 -0800 Subject: [PATCH] Generate collision indices --- content/ship.toml | 28 +--------------------------- crates/content/src/part/ship.rs | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 36 deletions(-) diff --git a/content/ship.toml b/content/ship.toml index 986c34e..fcb43c1 100644 --- a/content/ship.toml +++ b/content/ship.toml @@ -6,7 +6,6 @@ hull = 200 linear_drag = 0.2 angular_drag = 0.2 - space.outfit = 200 space.engine = 50 space.weapon = 50 @@ -14,7 +13,7 @@ space.weapon = 50 engines = [{ x = 0.0, y = -1.05, size = 50.0 }] guns = [{ x = 0.0, y = 1 }, { x = 0.1, y = 0.80 }, { x = -0.1, y = 0.80 }] -collision.points = [ +collision = [ #[rustfmt:skip], [0.53921, 1.0000], [0.53921, 0.29343], @@ -38,28 +37,3 @@ collision.points = [ [-0.53921, 0.29343], [-0.53921, 1.0000], ] - -# TODO: generate this automatically -collision.indices = [ - #[rustfmt:skip], - [0, 1], - [1, 2], - [2, 3], - [3, 4], - [4, 5], - [5, 6], - [6, 7], - [7, 8], - [8, 9], - [9, 10], - [10, 11], - [11, 12], - [12, 13], - [13, 14], - [14, 15], - [15, 16], - [16, 17], - [17, 18], - [18, 19], - [19, 0], -] diff --git a/crates/content/src/part/ship.rs b/crates/content/src/part/ship.rs index 412dd7a..87930a4 100644 --- a/crates/content/src/part/ship.rs +++ b/crates/content/src/part/ship.rs @@ -21,18 +21,12 @@ pub(crate) mod syntax { pub guns: Vec, pub hull: f32, pub mass: f32, - pub collision: Collision, + pub collision: Vec<[f32; 2]>, pub angular_drag: f32, pub linear_drag: f32, pub space: outfitspace::syntax::OutfitSpace, } - #[derive(Debug, Deserialize)] - pub struct Collision { - pub points: Vec<[f32; 2]>, - pub indices: Vec<[u32; 2]>, - } - #[derive(Debug, Deserialize)] pub struct Engine { pub x: f32, @@ -153,6 +147,7 @@ impl crate::Build for Ship { linear_drag: ship.linear_drag, size, hull: ship.hull, + engines: ship .engines .iter() @@ -164,6 +159,7 @@ impl crate::Build for Ship { size: e.size, }) .collect(), + guns: ship .guns .iter() @@ -174,11 +170,22 @@ impl crate::Build for Ship { }, }) .collect(), + collision: Collision { - indices: ship.collision.indices, + indices: (0..ship.collision.len()) + .map(|x| { + // Auto-generate mesh lines: + // [ [0, 1], [1, 2], ..., [n, 0] ] + let next = if x == ship.collision.len() - 1 { + 0 + } else { + x + 1 + }; + [x as u32, next as u32] + }) + .collect(), points: ship .collision - .points .iter() .map(|x| point![x[0] * (size / 2.0) * aspect, x[1] * size / 2.0]) .collect(),