lifecycler 0.2.1

Bevy Game Jam #5 submission. Terminal aquarium.
Documentation
use bevy::prelude::*;

use crate::Flags;

pub(super) fn plugin(app: &mut App) {
    app.add_systems(PostUpdate, deferred_despawn_system);
}

#[derive(Component)]
pub struct AttemptDespawn;

fn deferred_despawn_system(
    mut commands: Commands,
    to_despawn_query: Query<Entity, With<AttemptDespawn>>,
) {
    for to_despawn in to_despawn_query.iter() {
        if let Some(mut entity) = commands.get_entity(to_despawn) {
            entity.despawn();
        }
    }
}

pub fn play_sfx(commands: &mut Commands, source: &Handle<AudioSource>, flags: &Flags) {
    if !flags.muted {
        commands.spawn(AudioBundle {
            source: source.clone(),
            settings: PlaybackSettings::DESPAWN,
        });
    }
}