pub struct PhysicsLitePlugin {
pub bodies: Vec<PhysicsBody>,
pub gravity: Vec3,
}Expand description
A plugin that integrates velocity, applies gravity, and reflects bodies off bounding box walls.
Runs in the [RuntimePhase::Simulate] phase. Pairs well with
crate::FixedTimestep for stable integration.
World-bounds collisions produce ContactEvents in crate::RuntimeOutput
with node_b set to NodeId::MAX (a sentinel for world geometry).
§Example
ⓘ
use viewport_lib::{Aabb, FixedTimestep, PhysicsBody, PhysicsLitePlugin, ViewportRuntime};
let bounds = Aabb { min: glam::Vec3::splat(-5.0), max: glam::Vec3::splat(5.0) };
let mut physics = PhysicsLitePlugin::new()
.with_gravity(glam::Vec3::new(0.0, 0.0, -9.81));
physics.add_body(
PhysicsBody::new(node_id)
.with_velocity(glam::Vec3::new(2.0, 1.0, 4.0))
.with_bounds(bounds),
);
let runtime = ViewportRuntime::new()
.with_fixed_timestep(FixedTimestep::new(60.0))
.with_plugin(physics);Fields§
§bodies: Vec<PhysicsBody>All bodies managed by this plugin.
gravity: Vec3Global gravity acceleration vector (world space).
Implementations§
Source§impl PhysicsLitePlugin
impl PhysicsLitePlugin
Sourcepub fn with_gravity(self, gravity: Vec3) -> Self
pub fn with_gravity(self, gravity: Vec3) -> Self
Set the gravity vector.
Sourcepub fn add_body(&mut self, body: PhysicsBody)
pub fn add_body(&mut self, body: PhysicsBody)
Add a body.
Sourcepub fn body_mut(&mut self, node_id: NodeId) -> Option<&mut PhysicsBody>
pub fn body_mut(&mut self, node_id: NodeId) -> Option<&mut PhysicsBody>
Get a mutable reference to the body for node_id, if it exists.
Trait Implementations§
Source§impl Default for PhysicsLitePlugin
impl Default for PhysicsLitePlugin
Source§impl RuntimePlugin for PhysicsLitePlugin
impl RuntimePlugin for PhysicsLitePlugin
Source§fn priority(&self) -> i32
fn priority(&self) -> i32
Numeric execution priority. Lower values run first. Use the constants
in
phase as base values and offset within a band if needed.Source§fn step(&mut self, ctx: &mut RuntimeStepContext<'_>)
fn step(&mut self, ctx: &mut RuntimeStepContext<'_>)
Called once per phase execution. Read more
Source§fn submit(&mut self, _ctx: &RuntimeStepContext<'_>)
fn submit(&mut self, _ctx: &RuntimeStepContext<'_>)
Called once per frame before the step loop, in priority order. Read more
Source§fn collect(&mut self, _ctx: &mut RuntimeStepContext<'_>)
fn collect(&mut self, _ctx: &mut RuntimeStepContext<'_>)
Called once per frame after the step loop, in priority order. Read more
Source§fn on_event(&mut self, _event: &RuntimeEvent, _ctx: &mut RuntimeStepContext<'_>)
fn on_event(&mut self, _event: &RuntimeEvent, _ctx: &mut RuntimeStepContext<'_>)
Called for each lifecycle event before the step loop.
Auto Trait Implementations§
impl Freeze for PhysicsLitePlugin
impl RefUnwindSafe for PhysicsLitePlugin
impl Send for PhysicsLitePlugin
impl Sync for PhysicsLitePlugin
impl Unpin for PhysicsLitePlugin
impl UnsafeUnpin for PhysicsLitePlugin
impl UnwindSafe for PhysicsLitePlugin
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.