allow backing out of lobbys

This commit is contained in:
bgkillas 2024-11-17 20:08:24 -05:00
parent bc37fe7ecf
commit ca4d5a5864
2 changed files with 21 additions and 16 deletions

View file

@ -1114,6 +1114,7 @@ impl App {
else { else {
panic!("Called in incorrect state"); panic!("Called in incorrect state");
}; };
let mut goto_menu = false;
let stopped = netman.stopped.load(Ordering::Relaxed); let stopped = netman.stopped.load(Ordering::Relaxed);
let accept_local = netman.accept_local.load(Ordering::Relaxed); let accept_local = netman.accept_local.load(Ordering::Relaxed);
let local_connected = netman.local_connected.load(Ordering::Relaxed); let local_connected = netman.local_connected.load(Ordering::Relaxed);
@ -1178,6 +1179,10 @@ impl App {
old_settings.seed = new_settings.seed; old_settings.seed = new_settings.seed;
netman.dirty.store(old_settings != new_settings, Ordering::Relaxed) netman.dirty.store(old_settings != new_settings, Ordering::Relaxed)
} }
ui.add_space(ui.available_width() - 56.0);
if ui.button("Back out").clicked() {
goto_menu = true
}
}); });
ui.separator(); ui.separator();
@ -1337,6 +1342,9 @@ impl App {
netman netman
.enable_recorder .enable_recorder
.store(self.app_saved_state.record_all, Ordering::Relaxed); .store(self.app_saved_state.record_all, Ordering::Relaxed);
if goto_menu {
self.state = AppState::ModManager;
}
} }
} }

View file

@ -5,19 +5,16 @@ use proxy_opt::ProxyOpt;
use socket2::{Domain, Socket, Type}; use socket2::{Domain, Socket, Type};
use std::fs::{create_dir, remove_dir_all, File}; use std::fs::{create_dir, remove_dir_all, File};
use std::path::PathBuf; use std::path::PathBuf;
use std::sync::atomic::{AtomicI32, Ordering};
use std::{ use std::{
env, env,
fmt::Display, fmt::Display,
io::{self, Write}, io::{self, Write},
net::{SocketAddr, TcpListener, TcpStream}, net::{SocketAddr, TcpListener, TcpStream},
sync::{
atomic::{self, AtomicBool},
Arc, Mutex,
},
thread::{self, JoinHandle}, thread::{self, JoinHandle},
time::{Duration, Instant}, time::{Duration, Instant},
}; };
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
use std::sync::{Arc, Mutex};
use world::{world_info::WorldInfo, NoitaWorldUpdate, WorldManager}; use world::{world_info::WorldInfo, NoitaWorldUpdate, WorldManager};
use tangled::Reliability; use tangled::Reliability;
@ -247,29 +244,29 @@ impl NetManager {
self.is_host(), self.is_host(),
); );
let mut timer = Instant::now(); let mut timer = Instant::now();
while self.continue_running.load(atomic::Ordering::Relaxed) { while self.continue_running.load(Ordering::Relaxed) {
if cli { if cli {
if let Some(n) = self.peer.lobby_id() { if let Some(n) = self.peer.lobby_id() {
println!("Lobby ID: {}", n.raw()); println!("Lobby ID: {}", n.raw());
cli = false cli = false
} }
} }
if self.friendly_fire.load(atomic::Ordering::Relaxed) && timer.elapsed().as_secs() > 4 { if self.friendly_fire.load(Ordering::Relaxed) && timer.elapsed().as_secs() > 4 {
let team = self.friendly_fire_team.load(atomic::Ordering::Relaxed); let team = self.friendly_fire_team.load(Ordering::Relaxed);
state.try_ws_write_option("friendly_fire_team", (team + 1) as u32); state.try_ws_write_option("friendly_fire_team", (team + 1) as u32);
timer = Instant::now() timer = Instant::now()
} }
if self.end_run.load(atomic::Ordering::Relaxed) { if self.end_run.load(Ordering::Relaxed) {
for id in self.peer.iter_peer_ids() { for id in self.peer.iter_peer_ids() {
self.send(id, &NetMsg::EndRun, Reliability::Reliable); self.send(id, &NetMsg::EndRun, Reliability::Reliable);
} }
state.try_ws_write(ws_encode_proxy("end_run", self.peer.my_id().to_string())); state.try_ws_write(ws_encode_proxy("end_run", self.peer.my_id().to_string()));
self.end_run(&mut state); self.end_run(&mut state);
self.end_run.store(false, atomic::Ordering::Relaxed); self.end_run.store(false, Ordering::Relaxed);
} }
self.local_connected self.local_connected
.store(state.ws.is_some(), atomic::Ordering::Relaxed); .store(state.ws.is_some(), Ordering::Relaxed);
if state.ws.is_none() && self.accept_local.load(atomic::Ordering::SeqCst) { if state.ws.is_none() && self.accept_local.load(Ordering::SeqCst) {
thread::sleep(Duration::from_millis(10)); thread::sleep(Duration::from_millis(10));
if let Ok((stream, addr)) = local_server.accept() { if let Ok((stream, addr)) = local_server.accept() {
info!("New stream incoming from {}", addr); info!("New stream incoming from {}", addr);
@ -279,7 +276,7 @@ impl NetManager {
.inspect_err(|e| error!("Could not init websocket: {}", e)) .inspect_err(|e| error!("Could not init websocket: {}", e))
.ok(); .ok();
if state.ws.is_some() { if state.ws.is_some() {
if self.enable_recorder.load(atomic::Ordering::Relaxed) { if self.enable_recorder.load(Ordering::Relaxed) {
state.recorder = Some(Recorder::default()); state.recorder = Some(Recorder::default());
} }
self.on_ws_connection(&mut state); self.on_ws_connection(&mut state);
@ -385,7 +382,7 @@ impl NetManager {
NetMsg::StartGame { settings } => { NetMsg::StartGame { settings } => {
*self.settings.lock().unwrap() = settings; *self.settings.lock().unwrap() = settings;
info!("Settings updated"); info!("Settings updated");
self.accept_local.store(true, atomic::Ordering::SeqCst); self.accept_local.store(true, Ordering::SeqCst);
state.world.reset(); state.world.reset();
} }
NetMsg::ModRaw { data } => { NetMsg::ModRaw { data } => {
@ -499,7 +496,7 @@ impl NetManager {
info!("No nickname chosen"); info!("No nickname chosen");
} }
let ff = settings.friendly_fire.unwrap_or(def.friendly_fire); let ff = settings.friendly_fire.unwrap_or(def.friendly_fire);
self.friendly_fire.store(ff, atomic::Ordering::Relaxed); self.friendly_fire.store(ff, Ordering::Relaxed);
state.try_ws_write_option("friendly_fire", ff); state.try_ws_write_option("friendly_fire", ff);
state.try_ws_write_option("debug", settings.debug_mode.unwrap_or(def.debug_mode)); state.try_ws_write_option("debug", settings.debug_mode.unwrap_or(def.debug_mode));
state.try_ws_write_option( state.try_ws_write_option(
@ -628,7 +625,7 @@ impl NetManager {
error!("Error in netmanager: {}", err); error!("Error in netmanager: {}", err);
*self.error.lock().unwrap() = Some(err); *self.error.lock().unwrap() = Some(err);
} }
self.stopped.store(true, atomic::Ordering::Relaxed); self.stopped.store(true, Ordering::Relaxed);
}) })
} }