use glc::vector::Vector4f; use serde::{Deserialize, Serialize}; use specs::{ error::NoError, saveload::{ConvertSaveload, Marker}, Component, Entity, HashMapStorage, }; #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct Player { pub index: usize, pub color: Vector4f, } #[derive(Copy, Clone, Debug)] pub struct Owned { pub owner: Entity, } #[derive(Serialize, Deserialize)] pub struct OwnedData { pub owner: M, } impl Component for Player { type Storage = HashMapStorage; } impl Component for Owned { type Storage = HashMapStorage; } impl ConvertSaveload for Owned where for<'de> M: Marker + Serialize + Deserialize<'de>, { type Data = OwnedData; type Error = NoError; fn convert_into(&self, mut ids: F) -> Result where F: FnMut(Entity) -> Option, { let owner = ids(self.owner).unwrap(); Ok(OwnedData { owner }) } fn convert_from(data: Self::Data, mut ids: F) -> Result where F: FnMut(M) -> Option, { let owner = ids(data.owner).unwrap(); Ok(Owned { owner }) } }