diff --git a/src/emulator.rs b/src/emulator.rs index 4c9dfe9..5d4cf13 100644 --- a/src/emulator.rs +++ b/src/emulator.rs @@ -43,6 +43,13 @@ impl SimId { Self::Player2 => 1, } } + pub const fn from_index(index: usize) -> Option { + match index { + 0 => Some(Self::Player1), + 1 => Some(Self::Player2), + _ => None + } + } } impl Display for SimId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -230,8 +237,12 @@ impl Emulator { let index = sim_id.to_index(); while self.sims.len() <= index { + let new_index = self.sims.len(); self.sims.push(Sim::new()); - self.sim_state[index].store(SimState::NoGame, Ordering::Release); + if self.stdouts.contains_key(&SimId::from_index(new_index).unwrap()) { + self.sims[new_index].watch_stdout(true); + } + self.sim_state[new_index].store(SimState::NoGame, Ordering::Release); } let sim = &mut self.sims[index]; sim.reset(); @@ -476,7 +487,7 @@ impl Emulator { // stdout self.stdouts.retain(|sim_id, stdout| { let Some(sim) = self.sims.get_mut(sim_id.to_index()) else { - return false; + return true; }; if let Some(text) = sim.take_stdout() { if stdout.send(text).is_err() {