@ -63,6 +63,17 @@ public class Network : Node
}
}
private void ChangeStatus ( NetworkStatus status )
{
if ( Status = = status ) return ;
Status = status ;
EmitSignal ( nameof ( StatusChanged ) , status ) ;
PlayerContainer . PauseMode = IsMultiplayerReady
? PauseModeEnum . Process : PauseModeEnum . Stop ;
}
public Error StartServer ( ushort port )
public Error StartServer ( ushort port )
{
{
if ( GetTree ( ) . NetworkPeer ! = null ) throw new InvalidOperationException ( ) ;
if ( GetTree ( ) . NetworkPeer ! = null ) throw new InvalidOperationException ( ) ;
@ -72,12 +83,10 @@ public class Network : Node
if ( error ! = Error . Ok ) return error ;
if ( error ! = Error . Ok ) return error ;
GetTree ( ) . NetworkPeer = peer ;
GetTree ( ) . NetworkPeer = peer ;
Status = NetworkStatus . ServerRunning ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
LocalPlayer . Instance . NetworkId = 1 ;
LocalPlayer . Instance . NetworkId = 1 ;
_ playersById . Add ( 1 , LocalPlayer . Instance ) ;
_ playersById . Add ( 1 , LocalPlayer . Instance ) ;
ChangeStatus ( NetworkStatus . ServerRunning ) ;
return Error . Ok ;
return Error . Ok ;
}
}
@ -88,10 +97,8 @@ public class Network : Node
( ( NetworkedMultiplayerENet ) GetTree ( ) . NetworkPeer ) . CloseConnection ( ) ;
( ( NetworkedMultiplayerENet ) GetTree ( ) . NetworkPeer ) . CloseConnection ( ) ;
GetTree ( ) . NetworkPeer = null ;
GetTree ( ) . NetworkPeer = null ;
Status = NetworkStatus . NoConnection ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
ClearPlayers ( ) ;
ClearPlayers ( ) ;
ChangeStatus ( NetworkStatus . NoConnection ) ;
}
}
public Error ConnectToServer ( string address , ushort port )
public Error ConnectToServer ( string address , ushort port )
@ -103,9 +110,7 @@ public class Network : Node
if ( error ! = Error . Ok ) return error ;
if ( error ! = Error . Ok ) return error ;
GetTree ( ) . NetworkPeer = peer ;
GetTree ( ) . NetworkPeer = peer ;
Status = NetworkStatus . Connecting ;
ChangeStatus ( NetworkStatus . Connecting ) ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
return Error . Ok ;
return Error . Ok ;
}
}
@ -116,17 +121,14 @@ public class Network : Node
( ( NetworkedMultiplayerENet ) GetTree ( ) . NetworkPeer ) . CloseConnection ( ) ;
( ( NetworkedMultiplayerENet ) GetTree ( ) . NetworkPeer ) . CloseConnection ( ) ;
GetTree ( ) . NetworkPeer = null ;
GetTree ( ) . NetworkPeer = null ;
Status = NetworkStatus . NoConnection ;
ChangeStatus ( NetworkStatus . NoConnection ) ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
ClearPlayers ( ) ;
ClearPlayers ( ) ;
}
}
private void OnClientConnected ( )
private void OnClientConnected ( )
{
{
Status = NetworkStatus . Authenticating ;
ChangeStatus ( NetworkStatus . Authenticating ) ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
var id = GetTree ( ) . GetNetworkUniqueId ( ) ;
var id = GetTree ( ) . GetNetworkUniqueId ( ) ;
LocalPlayer . Instance . NetworkId = id ;
LocalPlayer . Instance . NetworkId = id ;
@ -159,14 +161,12 @@ public class Network : Node
}
}
[Puppet]
[Puppet]
private Player SpawnLocalPlayer ( Vector2 position )
private void SpawnLocalPlayer ( Vector2 position )
{
{
Status = NetworkStatus . ConnectedToServer ;
EmitSignal ( nameof ( StatusChanged ) , Status ) ;
LocalPlayer . Instance . Position = position ;
LocalPlayer . Instance . Position = position ;
LocalPlayer . Instance . Velocity = Vector2 . Zero ;
LocalPlayer . Instance . Velocity = Vector2 . Zero ;
return LocalPlayer . Instance ;
ChangeStatus ( NetworkStatus . ConnectedToServer ) ;
}
}
private Player SpawnOtherPlayerInternal ( int id , Vector2 position , string displayName , Color color )
private Player SpawnOtherPlayerInternal ( int id , Vector2 position , string displayName , Color color )