@@ -354,104 +354,106 @@ fn player_select_panel(
354354 . map ( |s| * controls. get ( s) . unwrap ( ) )
355355 . unwrap_or_default ( ) ;
356356
357- if player_control. menu_confirm_just_pressed {
358- slot. confirmed = true ;
359-
360- #[ cfg( not( target_arch = "wasm32" ) ) ]
361- if let Some ( socket) = network_socket. as_ref ( ) {
362- socket. send_reliable (
363- SocketTarget :: All ,
364- & postcard:: to_allocvec ( & PlayerSelectMessage :: ConfirmSelection ( slot. confirmed ) )
365- . unwrap ( ) ,
366- ) ;
367- }
368- } else if player_control. menu_back_just_pressed {
369- if !is_network {
370- if slot. confirmed {
371- slot. confirmed = false ;
372- } else if slot. active {
373- slot. active = false ;
374- slot. control_source = None ;
375- }
376- } else {
377- slot. confirmed = false ;
378- }
379-
380- #[ cfg( not( target_arch = "wasm32" ) ) ]
381- if let Some ( socket) = network_socket. as_ref ( ) {
382- socket. send_reliable (
383- SocketTarget :: All ,
384- & postcard:: to_allocvec ( & PlayerSelectMessage :: ConfirmSelection ( slot. confirmed ) )
385- . unwrap ( ) ,
386- ) ;
387- }
388- } else if player_control. just_moved {
389- let direction = player_control. move_direction ;
390-
391- // Select a hat if the player has been confirmed
392- if slot. confirmed {
393- let current_hat_handle_idx = state
394- . hats
395- . iter ( )
396- . enumerate ( )
397- . find ( |( _, handle) | * * handle == slot. selected_hat )
398- . map ( |( i, _) | i)
399- . unwrap_or ( 0 ) ;
400-
401- let next_idx = if direction. x > 0.0 {
402- ( current_hat_handle_idx + 1 ) % state. hats . len ( )
403- } else {
404- let idx = current_hat_handle_idx as i32 - 1 ;
405- if idx == -1 {
406- state. hats . len ( ) - 1
407- } else {
408- idx as usize
409- }
410- } ;
411- slot. selected_hat = state. hats [ next_idx] ;
357+ if new_player_join. is_none ( ) {
358+ if player_control. menu_confirm_just_pressed {
359+ slot. confirmed = true ;
412360
413361 #[ cfg( not( target_arch = "wasm32" ) ) ]
414362 if let Some ( socket) = network_socket. as_ref ( ) {
415363 socket. send_reliable (
416364 SocketTarget :: All ,
417- & postcard:: to_allocvec ( & PlayerSelectMessage :: SelectHat (
418- slot. selected_hat . map ( |x| x. network_handle ( & asset_server) ) ,
419- ) )
420- . unwrap ( ) ,
365+ & postcard:: to_allocvec ( & PlayerSelectMessage :: ConfirmSelection ( slot. confirmed ) )
366+ . unwrap ( ) ,
421367 ) ;
422368 }
423-
424- // Select player skin if the player has not be confirmed
425- } else {
426- let current_player_handle_idx = state
427- . players
428- . iter ( )
429- . enumerate ( )
430- . find ( |( _, handle) | * handle == player_handle)
431- . map ( |( i, _) | i)
432- . unwrap_or ( 0 ) ;
433- let next_idx = if direction. x > 0.0 {
434- ( current_player_handle_idx + 1 ) % state. players . len ( )
435- } else {
436- let idx = current_player_handle_idx as i32 - 1 ;
437- if idx == -1 {
438- state. players . len ( ) - 1
439- } else {
440- idx as usize
369+ } else if player_control. menu_back_just_pressed {
370+ if !is_network {
371+ if slot. confirmed {
372+ slot. confirmed = false ;
373+ } else if slot. active {
374+ slot. active = false ;
375+ slot. control_source = None ;
441376 }
442- } ;
443- * player_handle = state. players [ next_idx] ;
377+ } else {
378+ slot. confirmed = false ;
379+ }
444380
445381 #[ cfg( not( target_arch = "wasm32" ) ) ]
446382 if let Some ( socket) = network_socket. as_ref ( ) {
447383 socket. send_reliable (
448384 SocketTarget :: All ,
449- & postcard:: to_allocvec ( & PlayerSelectMessage :: SelectPlayer (
450- player_handle. network_handle ( & asset_server) ,
451- ) )
452- . unwrap ( ) ,
385+ & postcard:: to_allocvec ( & PlayerSelectMessage :: ConfirmSelection ( slot. confirmed ) )
386+ . unwrap ( ) ,
453387 ) ;
454388 }
389+ } else if player_control. just_moved {
390+ let direction = player_control. move_direction ;
391+
392+ // Select a hat if the player has been confirmed
393+ if slot. confirmed {
394+ let current_hat_handle_idx = state
395+ . hats
396+ . iter ( )
397+ . enumerate ( )
398+ . find ( |( _, handle) | * * handle == slot. selected_hat )
399+ . map ( |( i, _) | i)
400+ . unwrap_or ( 0 ) ;
401+
402+ let next_idx = if direction. x > 0.0 {
403+ ( current_hat_handle_idx + 1 ) % state. hats . len ( )
404+ } else {
405+ let idx = current_hat_handle_idx as i32 - 1 ;
406+ if idx == -1 {
407+ state. hats . len ( ) - 1
408+ } else {
409+ idx as usize
410+ }
411+ } ;
412+ slot. selected_hat = state. hats [ next_idx] ;
413+
414+ #[ cfg( not( target_arch = "wasm32" ) ) ]
415+ if let Some ( socket) = network_socket. as_ref ( ) {
416+ socket. send_reliable (
417+ SocketTarget :: All ,
418+ & postcard:: to_allocvec ( & PlayerSelectMessage :: SelectHat (
419+ slot. selected_hat . map ( |x| x. network_handle ( & asset_server) ) ,
420+ ) )
421+ . unwrap ( ) ,
422+ ) ;
423+ }
424+
425+ // Select player skin if the player has not be confirmed
426+ } else {
427+ let current_player_handle_idx = state
428+ . players
429+ . iter ( )
430+ . enumerate ( )
431+ . find ( |( _, handle) | * handle == player_handle)
432+ . map ( |( i, _) | i)
433+ . unwrap_or ( 0 ) ;
434+ let next_idx = if direction. x > 0.0 {
435+ ( current_player_handle_idx + 1 ) % state. players . len ( )
436+ } else {
437+ let idx = current_player_handle_idx as i32 - 1 ;
438+ if idx == -1 {
439+ state. players . len ( ) - 1
440+ } else {
441+ idx as usize
442+ }
443+ } ;
444+ * player_handle = state. players [ next_idx] ;
445+
446+ #[ cfg( not( target_arch = "wasm32" ) ) ]
447+ if let Some ( socket) = network_socket. as_ref ( ) {
448+ socket. send_reliable (
449+ SocketTarget :: All ,
450+ & postcard:: to_allocvec ( & PlayerSelectMessage :: SelectPlayer (
451+ player_handle. network_handle ( & asset_server) ,
452+ ) )
453+ . unwrap ( ) ,
454+ ) ;
455+ }
456+ }
455457 }
456458 }
457459
@@ -507,15 +509,19 @@ fn player_select_panel(
507509 . as_ref ( )
508510 . map ( |handle| asset_server. get ( * handle) ) ;
509511
510- ui. label ( normal_font. rich ( localization. get ( "pick-a-fish" ) ) ) ;
512+ if !slot. confirmed {
513+ if slot. control_source . is_some ( ) {
514+ ui. label ( normal_font. rich ( localization. get ( "pick-a-fish" ) ) ) ;
515+ }
511516
512- if !slot. confirmed && network_local_player_slot. is_some_and ( |s| s == * slot_id) {
513- ui. label ( normal_font. rich ( localization. get_with (
514- "press-button-to-lock-in" ,
515- & fluent_args ! {
516- "button" => confirm_binding. as_str( )
517- } ,
518- ) ) ) ;
517+ if network_local_player_slot. is_some_and ( |s| s == * slot_id) || !is_network {
518+ ui. label ( normal_font. rich ( localization. get_with (
519+ "press-button-to-lock-in" ,
520+ & fluent_args ! {
521+ "button" => confirm_binding. as_str( )
522+ } ,
523+ ) ) ) ;
524+ }
519525
520526 if !is_network {
521527 ui. label ( normal_font. rich ( localization. get_with (
0 commit comments