An experimental, status effects-as-entities system for Bevy.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Improve insert mode performance.

+7 -7
+4 -1
src/bundle_inspector.rs
··· 1 1 use crate::EffectMode; 2 2 use bevy_ecs::prelude::{Bundle, Entity, Name, Resource, World}; 3 + use bevy_ecs::relationship::RelationshipHookMode; 3 4 4 5 #[derive(Resource)] 5 6 pub(crate) struct BundleInspector { ··· 21 22 impl BundleInspector { 22 23 pub fn get_effect_meta<B: Bundle>(&mut self, bundle: B) -> (Option<Name>, EffectMode) { 23 24 let e = self.scratch_entity; 24 - self.world.entity_mut(e).insert(bundle); 25 + self.world 26 + .entity_mut(e) 27 + .insert_with_relationship_hook_mode(bundle, RelationshipHookMode::Skip); 25 28 26 29 let name = self.world.entity(e).get::<Name>().cloned(); 27 30
+3 -6
src/command.rs
··· 96 96 return; 97 97 } 98 98 99 - let Some(effected_by) = world 100 - .get::<EffectedBy>(self.target) 101 - .map(|e| e.collection().clone()) 102 - else { 99 + let Some(effected_by) = world.get::<EffectedBy>(self.target).map(|e| e.collection()) else { 103 100 world.spawn(self.bundle_full()); 104 101 return; 105 102 }; ··· 117 114 118 115 let other_name = world.get::<Name>(*entity); 119 116 120 - if name == other_name.cloned() { 117 + if name.as_ref() == other_name { 121 118 return Some(*entity); 122 119 } 123 120 ··· 132 129 match mode { 133 130 EffectMode::Stack => unreachable!(), 134 131 EffectMode::Insert => { 135 - world.entity_mut(old_entity).insert(self.bundle_full()); 132 + world.entity_mut(old_entity).insert(self.bundle); 136 133 } 137 134 EffectMode::Merge => self.merge(world, old_entity), 138 135 }