From 85d8bc5ea84d79f0f335d3f6688a449f8bc5a962 Mon Sep 17 00:00:00 2001 From: Serge Bazanski Date: Fri, 15 Apr 2022 17:21:13 +0000 Subject: [PATCH] gmflib: add wheel constraint (for car steering) --- Cargo.lock | 1 - gmflib/src/types.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 0482975..c0b63b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,7 +71,6 @@ dependencies = [ "env_logger", "gmflib", "log", - "serde_json", ] [[package]] diff --git a/gmflib/src/types.rs b/gmflib/src/types.rs index 3d6eef0..8123c80 100644 --- a/gmflib/src/types.rs +++ b/gmflib/src/types.rs @@ -762,6 +762,7 @@ pub struct ConstraintList { #[derive(Debug,Serialize)] pub enum Constraint { + Wheel(WheelConstraint), Hinge(HingeConstraint), PointToPoint(PointToPointConstraint), } @@ -770,6 +771,7 @@ impl gmi::Serializable for Constraint { fn read(r: &mut gmi::ReadStream) -> gmi::ReadResult { let tlv = r.tlv()?; let res = match (tlv.tag, tlv.flags) { + (46, 2) => Constraint::Wheel(r.read("pivot")?), (47, 2) => Constraint::Hinge(r.read("hinge")?), (53, 2) => Constraint::PointToPoint(r.read("pointtopoint")?), _ => return Err(r.error(format!("unknown constraint type ({}, {})", tlv.tag, tlv.flags))), @@ -782,12 +784,39 @@ impl gmi::Serializable for Constraint { impl gma::Serializable for Constraint { fn write(&self, _name: S, w: &mut gma::WriteStream) -> gma::WriteResult<()> { match self { + Constraint::Wheel(o) => o.write("", w), Constraint::Hinge(o) => o.write("", w), Constraint::PointToPoint(o) => o.write("", w), } } } +#[derive(Debug,GMISerializable,GMASerializable,Serialize)] +#[gma_name("GMID_HAVOK_WHEEL_CONSTRAINT")] +pub struct WheelConstraint { + #[gma_name("NODE_NAME")] + pub name: String, + pub tm: TransformMatrix, + #[gma_name("BODY1")] + pub body1: String, + #[gma_name("BODY2")] + pub body2: String, + #[gma_name("POINT")] + pub point: [f32; 3], + #[gma_name("SPIN_AXIS")] + pub spin_axis: [f32; 3], + #[gma_name("SUSPENSION_AXIS")] + pub suspensions_axis: [f32; 3], + #[gma_name("SUSPENSION_LIMITS")] + pub suspensions_limits: [f32; 2], + #[gma_name("SUSPENSION_FRICTION")] + pub suspension_fiction: f32, + #[gma_name("ANGULAR_SPEED")] + pub angular_speed: f32, + #[gma_name("GAIN")] + pub gain: f32, +} + #[derive(Debug,GMISerializable,GMASerializable,Serialize)] #[gma_name("GMID_HAVOK_HINGE_CONSTRAINT")] pub struct HingeConstraint {