use super::*;
pub struct Joint {
id: Entity,
}
impl std::fmt::Debug for Joint {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Joint")
.field("entity", &self.id.name())
.finish_non_exhaustive()
}
}
impl Joint {
impl_world_accessor!(
Joint,
Type,
JointType,
joint_type,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
FirstEntity,
Entity,
first_entity,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
SecondEntity,
Entity,
second_entity,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
FirstOffset,
Vec3,
first_offset,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
SecondOffset,
Vec3,
second_offset,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
FirstOrientation,
Quat,
first_orientation,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
SecondOrientation,
Quat,
second_orientation,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
Limits,
Vec2,
limits,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
LimitType,
JointLimitType,
limit_type,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
Velocity,
f32,
velocity,
ValueAccessorRead
);
impl_world_accessor!(
Joint,
DriveEnabled,
bool,
drive_enable,
ValueAccessorReadWriteAnimate
);
impl_world_accessor!(
Joint,
DriveVelocity,
f32,
drive_velocity,
ValueAccessorReadWriteAnimate
);
impl_world_accessor!(
Joint,
DriveForceLimit,
f32,
drive_force_limit,
ValueAccessorReadWriteAnimate
);
impl_world_accessor!(
Joint,
DriveGearRatio,
f32,
drive_gear_ratio,
ValueAccessorReadWriteAnimate
);
impl_world_accessor!(
Joint,
DriveFreespin,
bool,
drive_freespin,
ValueAccessorReadWriteAnimate
);
impl_world_accessor!(
Joint,
BreakForce,
f32,
break_force,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
BreakTorque,
f32,
break_torque,
ValueAccessorReadWrite
);
impl_world_accessor!(
Joint,
IsBroken,
bool,
is_broken,
ValueAccessorRead
);
impl_world_accessor!(
Joint,
AngleOrPosition,
Vec3,
angle_or_position,
ValueAccessorRead
);
pub fn hinge_angle(&self) -> f32 {
self.angle_or_position().get().x
}
pub fn linear_position(&self) -> f32 {
self.angle_or_position().get().x
}
pub fn ball_swing_angles(&self) -> Vec2 {
Vec2::new(
self.angle_or_position().get().y,
self.angle_or_position().get().z,
)
}
}
impl_world_component!(Joint);