diff --git a/lib/common/src/gameplay_modes.rs b/lib/common/src/gameplay_modes.rs index 42ee25043..33d73db46 100644 --- a/lib/common/src/gameplay_modes.rs +++ b/lib/common/src/gameplay_modes.rs @@ -1,7 +1,6 @@ use std::collections::{HashSet,HashMap}; use crate::model::ModelId; use crate::gameplay_style; -use crate::updatable::Updatable; #[derive(Clone)] pub struct StageElement{ @@ -312,10 +311,10 @@ pub struct StageUpdate{ ordered_checkpoints:HashMap<CheckpointId,ModelId>, unordered_checkpoints:HashSet<ModelId>, } -impl Updatable<StageUpdate> for Stage{ - fn update(&mut self,update:StageUpdate){ - self.ordered_checkpoints.extend(update.ordered_checkpoints); - self.unordered_checkpoints.extend(update.unordered_checkpoints); +impl StageUpdate{ + fn apply_to(self,stage:&mut Stage){ + stage.ordered_checkpoints.extend(self.ordered_checkpoints); + stage.unordered_checkpoints.extend(self.unordered_checkpoints); } } @@ -327,15 +326,15 @@ pub struct ModeUpdate{ //mutually exlusive stage element behaviour elements:Option<(ModelId,StageElement)>, } -impl Updatable<ModeUpdate> for Mode{ - fn update(&mut self,update:ModeUpdate){ - self.zones.extend(update.zones); - if let Some((StageId(stage_id),stage_update))=update.stages{ - if let Some(stage)=self.stages.get_mut(stage_id as usize){ - stage.update(stage_update); +impl ModeUpdate{ + fn apply_to(self,mode:&mut Mode){ + mode.zones.extend(self.zones); + if let Some((StageId(stage_id),stage_update))=self.stages{ + if let Some(stage)=mode.stages.get_mut(stage_id as usize){ + stage_update.apply_to(stage); } } - self.elements.extend(update.elements); + mode.elements.extend(self.elements); } } impl ModeUpdate{ @@ -369,11 +368,11 @@ impl ModeUpdate{ pub struct ModesUpdate{ modes:HashMap<ModeId,ModeUpdate>, } -impl Updatable<ModesUpdate> for Modes{ - fn update(&mut self,update:ModesUpdate){ - for (ModeId(mode_id),mode_update) in update.modes{ - if let Some(mode)=self.modes.get_mut(mode_id as usize){ - mode.update(mode_update); +impl ModesUpdate{ + fn apply_to(self,modes:&mut Modes){ + for (ModeId(mode_id),mode_update) in self.modes{ + if let Some(mode)=modes.modes.get_mut(mode_id as usize){ + mode_update.apply_to(mode); } } } @@ -426,7 +425,7 @@ impl ModesBuilder{ if let Some(mode)=modes.get_mut(final_mode_id.get() as usize){ if let Some(&final_stage_id)=mode.stage_id_map.get(&builder_stage_id){ if let Some(stage)=mode.mode.get_stage_mut(final_stage_id){ - stage.update(stage_update); + stage_update.apply_to(stage); } } } @@ -447,7 +446,7 @@ impl ModesBuilder{ mode.stage_id_map.get(&StageId::new(builder_stage_id)).copied() ).unwrap_or(StageId::FIRST) ); - mode.mode.update(mode_update); + mode_update.apply_to(&mut mode.mode); } } } diff --git a/lib/common/src/lib.rs b/lib/common/src/lib.rs index e6364bab8..c48783692 100644 --- a/lib/common/src/lib.rs +++ b/lib/common/src/lib.rs @@ -9,7 +9,6 @@ pub mod timer; pub mod integer; pub mod physics; pub mod session; -pub mod updatable; pub mod instruction; pub mod gameplay_attributes; pub mod gameplay_modes; diff --git a/lib/common/src/updatable.rs b/lib/common/src/updatable.rs deleted file mode 100644 index f9e8a07ab..000000000 --- a/lib/common/src/updatable.rs +++ /dev/null @@ -1,57 +0,0 @@ -// This whole thing should be a drive macro - -pub trait Updatable<Updater>{ - fn update(&mut self,update:Updater); -} -#[derive(Clone,Copy,Hash,Eq,PartialEq)] -struct InnerId(u32); -#[derive(Clone)] -struct Inner{ - id:InnerId, - enabled:bool, -} -#[derive(Clone,Copy,Hash,Eq,PartialEq)] -struct OuterId(u32); -struct Outer{ - id:OuterId, - inners:std::collections::HashMap<InnerId,Inner>, -} - -enum Update<I,U>{ - Insert(I), - Update(U), - Remove -} - -struct InnerUpdate{ - //#[updatable(Update)] - enabled:Option<bool>, -} -struct OuterUpdate{ - //#[updatable(Insert,Update,Remove)] - inners:std::collections::HashMap<InnerId,Update<Inner,InnerUpdate>>, - //#[updatable(Update)] - //inners:std::collections::HashMap<InnerId,InnerUpdate>, -} -impl Updatable<InnerUpdate> for Inner{ - fn update(&mut self,update:InnerUpdate){ - if let Some(enabled)=update.enabled{ - self.enabled=enabled; - } - } -} -impl Updatable<OuterUpdate> for Outer{ - fn update(&mut self,update:OuterUpdate){ - for (id,up) in update.inners{ - match up{ - Update::Insert(new_inner)=>self.inners.insert(id,new_inner), - Update::Update(inner_update)=>self.inners.get_mut(&id).map(|inner|{ - let old=inner.clone(); - inner.update(inner_update); - old - }), - Update::Remove=>self.inners.remove(&id), - }; - } - } -}