add HarnessState to callbacks, move HarnessPlugin to src_testbed/harness/plugin

This commit is contained in:
rezural
2020-12-20 23:58:50 +11:00
parent 315b84a85e
commit be07227e94
4 changed files with 34 additions and 14 deletions

View File

@@ -1,10 +1,13 @@
use crate::physics::{PhysicsEvents, PhysicsState}; use crate::physics::{PhysicsEvents, PhysicsState};
use crate::HarnessPlugin;
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase}; use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase};
use rapier::math::Vector; use rapier::math::Vector;
use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline}; use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline};
pub mod plugin;
use plugin::HarnessPlugin;
// #[derive(PartialEq)] // #[derive(PartialEq)]
// pub enum RunState { // pub enum RunState {
// Initialized, // Initialized,
@@ -32,7 +35,7 @@ pub struct Harness {
pub state: HarnessState, pub state: HarnessState,
} }
type Callbacks = Vec<Box<dyn FnMut(&mut PhysicsState, &PhysicsEvents, f32)>>; type Callbacks = Vec<Box<dyn FnMut(&mut PhysicsState, &PhysicsEvents, &HarnessState, f32)>>;
#[allow(dead_code)] #[allow(dead_code)]
impl Harness { impl Harness {
@@ -141,7 +144,8 @@ impl Harness {
self.plugins.push(Box::new(plugin)); self.plugins.push(Box::new(plugin));
} }
pub fn add_callback<F: FnMut(&mut PhysicsState, &PhysicsEvents, f32) + 'static>( // type StepCallback = FnMut(&mut PhysicsState, &PhysicsEvents, f32);
pub fn add_callback<F: FnMut(&mut PhysicsState, &PhysicsEvents, &HarnessState, f32) + 'static>(
&mut self, &mut self,
callback: F, callback: F,
) { ) {
@@ -191,10 +195,22 @@ impl Harness {
plugin.step(&mut self.physics) plugin.step(&mut self.physics)
} }
//FIXME: not sure if this makes sense here, basically copied from Testbed for f in &mut self.callbacks {
for plugin in &mut self.plugins { f(
plugin.run_callbacks(&mut self.physics, self.time) &mut self.physics,
&self.events,
&self.state,
self.time,
)
} }
for plugin in &mut self.plugins {
plugin.run_callbacks(&mut self.physics, &self.events,&self.state, self.time)
}
self.events.poll_all();
self.time += self.physics.integration_parameters.dt();
} }
pub fn run(&mut self) { pub fn run(&mut self) {

View File

@@ -0,0 +1,10 @@
use crate::harness::HarnessState;
use crate::PhysicsState;
use crate::physics::PhysicsEvents;
pub trait HarnessPlugin {
//FIXME: is run_callbacks needed?
fn run_callbacks(&mut self, physics: &mut PhysicsState, events: &PhysicsEvents, harness_state: &HarnessState, t: f32);
fn step(&mut self, physics: &mut PhysicsState);
fn profiling_string(&self) -> String;
}

View File

@@ -23,7 +23,7 @@ extern crate log;
pub use crate::engine::GraphicsManager; pub use crate::engine::GraphicsManager;
pub use crate::physics::PhysicsState; pub use crate::physics::PhysicsState;
pub use crate::plugin::HarnessPlugin; pub use crate::harness::plugin::HarnessPlugin;
pub use crate::plugin::TestbedPlugin; pub use crate::plugin::TestbedPlugin;
pub use crate::testbed::Testbed; pub use crate::testbed::Testbed;
@@ -34,7 +34,7 @@ pub mod harness;
#[cfg(feature = "other-backends")] #[cfg(feature = "other-backends")]
mod nphysics_backend; mod nphysics_backend;
pub mod objects; pub mod objects;
mod physics; pub mod physics;
#[cfg(all(feature = "dim3", feature = "other-backends"))] #[cfg(all(feature = "dim3", feature = "other-backends"))]
mod physx_backend; mod physx_backend;
mod plugin; mod plugin;

View File

@@ -11,9 +11,3 @@ pub trait TestbedPlugin {
fn profiling_string(&self) -> String; fn profiling_string(&self) -> String;
} }
pub trait HarnessPlugin {
//FIXME: is run_callbacks needed?
fn run_callbacks(&mut self, physics: &mut PhysicsState, t: f32);
fn step(&mut self, physics: &mut PhysicsState);
fn profiling_string(&self) -> String;
}