@@ -15,16 +15,16 @@ public class UILobbyPlayerListing : Control
1515 public string Username { get ; private set ; }
1616 public bool Ready { get ; private set ; }
1717 public bool Host { get ; private set ; }
18- public uint Id { get ; set ; }
18+ public uint Id { get ; private set ; }
1919
2020 public override void _Ready ( )
2121 {
2222 PlayerName = GetNode < Label > ( NodePathName ) ;
2323 Status = GetNode < Label > ( NodePathStatus ) ;
2424 Kick = GetNode < Button > ( NodePathKick ) ;
2525
26- // Only host may kick others and host cannot kick self
27- if ( ! NetworkManager . IsHost || NetworkManager . PeerId == Id )
26+ // Only host may kick others
27+ if ( ! NetworkManager . IsHost )
2828 Kick . Visible = false ;
2929 }
3030
@@ -45,10 +45,24 @@ public void SetHost(bool value)
4545 Host = value ;
4646 }
4747
48- private void _on_Kick_pressed ( )
48+ public void SetId ( uint value )
4949 {
50- // TODO: Kick Id
51- Logger . LogTODO ( "Kick ID: " + Id ) ;
50+ Id = value ;
51+
52+ // host cannot kick self
53+ if ( NetworkManager . PeerId == Id )
54+ Kick . Visible = false ;
55+ }
56+
57+ private async void _on_Kick_pressed ( )
58+ {
59+ SceneManager . GetActiveSceneScript < SceneLobby > ( ) . RemovePlayer ( Id ) ;
60+ NetworkManager . GameServer . Players . Remove ( ( byte ) Id ) ;
61+
62+ await NetworkManager . GameClient . Send ( ClientPacketOpcode . Lobby , new CPacketLobby {
63+ LobbyOpcode = LobbyOpcode . LobbyKick ,
64+ Id = ( byte ) Id
65+ } ) ;
5266 }
5367 }
5468}
0 commit comments