use std::fmt::Debug; use bevy::prelude::{Mut, Ref}; use serde::{Deserialize, Serialize}; use serde::de::DeserializeOwned; use crate::prelude::DetectChanges; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct WasUpdated(T, bool); impl From> for WasUpdated { fn from(value: Ref) -> Self { let changed = value.is_changed(); Self(value.into_inner().clone(), changed) } } impl WasUpdated { pub fn update(&self, mut data: Mut) { if self.1 { *data = self.0.clone(); } } pub fn data(&self) -> &T { &self.0 } }