#![allow(clippy::too_many_arguments, clippy::type_complexity)]
#![warn(missing_docs)]
#![doc = include_str!("../readme.md")]
use avian3d::prelude::*;
use bevy_app::prelude::*;
use bevy_ecs::prelude::*;
pub mod actor;
mod cooldown;
pub mod input;
mod interaction;
mod math;
pub mod output;
pub mod prop;
mod rng;
mod verb;
pub use rng::*;
pub mod prelude {
pub(crate) use super::{
HandleVerbSystem,
cooldown::prelude::*,
prop::{NonPickupMass, prelude::*},
};
pub use crate::{
AvianPickupPlugin, AvianPickupSystem, actor::prelude::*, input::prelude::*,
output::prelude::*,
};
pub(crate) use avian3d::prelude::*;
pub(crate) use bevy_app::prelude::*;
pub(crate) use bevy_ecs::prelude::*;
pub(crate) use bevy_log::prelude::*;
pub(crate) use bevy_math::prelude::*;
pub(crate) use bevy_reflect::prelude::*;
pub(crate) use bevy_transform::prelude::*;
pub(crate) use bevy_utils::prelude::*;
}
#[derive(Default)]
#[non_exhaustive]
pub struct AvianPickupPlugin;
impl Plugin for AvianPickupPlugin {
fn build(&self, app: &mut App) {
let physics_schedule = app.get_schedule(PhysicsSchedule);
if physics_schedule.is_none() {
panic!(
"Failed to build `AvianPickupPlugin`:\
Avian's `PhysicsSchedule` was not found. Make sure to add Avian's plugins *before* `AvianPickupPlugin`.\
This usually done by adding `PhysicsPlugins` to your `App`."
)
}
app.configure_sets(
PhysicsSchedule,
(
AvianPickupSystem::First,
AvianPickupSystem::HandleVerb,
AvianPickupSystem::ResetIdle,
AvianPickupSystem::TickTimers,
AvianPickupSystem::Last,
)
.chain()
.before(PhysicsStepSystems::First),
)
.configure_sets(
PhysicsSchedule,
(
HandleVerbSystem::Pull,
HandleVerbSystem::Hold,
HandleVerbSystem::Drop,
HandleVerbSystem::Throw,
)
.chain()
.in_set(AvianPickupSystem::HandleVerb),
);
app.add_plugins((
input::plugin,
output::plugin,
actor::plugin,
interaction::plugin,
cooldown::plugin,
prop::plugin,
verb::plugin,
rng::plugin,
));
}
}
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub enum AvianPickupSystem {
First,
HandleVerb,
ResetIdle,
TickTimers,
Last,
}
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub(crate) enum HandleVerbSystem {
Pull,
Hold,
Drop,
Throw,
}