Set PauseMode, don't Pause conditionally

- By default, process everything when paused
- PlayerContainer.PauseMode is set
  to Stop when the game starts up
- When multiplayer is on, its
  PauseMode is set to Process
main
copygirl 5 years ago
parent 8c19cf919a
commit 8ee48adbd7
  1. 1
      scene/EscapeMenu.tscn
  2. 3
      scene/GameScene.tscn
  3. 2
      src/EscapeMenu.cs
  4. 1
      src/EscapeMenuMultiplayer.cs
  5. 5
      src/LocalPlayer.cs
  6. 38
      src/Network.cs

@ -7,7 +7,6 @@
[ext_resource path="res://src/EscapeMenuAppearance.cs" type="Script" id=5] [ext_resource path="res://src/EscapeMenuAppearance.cs" type="Script" id=5]
[node name="EscapeMenu" type="Control"] [node name="EscapeMenu" type="Control"]
pause_mode = 2
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
theme = ExtResource( 1 ) theme = ExtResource( 1 )

@ -13,6 +13,7 @@
[ext_resource path="res://src/Background.cs" type="Script" id=11] [ext_resource path="res://src/Background.cs" type="Script" id=11]
[node name="Game" type="Node"] [node name="Game" type="Node"]
pause_mode = 2
script = ExtResource( 3 ) script = ExtResource( 3 )
BlockScene = ExtResource( 6 ) BlockScene = ExtResource( 6 )
@ -38,6 +39,7 @@ __meta__ = {
} }
[node name="Players" type="Node" parent="."] [node name="Players" type="Node" parent="."]
pause_mode = 1
[node name="LocalPlayer" parent="Players" instance=ExtResource( 5 )] [node name="LocalPlayer" parent="Players" instance=ExtResource( 5 )]
position = Vector2( 0, -2 ) position = Vector2( 0, -2 )
@ -45,7 +47,6 @@ position = Vector2( 0, -2 )
[node name="HUD" type="CanvasLayer" parent="."] [node name="HUD" type="CanvasLayer" parent="."]
[node name="Cursor" type="Node2D" parent="HUD"] [node name="Cursor" type="Node2D" parent="HUD"]
pause_mode = 2
z_index = 1 z_index = 1
script = ExtResource( 2 ) script = ExtResource( 2 )

@ -26,7 +26,6 @@ public class EscapeMenu : Control
public void Open() public void Open()
{ {
if (Visible) return; if (Visible) return;
if (GetTree().NetworkPeer == null)
GetTree().Paused = true; GetTree().Paused = true;
Return.GrabFocus(); Return.GrabFocus();
Visible = true; Visible = true;
@ -35,7 +34,6 @@ public class EscapeMenu : Control
public void Close() public void Close()
{ {
if (!Visible) return; if (!Visible) return;
if (GetTree().NetworkPeer == null)
GetTree().Paused = false; GetTree().Paused = false;
Visible = false; Visible = false;
} }

@ -61,7 +61,6 @@ public class EscapeMenuMultiplayer : Container
ClientAddress.Editable = noConnection; ClientAddress.Editable = noConnection;
ClientDisConnect.Text = (status < NetworkStatus.Connecting) ? "Connect" : "Disconnect"; ClientDisConnect.Text = (status < NetworkStatus.Connecting) ? "Connect" : "Disconnect";
ClientDisConnect.Disabled = status == NetworkStatus.ServerRunning; ClientDisConnect.Disabled = status == NetworkStatus.ServerRunning;
if (Visible) GetTree().Paused = noConnection;
} }

@ -50,10 +50,7 @@ public class LocalPlayer : Player
} }
internal void ResetPositionInternal(Vector2 position) internal void ResetPositionInternal(Vector2 position)
{ { Position = position; Velocity = Vector2.Zero; }
Position = position;
Velocity = Vector2.Zero;
}
[Puppet] [Puppet]
internal void ResetPosition(Vector2 position) internal void ResetPosition(Vector2 position)
=> ResetPositionInternal(position); => ResetPositionInternal(position);

@ -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)

Loading…
Cancel
Save