diff --git a/src/dispatcher/mod.rs b/src/dispatcher/mod.rs index af2bec1..1df853e 100644 --- a/src/dispatcher/mod.rs +++ b/src/dispatcher/mod.rs @@ -43,7 +43,7 @@ impl<'a> Dispatcher<'a> { max_stack_time, current_stack_start_time: Instant::now(), dt: 0.0, - }; + } } /// Works through the two stacks and dispatches the topmost @@ -222,18 +222,23 @@ impl<'a> Dispatcher<'a> { match self.store_refs.take() { Some(x) => { local_store_refs = x; - for reference in references { - local_store_refs.push(Some(reference)); - } } _ => { local_store_refs = vec![]; - for reference in references { - local_store_refs.push(Some(reference)); - } } } + for reference in references { + local_store_refs.push(Some(reference)); + } + self.store_refs = Some(local_store_refs); } + + ///Used to drop all Store references before ending the game loop + pub fn drop_refs(&mut self) { + match self.store_refs.take(){ + _ => {} + } + } } diff --git a/src/lib.rs b/src/lib.rs index cc12cbe..ee31eff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,8 +18,12 @@ pub mod scene_manager; mod tests; /// "Front-end"-function of the dispatcher -pub fn game_loop<'a>(disp: &'a mut dispatcher::Dispatcher<'a>, store_refs: Vec<&'a mut store::Store<'a>>) { - disp.enter_refs(store_refs); +pub fn game_loop<'a>(mut disp: & mut dispatcher::Dispatcher<'a>, store_refs: Vec<&'a mut store::Store<'a>>) { + + disp.enter_refs(store_refs); + + while disp.dispatch() {}; + + disp.drop_refs(); - while disp.dispatch() {}; }