mod collider;
mod impulse_joint;
use crate::MirrorPlugin;
use bevy::{
app::PluginGroupBuilder,
prelude::{Plugin, PluginGroup},
};
use bevy_rapier3d::prelude::{
AdditionalMassProperties, Collider, ColliderMassProperties, ImpulseJoint,
};
pub use collider::{AdditionalMassPropertiesMirror, ColliderMassPropertiesMirror, ColliderMirror};
pub use impulse_joint::ImpulseJointMirror;
use self::{
collider::{Compound, CompoundShapeElement},
impulse_joint::{JointMotor, MotorModel},
};
pub type ImpulseJointMirrorPlugin = MirrorPlugin<ImpulseJoint, ImpulseJointMirror>;
pub type ColliderMirrorPlugin = MirrorPlugin<Collider, ColliderMirror>;
pub type ColliderMassPropertiesMirrorPlugin =
MirrorPlugin<ColliderMassProperties, ColliderMassPropertiesMirror>;
pub type AdditionalMassPropertiesMirrorPlugin =
MirrorPlugin<AdditionalMassProperties, AdditionalMassPropertiesMirror>;
pub struct RapierMirrorsPlugins;
struct AdditionalReflectionsPlugin;
impl Plugin for AdditionalReflectionsPlugin {
fn build(&self, app: &mut bevy::prelude::App) {
app.register_type::<Compound>()
.register_type::<JointMotor>()
.register_type::<MotorModel>()
.register_type::<CompoundShapeElement>();
}
}
impl PluginGroup for RapierMirrorsPlugins {
fn build(self) -> PluginGroupBuilder {
PluginGroupBuilder::start::<Self>()
.add(AdditionalMassPropertiesMirrorPlugin::new())
.add(ColliderMassPropertiesMirrorPlugin::new())
.add(ColliderMirrorPlugin::new())
.add(ImpulseJointMirrorPlugin::new())
.add(AdditionalReflectionsPlugin)
}
}