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]
[node name="EscapeMenu" type="Control"]
pause_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
theme = ExtResource( 1 )

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

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

@ -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;
}

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

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

Loading…
Cancel
Save