~starkingdoms/starkingdoms

ref: 302ee06fb6c522c2bf5d6908329d24a72dffa671 starkingdoms/crates/unified/src/shared/net/was_updated.rs -rw-r--r-- 737 bytes
302ee06f — core netcode: fix up PlanetDto and try to figure out flickering 6 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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: Clone + Serialize + Debug>(T, bool);
impl<T: Clone + Serialize + DeserializeOwned + Debug> From<Ref<'_, T>> for WasUpdated<T> {
    fn from(value: Ref<T>) -> Self {
        let changed = value.is_changed();
        Self(value.into_inner().clone(), changed)
    }
}
impl<T: Clone + Serialize + DeserializeOwned + Debug> WasUpdated<T> {
    pub fn update(&self, mut data: Mut<T>) {
        if self.1 {
            *data = self.0.clone();
        }
    }
    pub fn data(&self) -> &T {
        &self.0
    }
}