effects from dead entities are now removed from queue without running
This commit is contained in:
parent
66f5a8d826
commit
71f69e8fe4
2 changed files with 15 additions and 0 deletions
|
|
@ -106,6 +106,7 @@ pub fn bloodstain(ecs: &mut World, target: usize) {
|
|||
}
|
||||
|
||||
pub fn entity_death(ecs: &mut World, effect: &EffectSpawner, target: Entity) {
|
||||
super::DEAD_ENTITIES.lock().unwrap().push_back(target);
|
||||
let mut xp_gain = 0;
|
||||
let mut pools = ecs.write_storage::<Pools>();
|
||||
let attributes = ecs.read_storage::<Attributes>();
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ lazy_static! {
|
|||
pub static ref EFFECT_QUEUE: Mutex<VecDeque<EffectSpawner>> = Mutex::new(VecDeque::new());
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
pub static ref DEAD_ENTITIES: Mutex<VecDeque<Entity>> = Mutex::new(VecDeque::new());
|
||||
}
|
||||
|
||||
pub enum EffectType {
|
||||
Damage { amount: i32 },
|
||||
Healing { amount: i32 },
|
||||
|
|
@ -51,6 +55,16 @@ pub fn add_effect(source: Option<Entity>, effect_type: EffectType, target: Targe
|
|||
|
||||
/// Iterates through the effects queue, applying each effect to their target.
|
||||
pub fn run_effects_queue(ecs: &mut World) {
|
||||
// First removes any effect in the EFFECT_QUEUE with a dead entity as its source.
|
||||
loop {
|
||||
let dead_entity: Option<Entity> = DEAD_ENTITIES.lock().unwrap().pop_front();
|
||||
if let Some(dead_entity) = dead_entity {
|
||||
EFFECT_QUEUE.lock().unwrap().retain(|x| x.source != Some(dead_entity));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Then runs every effect that remains in the queue.
|
||||
loop {
|
||||
let effect: Option<EffectSpawner> = EFFECT_QUEUE.lock().unwrap().pop_front();
|
||||
if let Some(effect) = effect {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue