gmflib: add wheel constraint (for car steering)
parent
3af511b650
commit
85d8bc5ea8
|
@ -71,7 +71,6 @@ dependencies = [
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"gmflib",
|
"gmflib",
|
||||||
"log",
|
"log",
|
||||||
"serde_json",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -762,6 +762,7 @@ pub struct ConstraintList {
|
||||||
|
|
||||||
#[derive(Debug,Serialize)]
|
#[derive(Debug,Serialize)]
|
||||||
pub enum Constraint {
|
pub enum Constraint {
|
||||||
|
Wheel(WheelConstraint),
|
||||||
Hinge(HingeConstraint),
|
Hinge(HingeConstraint),
|
||||||
PointToPoint(PointToPointConstraint),
|
PointToPoint(PointToPointConstraint),
|
||||||
}
|
}
|
||||||
|
@ -770,6 +771,7 @@ impl gmi::Serializable for Constraint {
|
||||||
fn read<R: io::Read>(r: &mut gmi::ReadStream<R>) -> gmi::ReadResult<Self> {
|
fn read<R: io::Read>(r: &mut gmi::ReadStream<R>) -> gmi::ReadResult<Self> {
|
||||||
let tlv = r.tlv()?;
|
let tlv = r.tlv()?;
|
||||||
let res = match (tlv.tag, tlv.flags) {
|
let res = match (tlv.tag, tlv.flags) {
|
||||||
|
(46, 2) => Constraint::Wheel(r.read("pivot")?),
|
||||||
(47, 2) => Constraint::Hinge(r.read("hinge")?),
|
(47, 2) => Constraint::Hinge(r.read("hinge")?),
|
||||||
(53, 2) => Constraint::PointToPoint(r.read("pointtopoint")?),
|
(53, 2) => Constraint::PointToPoint(r.read("pointtopoint")?),
|
||||||
_ => return Err(r.error(format!("unknown constraint type ({}, {})", tlv.tag, tlv.flags))),
|
_ => 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 {
|
impl gma::Serializable for Constraint {
|
||||||
fn write<W: io::Write, S: string::ToString>(&self, _name: S, w: &mut gma::WriteStream<W>) -> gma::WriteResult<()> {
|
fn write<W: io::Write, S: string::ToString>(&self, _name: S, w: &mut gma::WriteStream<W>) -> gma::WriteResult<()> {
|
||||||
match self {
|
match self {
|
||||||
|
Constraint::Wheel(o) => o.write("", w),
|
||||||
Constraint::Hinge(o) => o.write("", w),
|
Constraint::Hinge(o) => o.write("", w),
|
||||||
Constraint::PointToPoint(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)]
|
#[derive(Debug,GMISerializable,GMASerializable,Serialize)]
|
||||||
#[gma_name("GMID_HAVOK_HINGE_CONSTRAINT")]
|
#[gma_name("GMID_HAVOK_HINGE_CONSTRAINT")]
|
||||||
pub struct HingeConstraint {
|
pub struct HingeConstraint {
|
||||||
|
|
Loading…
Reference in New Issue