gmflib: add wheel constraint (for car steering)

main
q3k 2022-04-15 17:21:13 +00:00
parent 3af511b650
commit 85d8bc5ea8
2 changed files with 29 additions and 1 deletions

1
Cargo.lock generated
View File

@ -71,7 +71,6 @@ dependencies = [
"env_logger",
"gmflib",
"log",
"serde_json",
]
[[package]]

View File

@ -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: io::Read>(r: &mut gmi::ReadStream<R>) -> gmi::ReadResult<Self> {
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<W: io::Write, S: string::ToString>(&self, _name: S, w: &mut gma::WriteStream<W>) -> 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 {