diff --git a/src/bin/main.rs b/src/bin/main.rs index 394a6af..55fe120 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -30,17 +30,20 @@ fn main() { ); let end_scene = init_end_scene("src/bin/resources/game_over.jpg", None); + // let end_scene = init_end_scene("src/bin/resources/game_over.jpg", Some(4000)); let mut engine = init_engine(scene, end_scene, WIDTH, HEIGHT); let main_pos_arc = engine.main_pos.clone(); let end_scene_flag = engine.is_end_scene_active.clone(); + let mut prev_x = 0; std::thread::spawn(move || { loop { let (x, y) = *main_pos_arc.read().unwrap(); println!("position of main object is ({}, {})", x, y); - if x > 150 { + if x > 150 && prev_x <= 150 { end_scene_flag.store(true, std::sync::atomic::Ordering::SeqCst); } + prev_x = x; } }); diff --git a/src/engine/mod.rs b/src/engine/mod.rs index 1b8f82e..89563c0 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -134,13 +134,6 @@ impl Engine for GameEngine { let main_pos_arc = self.main_pos.clone(); let is_end_scene_active = self.is_end_scene_active.clone(); - let start_scene = self - .render - .read() - .unwrap() - .scene_manager - .active_scene - .clone(); let new_background = renderer .read() .unwrap() @@ -157,11 +150,10 @@ impl Engine for GameEngine { thread::sleep(Duration::from_millis(50)); }; - //dbg!("Producer has started"); - let screen_size = (WIDTH * HEIGHT) as usize; loop { if is_end_scene_active.load(Ordering::SeqCst) { + let prev_scene = renderer.read().unwrap().scene_manager.active_scene.clone(); let prev_background = renderer .write() .unwrap() @@ -200,15 +192,15 @@ impl Engine for GameEngine { } } renderer.write().unwrap().scene_manager = SceneManager::new( - start_scene.clone(), - renderer.read().unwrap().scene_manager.end_scene.clone(), + prev_scene, + EndScene::new(new_background.clone(), timeout_ms), ); renderer .write() .unwrap() .set_background(prev_background) .unwrap(); - is_end_scene_active.store(true, std::sync::atomic::Ordering::SeqCst); + is_end_scene_active.store(false, std::sync::atomic::Ordering::SeqCst); } /*let vector_move = match *key_pressed_clone.read().unwrap() { Some(KeyCode::KeyW) => (0, 1),