mod.rs (1693B)
1 use std::ops::Deref; 2 3 use specs::{ 4 storage::{ComponentEvent, MaskedStorage}, 5 BitSet, 6 Component, 7 ReaderId, 8 Storage, 9 Tracked, 10 }; 11 12 pub use self::{ 13 physics_stepper::PhysicsStepperSystem, 14 sync_bodies_from_physics::SyncBodiesFromPhysicsSystem, 15 sync_bodies_to_physics::SyncBodiesToPhysicsSystem, 16 sync_colliders_to_physics::SyncCollidersToPhysicsSystem, 17 sync_parameters_to_physics::SyncParametersToPhysicsSystem, 18 }; 19 20 mod physics_stepper; 21 mod sync_bodies_from_physics; 22 mod sync_bodies_to_physics; 23 mod sync_colliders_to_physics; 24 mod sync_parameters_to_physics; 25 26 /// Iterated over the `ComponentEvent::Inserted`s of a given, tracked `Storage` 27 /// and returns the results in a `BitSet`. 28 pub(crate) fn iterate_component_events<T, D>( 29 tracked_storage: &Storage<T, D>, 30 reader_id: &mut ReaderId<ComponentEvent>, 31 ) -> (BitSet, BitSet, BitSet) 32 where 33 T: Component, 34 T::Storage: Tracked, 35 D: Deref<Target = MaskedStorage<T>>, 36 { 37 let (mut inserted, mut modified, mut removed) = (BitSet::new(), BitSet::new(), BitSet::new()); 38 for component_event in tracked_storage.channel().read(reader_id) { 39 match component_event { 40 ComponentEvent::Inserted(id) => { 41 debug!("Got Inserted event with id: {}", id); 42 inserted.add(*id); 43 } 44 ComponentEvent::Modified(id) => { 45 debug!("Got Modified event with id: {}", id); 46 modified.add(*id); 47 } 48 ComponentEvent::Removed(id) => { 49 debug!("Got Removed event with id: {}", id); 50 removed.add(*id); 51 } 52 } 53 } 54 55 (inserted, modified, removed) 56 }