@@ -31,7 +31,7 @@ use crate::server::utils::dvec3::DVec3;
3131use crate :: server:: world:: VIEW_DISTANCE ;
3232use crate :: utils:: hasher:: deterministic_hasher:: DeterministicHashMap ;
3333use crate :: utils:: seeded_rng:: SeededRng ;
34- use anyhow:: Result ;
34+ use anyhow:: { bail , Result } ;
3535use chrono:: Local ;
3636use include_dir:: include_dir;
3737use indoc:: formatdoc;
@@ -41,6 +41,7 @@ use std::env;
4141use std:: ops:: Add ;
4242use std:: time:: { Duration , SystemTime , UNIX_EPOCH } ;
4343use tokio:: sync:: mpsc:: unbounded_channel;
44+ use tokio:: sync:: mpsc:: error:: TryRecvError ;
4445
4546#[ tokio:: main]
4647async fn main ( ) -> Result < ( ) > {
@@ -130,7 +131,7 @@ async fn main() -> Result<()> {
130131 println ! ( "Rng Seed: {}" , rng_seed) ;
131132 SeededRng :: set_seed ( rng_seed) ;
132133
133- let dungeon = Dungeon :: from_string ( dungeon_str, & room_data_storage) ?;
134+ let dungeon = Dungeon :: from_str ( dungeon_str, & room_data_storage) ?;
134135 let mut server = Server :: initialize_with_dungeon ( network_tx, dungeon) ;
135136 server. world . server = & mut server;
136137 server. dungeon . server = & mut server;
@@ -145,7 +146,6 @@ async fn main() -> Result<()> {
145146 let dungeon = & server. dungeon ;
146147
147148 for room in & dungeon. rooms {
148- let room = room. borrow ( ) ;
149149 // println!("Room: {:?} type={:?} rotation={:?} shape={:?} corner={:?}", room.segments, room.room_data.room_type, room.rotation, room.room_data.shape, room.get_corner_pos());
150150 room. load_into_world ( & mut server. world ) ;
151151
@@ -166,7 +166,7 @@ async fn main() -> Result<()> {
166166
167167 // test
168168 pub struct MortImpl ;
169-
169+
170170 impl EntityImpl for MortImpl {
171171 fn tick ( & mut self , _: & mut Entity , _: & mut PacketBuffer ) {
172172 // rotate
@@ -178,7 +178,7 @@ async fn main() -> Result<()> {
178178 player. open_ui ( UI :: MortReadyUpMenu ) ;
179179 }
180180 }
181-
181+
182182 let id = server. world . spawn_entity (
183183 room. get_world_block_pos ( & BlockPos { x : 15 , y : 69 , z : 4 } )
184184 . as_dvec3 ( )
@@ -192,7 +192,7 @@ async fn main() -> Result<()> {
192192 }
193193
194194 for door in & dungeon. doors {
195- door. borrow ( ) . load_into_world ( & mut server. world , & door_type_blocks) ;
195+ door. load_into_world ( & mut server. world , & door_type_blocks) ;
196196 }
197197
198198 // let zombie_spawn_pos = DVec3 {
@@ -226,10 +226,14 @@ async fn main() -> Result<()> {
226226 tick_interval. tick ( ) . await ;
227227 // let start = std::time::Instant::now();
228228
229- while let Ok ( message) = main_rx. try_recv ( ) {
230- server. process_event ( message) . unwrap_or_else ( |err| eprintln ! ( "Error processing event: {err}" ) ) ;
229+ loop {
230+ match main_rx. try_recv ( ) {
231+ Ok ( message) => server. process_event ( message) . unwrap_or_else ( |err| eprintln ! ( "Error processing event: {err}" ) ) ,
232+ Err ( TryRecvError :: Empty ) => break ,
233+ Err ( TryRecvError :: Disconnected ) => bail ! ( "Network thread dropped its reciever." ) ,
234+ }
231235 }
232-
236+
233237 server. dungeon . tick ( ) ?;
234238 server. world . tick ( ) ?;
235239
@@ -356,8 +360,8 @@ async fn main() -> Result<()> {
356360 format ! ( "{} {}{}" , SKYBLOCK_MONTHS [ month] , day_of_month, suffix)
357361 } ;
358362
359- let room_id = if let Some ( room) = player . server_mut ( ) . dungeon . get_player_room ( player) {
360- & room . borrow ( ) . room_data . id
363+ let room_id = if let Some ( room) = server . dungeon . get_player_room ( player) {
364+ & server . dungeon . rooms [ room ] . room_data . id
361365 } else {
362366 ""
363367 } ;
0 commit comments