pub mod color;
pub mod effect;
pub mod grid;
pub mod instance;
use super::AssetTrait;
use crate::asset::group::GroupIndices;
use crate::sound::trigger_ref::{CollectSoundTriggers, SoundTriggerSet};
use effect::Effect;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Scene {
pub effects: Vec<Effect>,
}
impl Scene {
pub fn group_indices(&self) -> GroupIndices {
self.effects
.iter()
.map(|effect| effect.group_index)
.collect()
}
pub fn effect(&mut self, index: usize) -> Option<&mut Effect> {
self.effects.get_mut(index)
}
pub fn effects(&self) -> &[Effect] {
&self.effects
}
pub fn add_effect(&mut self, effect: Effect) -> usize {
self.effects.push(effect);
self.effects.len() - 1
}
pub fn remove_effect(&mut self, index: usize) -> Option<Effect> {
let mut effect = None;
if self.effects.len() > index {
effect = Some(self.effects.remove(index));
}
effect
}
}
impl AssetTrait for Scene {
const DIR_NAME: &'static str = "scenes";
const NAME: &'static str = "Scene";
const SHOW_NAME_IF_SELECTED: bool = true;
}
impl CollectSoundTriggers for Scene {
fn collect_sound_triggers(&self, triggers: &mut SoundTriggerSet) {
for effect in &self.effects {
effect.collect_sound_triggers(triggers);
}
}
}