use crate::particle_system_data3::ParticleSystemData3Ptr;
use std::sync::{RwLock, Arc};
pub struct ParticleEmitter3Data {
_is_enabled: bool,
_particles: Option<ParticleSystemData3Ptr>,
}
impl ParticleEmitter3Data {
pub fn new() -> ParticleEmitter3Data {
return ParticleEmitter3Data {
_is_enabled: true,
_particles: None,
};
}
}
pub trait ParticleEmitter3 {
fn update(&mut self, current_time_in_seconds: f64, time_interval_in_seconds: f64);
fn target(&self) -> &Option<ParticleSystemData3Ptr> {
return &self.view()._particles;
}
fn set_target(&mut self, particles: ParticleSystemData3Ptr) {
self.view_mut()._particles = Some(particles.clone());
self.on_set_target(particles.clone());
}
fn is_enabled(&self) -> bool {
return self.view()._is_enabled;
}
fn set_is_enabled(&mut self, enabled: bool) {
self.view_mut()._is_enabled = enabled;
}
fn on_set_target(&self, _: ParticleSystemData3Ptr) {
unimplemented!()
}
fn on_update(&mut self, current_time_in_seconds: f64,
time_interval_in_seconds: f64);
fn view(&self) -> &ParticleEmitter3Data;
fn view_mut(&mut self) -> &mut ParticleEmitter3Data;
}
pub type ParticleEmitter3Ptr = Arc<RwLock<dyn ParticleEmitter3 + Send + Sync>>;