use bevy_ecs::resource::Resource;
use crate::FeedbackStyle;
use crate::inner::SharedGenerators;
#[derive(Resource, Clone, Debug)]
pub struct ImpactResource {
inner: Option<SharedGenerators>,
}
impl Default for ImpactResource {
fn default() -> Self {
Self::new(true)
}
}
impl ImpactResource {
pub fn new(enabled: bool) -> Self {
Self {
inner: if enabled {
Some(Default::default())
} else {
None
},
}
}
}
impl ImpactResource {
pub fn disable(&mut self) {
self.inner = None;
}
pub fn enable(&mut self) {
if self.inner.is_none() {
self.inner = Some(Default::default());
}
}
pub fn enabled(&self) -> bool {
self.inner.is_some()
}
pub fn toggle(&mut self) -> bool {
if self.inner.is_none() {
self.enabled();
true
} else {
self.disable();
false
}
}
pub fn prepare(&mut self) {
if let Some(inner) = &self.inner {
inner.prepare();
}
}
pub fn impact(&mut self, style: FeedbackStyle) {
if let Some(inner) = &self.inner {
inner.impact(style);
}
}
pub fn impact_with_intensity(&mut self, style: FeedbackStyle, intensity: f64) {
if let Some(inner) = &self.inner {
inner.impact_with_intensity(style, intensity);
}
}
}