diff --git a/scene/EscapeMenu.tscn b/scene/EscapeMenu.tscn index 5bb4632..f661c84 100644 --- a/scene/EscapeMenu.tscn +++ b/scene/EscapeMenu.tscn @@ -7,7 +7,6 @@ [ext_resource path="res://src/EscapeMenuAppearance.cs" type="Script" id=5] [node name="EscapeMenu" type="Control"] -pause_mode = 2 anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 1 ) diff --git a/scene/GameScene.tscn b/scene/GameScene.tscn index 3ff8483..29264eb 100644 --- a/scene/GameScene.tscn +++ b/scene/GameScene.tscn @@ -13,6 +13,7 @@ [ext_resource path="res://src/Background.cs" type="Script" id=11] [node name="Game" type="Node"] +pause_mode = 2 script = ExtResource( 3 ) BlockScene = ExtResource( 6 ) @@ -38,6 +39,7 @@ __meta__ = { } [node name="Players" type="Node" parent="."] +pause_mode = 1 [node name="LocalPlayer" parent="Players" instance=ExtResource( 5 )] position = Vector2( 0, -2 ) @@ -45,7 +47,6 @@ position = Vector2( 0, -2 ) [node name="HUD" type="CanvasLayer" parent="."] [node name="Cursor" type="Node2D" parent="HUD"] -pause_mode = 2 z_index = 1 script = ExtResource( 2 ) diff --git a/src/EscapeMenu.cs b/src/EscapeMenu.cs index 4022631..e0470b2 100644 --- a/src/EscapeMenu.cs +++ b/src/EscapeMenu.cs @@ -26,8 +26,7 @@ public class EscapeMenu : Control public void Open() { if (Visible) return; - if (GetTree().NetworkPeer == null) - GetTree().Paused = true; + GetTree().Paused = true; Return.GrabFocus(); Visible = true; } @@ -35,8 +34,7 @@ public class EscapeMenu : Control public void Close() { if (!Visible) return; - if (GetTree().NetworkPeer == null) - GetTree().Paused = false; + GetTree().Paused = false; Visible = false; } diff --git a/src/EscapeMenuMultiplayer.cs b/src/EscapeMenuMultiplayer.cs index 853637a..2f07417 100644 --- a/src/EscapeMenuMultiplayer.cs +++ b/src/EscapeMenuMultiplayer.cs @@ -61,7 +61,6 @@ public class EscapeMenuMultiplayer : Container ClientAddress.Editable = noConnection; ClientDisConnect.Text = (status < NetworkStatus.Connecting) ? "Connect" : "Disconnect"; ClientDisConnect.Disabled = status == NetworkStatus.ServerRunning; - if (Visible) GetTree().Paused = noConnection; } diff --git a/src/LocalPlayer.cs b/src/LocalPlayer.cs index c680c7e..56d8636 100644 --- a/src/LocalPlayer.cs +++ b/src/LocalPlayer.cs @@ -50,10 +50,7 @@ public class LocalPlayer : Player } internal void ResetPositionInternal(Vector2 position) - { - Position = position; - Velocity = Vector2.Zero; - } + { Position = position; Velocity = Vector2.Zero; } [Puppet] internal void ResetPosition(Vector2 position) => ResetPositionInternal(position); diff --git a/src/Network.cs b/src/Network.cs index c909e66..88ec72d 100644 --- a/src/Network.cs +++ b/src/Network.cs @@ -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) { if (GetTree().NetworkPeer != null) throw new InvalidOperationException(); @@ -72,12 +83,10 @@ public class Network : Node if (error != Error.Ok) return error; GetTree().NetworkPeer = peer; - Status = NetworkStatus.ServerRunning; - EmitSignal(nameof(StatusChanged), Status); - LocalPlayer.Instance.NetworkId = 1; _playersById.Add(1, LocalPlayer.Instance); + ChangeStatus(NetworkStatus.ServerRunning); return Error.Ok; } @@ -88,10 +97,8 @@ public class Network : Node ((NetworkedMultiplayerENet)GetTree().NetworkPeer).CloseConnection(); GetTree().NetworkPeer = null; - Status = NetworkStatus.NoConnection; - EmitSignal(nameof(StatusChanged), Status); - ClearPlayers(); + ChangeStatus(NetworkStatus.NoConnection); } public Error ConnectToServer(string address, ushort port) @@ -103,9 +110,7 @@ public class Network : Node if (error != Error.Ok) return error; GetTree().NetworkPeer = peer; - Status = NetworkStatus.Connecting; - EmitSignal(nameof(StatusChanged), Status); - + ChangeStatus(NetworkStatus.Connecting); return Error.Ok; } @@ -116,17 +121,14 @@ public class Network : Node ((NetworkedMultiplayerENet)GetTree().NetworkPeer).CloseConnection(); GetTree().NetworkPeer = null; - Status = NetworkStatus.NoConnection; - EmitSignal(nameof(StatusChanged), Status); - + ChangeStatus(NetworkStatus.NoConnection); ClearPlayers(); } private void OnClientConnected() { - Status = NetworkStatus.Authenticating; - EmitSignal(nameof(StatusChanged), Status); + ChangeStatus(NetworkStatus.Authenticating); var id = GetTree().GetNetworkUniqueId(); LocalPlayer.Instance.NetworkId = id; @@ -159,14 +161,12 @@ public class Network : Node } [Puppet] - private Player SpawnLocalPlayer(Vector2 position) + private void SpawnLocalPlayer(Vector2 position) { - Status = NetworkStatus.ConnectedToServer; - EmitSignal(nameof(StatusChanged), Status); - LocalPlayer.Instance.Position = position; LocalPlayer.Instance.Velocity = Vector2.Zero; - return LocalPlayer.Instance; + + ChangeStatus(NetworkStatus.ConnectedToServer); } private Player SpawnOtherPlayerInternal(int id, Vector2 position, string displayName, Color color)