use crate::PreferencesType;
use bevy::ecs::system::SystemParam;
use bevy::prelude::*;
use std::ops::{Deref, DerefMut};
#[derive(Resource, Deref, DerefMut, Reflect)]
#[reflect(Resource)]
pub struct PreferencesResource<T: PreferencesType>(T);
impl<T: PreferencesType> PreferencesResource<T> {
pub(crate) fn new(value: T) -> Self {
Self(value)
}
}
#[derive(SystemParam)]
pub struct Preferences<'w, T: PreferencesType> {
resource: ResMut<'w, PreferencesResource<T>>,
}
impl<'w, T> Deref for Preferences<'w, T>
where
T: PreferencesType,
{
type Target = T;
fn deref(&self) -> &Self::Target {
&self.resource
}
}
impl<'w, T> DerefMut for Preferences<'w, T>
where
T: PreferencesType,
{
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.resource
}
}
impl<'w, T> PartialEq<T> for Preferences<'w, T>
where
T: PreferencesType + PartialEq,
{
fn eq(&self, other: &T) -> bool {
(**self.resource).eq(other)
}
}