delete updatable
This commit is contained in:
parent
74acfbf206
commit
2c926efa0d
@ -1,7 +1,6 @@
|
|||||||
use std::collections::{HashSet,HashMap};
|
use std::collections::{HashSet,HashMap};
|
||||||
use crate::model::ModelId;
|
use crate::model::ModelId;
|
||||||
use crate::gameplay_style;
|
use crate::gameplay_style;
|
||||||
use crate::updatable::Updatable;
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct StageElement{
|
pub struct StageElement{
|
||||||
@ -101,18 +100,6 @@ impl Stage{
|
|||||||
self.unordered_checkpoints.contains(&model_id)
|
self.unordered_checkpoints.contains(&model_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[derive(Default)]
|
|
||||||
pub struct StageUpdate{
|
|
||||||
//other behaviour models of this stage can have
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone,Copy,Hash,Eq,PartialEq)]
|
#[derive(Clone,Copy,Hash,Eq,PartialEq)]
|
||||||
pub enum Zone{
|
pub enum Zone{
|
||||||
@ -199,47 +186,6 @@ impl Mode{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//this would be nice as a macro
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct ModeUpdate{
|
|
||||||
zones:HashMap<ModelId,Zone>,
|
|
||||||
stages:HashMap<StageId,StageUpdate>,
|
|
||||||
//mutually exlusive stage element behaviour
|
|
||||||
elements:HashMap<ModelId,StageElement>,
|
|
||||||
}
|
|
||||||
impl Updatable<ModeUpdate> for Mode{
|
|
||||||
fn update(&mut self,update:ModeUpdate){
|
|
||||||
self.zones.extend(update.zones);
|
|
||||||
for (stage,stage_update) in update.stages{
|
|
||||||
if let Some(stage)=self.stages.get_mut(stage.0 as usize){
|
|
||||||
stage.update(stage_update);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.elements.extend(update.elements);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl ModeUpdate{
|
|
||||||
pub fn zone(model_id:ModelId,zone:Zone)->Self{
|
|
||||||
let mut mu=Self::default();
|
|
||||||
mu.zones.insert(model_id,zone);
|
|
||||||
mu
|
|
||||||
}
|
|
||||||
pub fn stage(stage_id:StageId,stage_update:StageUpdate)->Self{
|
|
||||||
let mut mu=Self::default();
|
|
||||||
mu.stages.insert(stage_id,stage_update);
|
|
||||||
mu
|
|
||||||
}
|
|
||||||
pub fn element(model_id:ModelId,element:StageElement)->Self{
|
|
||||||
let mut mu=Self::default();
|
|
||||||
mu.elements.insert(model_id,element);
|
|
||||||
mu
|
|
||||||
}
|
|
||||||
pub fn map_stage_element_ids<F:Fn(StageId)->StageId>(&mut self,f:F){
|
|
||||||
for (_,stage_element) in self.elements.iter_mut(){
|
|
||||||
stage_element.stage_id=f(stage_element.stage_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default,Clone)]
|
#[derive(Default,Clone)]
|
||||||
pub struct Modes{
|
pub struct Modes{
|
||||||
@ -258,15 +204,3 @@ impl Modes{
|
|||||||
self.modes.get(mode.0 as usize)
|
self.modes.get(mode.0 as usize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub struct ModesUpdate{
|
|
||||||
modes:HashMap<ModeId,ModeUpdate>,
|
|
||||||
}
|
|
||||||
impl Updatable<ModesUpdate> for Modes{
|
|
||||||
fn update(&mut self,update:ModesUpdate){
|
|
||||||
for (mode,mode_update) in update.modes{
|
|
||||||
if let Some(mode)=self.modes.get_mut(mode.0 as usize){
|
|
||||||
mode.update(mode_update);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,6 @@ pub mod aabb;
|
|||||||
pub mod model;
|
pub mod model;
|
||||||
pub mod zeroes;
|
pub mod zeroes;
|
||||||
pub mod integer;
|
pub mod integer;
|
||||||
pub mod updatable;
|
|
||||||
pub mod instruction;
|
pub mod instruction;
|
||||||
pub mod gameplay_attributes;
|
pub mod gameplay_attributes;
|
||||||
pub mod gameplay_modes;
|
pub mod gameplay_modes;
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
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),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//*/
|
|
Loading…
Reference in New Issue
Block a user