Add velocity-based kinematic bodies
This commit is contained in:
35
publish.sh
Executable file
35
publish.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
tmp=$(mktemp -d)
|
||||||
|
|
||||||
|
echo "$tmp"
|
||||||
|
|
||||||
|
cp -r src "$tmp"/.
|
||||||
|
cp -r LICENSE README.md "$tmp"/.
|
||||||
|
|
||||||
|
### Publish the 2D version.
|
||||||
|
sed 's#\.\./\.\./src#src#g' build/rapier2d/Cargo.toml > "$tmp"/Cargo.toml
|
||||||
|
currdir=$(pwd)
|
||||||
|
cd "$tmp" && cargo publish
|
||||||
|
cd "$currdir" || exit
|
||||||
|
|
||||||
|
|
||||||
|
### Publish the 3D version.
|
||||||
|
sed 's#\.\./\.\./src#src#g' build/rapier3d/Cargo.toml > "$tmp"/Cargo.toml
|
||||||
|
cp -r LICENSE README.md "$tmp"/.
|
||||||
|
cd "$tmp" && cargo publish
|
||||||
|
cd "$currdir" || exit
|
||||||
|
|
||||||
|
### Publish the 2D f64 version.
|
||||||
|
sed 's#\.\./\.\./src#src#g' build/rapier2d-f64/Cargo.toml > "$tmp"/Cargo.toml
|
||||||
|
currdir=$(pwd)
|
||||||
|
cd "$tmp" && cargo publish
|
||||||
|
cd "$currdir" || exit
|
||||||
|
|
||||||
|
|
||||||
|
### Publish the 3D f64 version.
|
||||||
|
sed 's#\.\./\.\./src#src#g' build/rapier3d-f64/Cargo.toml > "$tmp"/Cargo.toml
|
||||||
|
cp -r LICENSE README.md "$tmp"/.
|
||||||
|
cd "$tmp" && cargo publish
|
||||||
|
|
||||||
|
rm -rf "$tmp"
|
||||||
@@ -275,7 +275,7 @@ impl RigidBody {
|
|||||||
///
|
///
|
||||||
/// A kinematic body can move freely but is not affected by forces.
|
/// A kinematic body can move freely but is not affected by forces.
|
||||||
pub fn is_kinematic(&self) -> bool {
|
pub fn is_kinematic(&self) -> bool {
|
||||||
self.rb_type == RigidBodyType::Kinematic
|
self.rb_type.is_kinematic()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Is this rigid body static?
|
/// Is this rigid body static?
|
||||||
@@ -527,9 +527,9 @@ impl RigidBody {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// If this rigid body is kinematic, sets its future orientation after the next timestep integration.
|
/// If this rigid body is kinematic, sets its future orientation after the next timestep integration.
|
||||||
pub fn set_next_kinematic_translation(&mut self, rotation: Rotation<Real>) {
|
pub fn set_next_kinematic_translation(&mut self, translation: Vector<Real>) {
|
||||||
if self.is_kinematic() {
|
if self.is_kinematic() {
|
||||||
self.rb_pos.next_position.rotation = rotation;
|
self.rb_pos.next_position.translation = translation.into();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -748,8 +748,13 @@ impl RigidBodyBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes the builder of a new kinematic rigid body.
|
/// Initializes the builder of a new kinematic rigid body.
|
||||||
pub fn new_kinematic() -> Self {
|
pub fn new_kinematic_velocity_based() -> Self {
|
||||||
Self::new(RigidBodyType::Kinematic)
|
Self::new(RigidBodyType::KinematicVelocityBased)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initializes the builder of a new kinematic rigid body.
|
||||||
|
pub fn new_kinematic_position_based() -> Self {
|
||||||
|
Self::new(RigidBodyType::KinematicPositionBased)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes the builder of a new dynamic rigid body.
|
/// Initializes the builder of a new dynamic rigid body.
|
||||||
|
|||||||
@@ -57,13 +57,20 @@ pub enum RigidBodyType {
|
|||||||
Dynamic,
|
Dynamic,
|
||||||
/// A `RigidBodyType::Static` body cannot be affected by external forces.
|
/// A `RigidBodyType::Static` body cannot be affected by external forces.
|
||||||
Static,
|
Static,
|
||||||
/// A `RigidBodyType::Kinematic` body cannot be affected by any external forces but can be controlled
|
/// A `RigidBodyType::KinematicPositionBased` body cannot be affected by any external forces but can be controlled
|
||||||
/// by the user at the position level while keeping realistic one-way interaction with dynamic bodies.
|
/// by the user at the position level while keeping realistic one-way interaction with dynamic bodies.
|
||||||
///
|
///
|
||||||
/// One-way interaction means that a kinematic body can push a dynamic body, but a kinematic body
|
/// One-way interaction means that a kinematic body can push a dynamic body, but a kinematic body
|
||||||
/// cannot be pushed by anything. In other words, the trajectory of a kinematic body can only be
|
/// cannot be pushed by anything. In other words, the trajectory of a kinematic body can only be
|
||||||
/// modified by the user and is independent from any contact or joint it is involved in.
|
/// modified by the user and is independent from any contact or joint it is involved in.
|
||||||
Kinematic,
|
KinematicPositionBased,
|
||||||
|
/// A `RigidBodyType::KinematicVelocityBased` body cannot be affected by any external forces but can be controlled
|
||||||
|
/// by the user at the velocity level while keeping realistic one-way interaction with dynamic bodies.
|
||||||
|
///
|
||||||
|
/// One-way interaction means that a kinematic body can push a dynamic body, but a kinematic body
|
||||||
|
/// cannot be pushed by anything. In other words, the trajectory of a kinematic body can only be
|
||||||
|
/// modified by the user and is independent from any contact or joint it is involved in.
|
||||||
|
KinematicVelocityBased,
|
||||||
// Semikinematic, // A kinematic that performs automatic CCD with the static environment to avoid traversing it?
|
// Semikinematic, // A kinematic that performs automatic CCD with the static environment to avoid traversing it?
|
||||||
// Disabled,
|
// Disabled,
|
||||||
}
|
}
|
||||||
@@ -81,7 +88,8 @@ impl RigidBodyType {
|
|||||||
|
|
||||||
/// Is this rigid-body kinematic (i.e. can move but is unaffected by forces)?
|
/// Is this rigid-body kinematic (i.e. can move but is unaffected by forces)?
|
||||||
pub fn is_kinematic(self) -> bool {
|
pub fn is_kinematic(self) -> bool {
|
||||||
self == RigidBodyType::Kinematic
|
self == RigidBodyType::KinematicPositionBased
|
||||||
|
|| self == RigidBodyType::KinematicVelocityBased
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user