diff options
author | Nao Pross <naopross@thearcway.org> | 2018-12-17 02:07:27 +0100 |
---|---|---|
committer | Nao Pross <naopross@thearcway.org> | 2018-12-17 02:07:27 +0100 |
commit | b747ea18619926e1cff0252e0e7b2985b7868faa (patch) | |
tree | b4fec63f4317ab196b1940a42bfda77debb017b9 /src/main.rs | |
parent | Add sfml and tiled dependencies (diff) | |
download | Subconscious-rs-b747ea18619926e1cff0252e0e7b2985b7868faa.tar.gz Subconscious-rs-b747ea18619926e1cff0252e0e7b2985b7868faa.zip |
Add game state object shared across threads
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs index 2679ac4..e2353e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,48 @@ mod game; mod graphics; +use std::thread; +use std::sync::{Arc, Mutex}; fn main() { - game::start(); + let state_ = Arc::new(Mutex::new(game::new())); - let graphics_thread = std::thread::spawn(move || { - graphics::start(); + let state = state_.clone(); + let game_thread = thread::spawn(move || { + loop { + // aquire state resource + let mut state = match state.lock() { + Ok(state) => state, + Err(poisoned) => poisoned.into_inner(), + }; + + if state.running == false { + break; + } + + game::update(&mut state); + } + }); + + + let state = state_.clone(); + let graphics_thread = thread::spawn(move || { + let mut window = graphics::start(); + + while window.is_open() { + graphics::render(&mut window); + graphics::update(&mut window); + } + + // aquire state resource + let mut state = match state.lock() { + Ok(state) => state, + Err(poisoned) => poisoned.into_inner(), + }; + + state.running = false; }); graphics_thread.join().unwrap(); + game_thread.join().unwrap(); } |