Skip to content
This repository was archived by the owner on Sep 15, 2024. It is now read-only.

Commit 2a7be81

Browse files
Huge optimization
1 parent 05c3edc commit 2a7be81

8 files changed

Lines changed: 51 additions & 88 deletions

File tree

Scripts/Netcode/Common/CPacketPlayerDirectionPressed.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,24 @@ namespace GodotModules.Netcode
44
{
55
public class CPacketPlayerDirectionPressed : APacketClient
66
{
7-
public Direction Direction { get; set; }
7+
public Direction DirectionHorizontal { get; set; }
8+
public Direction DirectionVertical { get; set; }
89

910
public override void Write(PacketWriter writer)
1011
{
11-
writer.Write((sbyte)Direction);
12+
writer.Write((sbyte)DirectionHorizontal);
13+
writer.Write((sbyte)DirectionVertical);
1214
}
1315

1416
public override void Read(PacketReader reader)
1517
{
16-
Direction = (Direction)reader.ReadSByte();
18+
DirectionHorizontal = (Direction)reader.ReadSByte();
19+
DirectionVertical = (Direction)reader.ReadSByte();
1720
}
1821

1922
public override void Handle(ENet.Peer peer)
2023
{
21-
GameServer.UpdatePressed(peer.ID, Direction, true);
24+
GameServer.UpdatePressed(peer.ID, DirectionHorizontal, DirectionVertical, true);
2225
}
2326
}
2427
}

Scripts/Netcode/Common/CPacketPlayerDirectionReleased.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public override void Read(PacketReader reader)
1818

1919
public override void Handle(ENet.Peer peer)
2020
{
21-
GameServer.UpdatePressed(peer.ID, Direction, false);
21+
//GameServer.UpdatePressed(peer.ID, Direction, false);
2222
}
2323
}
2424
}

Scripts/Netcode/Common/Data/DataPlayer.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ public class DataPlayer
77
public string Username { get; set; }
88
public bool Ready { get; set; }
99
public bool Host { get; set; }
10-
public bool PressedLeft { get; set; }
11-
public bool PressedRight { get; set;}
12-
public bool PressedDown { get; set; }
13-
public bool PressedUp { get; set; }
10+
public Direction DirectionHorizontal { get; set; }
11+
public Direction DirectionVertical { get; set; }
1412
public Vector2 Position { get; set; }
1513
}
1614
}

Scripts/Netcode/Common/SPacketPlayerPositions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override void Write(PacketWriter writer)
2121
var x = (float)Math.Round(pos.x, 1);
2222
var y = (float)Math.Round(pos.y, 1);
2323

24-
writer.Write(pair.Key);
24+
writer.Write(id);
2525
writer.Write(x);
2626
writer.Write(y);
2727
}

Scripts/Netcode/Common/_Opcodes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public enum DisconnectOpcode
4040

4141
public enum Direction
4242
{
43+
None,
4344
North,
4445
South,
4546
West,

Scripts/Netcode/Server/GameServer.cs

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,22 @@ public GameServer()
2525
TimerGameLoop.Elapsed += TimerGameLoopCallback;
2626
TimerGameLoop.AutoReset = true;
2727

28-
TimerNotifyClients = new Timer(100);
28+
TimerNotifyClients = new Timer(2000);
2929
TimerNotifyClients.Elapsed += TimerNotifyClientsCallback;
3030
TimerNotifyClients.AutoReset = true;
3131
}
3232

3333
public void TimerNotifyClientsCallback(System.Object source, ElapsedEventArgs args)
3434
{
3535
var playerPositions = Players.ToDictionary(x => x.Key, x => x.Value.Position);
36-
System.Console.WriteLine("DEBUG: " + playerPositions.Count);
3736

3837
SendToAllPlayers(ServerPacketOpcode.PlayerPositions, new SPacketPlayerPositions {
3938
PlayerPositions = playerPositions
4039
}, PacketFlags.Reliable);
4140

4241
LastSentPlayerPositions = playerPositions;
42+
43+
System.Console.WriteLine("SERVER: " + playerPositions[0]);
4344
}
4445

4546
public void TimerGameLoopCallback(System.Object source, ElapsedEventArgs args)
@@ -50,14 +51,14 @@ public void TimerGameLoopCallback(System.Object source, ElapsedEventArgs args)
5051

5152
var dir = new Vector2();
5253

53-
if (player.PressedLeft)
54-
dir.x = -1;
55-
if (player.PressedRight)
56-
dir.x = 1;
57-
if (player.PressedUp)
58-
dir.y = -1;
59-
if (player.PressedDown)
60-
dir.y = 1;
54+
if (player.DirectionHorizontal == Direction.West)
55+
dir.x -= 1;
56+
if (player.DirectionHorizontal == Direction.East)
57+
dir.x += 1;
58+
if (player.DirectionVertical == Direction.North)
59+
dir.y -= 1;
60+
if (player.DirectionVertical == Direction.South)
61+
dir.y += 1;
6162

6263
var delta = 0.016667f;
6364

@@ -136,24 +137,11 @@ public static void SendToOtherPlayers(uint id, ServerPacketOpcode opcode, APacke
136137
Send(opcode, data, flags, otherPlayers);
137138
}
138139

139-
public static void UpdatePressed(uint id, Direction dir, bool pressed)
140+
public static void UpdatePressed(uint id, Direction directionHorizontal, Direction directionVertical, bool pressed)
140141
{
141142
var player = Players[id];
142-
switch (dir)
143-
{
144-
case Direction.West:
145-
player.PressedLeft = pressed;
146-
break;
147-
case Direction.East:
148-
player.PressedRight = pressed;
149-
break;
150-
case Direction.North:
151-
player.PressedUp = pressed;
152-
break;
153-
case Direction.South:
154-
player.PressedDown = pressed;
155-
break;
156-
}
143+
player.DirectionHorizontal = directionHorizontal;
144+
player.DirectionVertical = directionVertical;
157145
}
158146

159147
public static void CheckPosition(uint id, Vector2 position)

Scripts/Scenes/Game/ClientPlayer.cs

Lines changed: 24 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ public class ClientPlayer : OtherPlayer
1515
private Label LabelPosition { get; set; }
1616

1717
private float Speed = 250f;
18-
private Timer TimerNotifyServerProcessDelta { get; set; }
18+
private Timer NotifyServerPlayerDirection { get; set; }
1919
private float Delta { get; set; }
20+
private Direction DirectionHorizontal { get; set; }
21+
private Direction DirectionVertical { get; set; }
2022

2123
public override void _Ready()
2224
{
@@ -26,26 +28,20 @@ public override void _Ready()
2628

2729
if (GameClient.Running)
2830
{
29-
//await NotifyServerOfProcessDelta();
30-
31-
if (GameClient.IsHost)
32-
{
33-
/*TimerNotifyServerProcessDelta = new Timer(3000);
34-
TimerNotifyServerProcessDelta.Elapsed += TimerNotifyServerProcessDeltaCallback;
35-
TimerNotifyServerProcessDelta.AutoReset = true;
36-
TimerNotifyServerProcessDelta.Enabled = true;*/
37-
}
31+
NotifyServerPlayerDirection = new Timer(500);
32+
NotifyServerPlayerDirection.Elapsed += NotifyServerPlayerDirectionCallback;
33+
NotifyServerPlayerDirection.AutoReset = true;
34+
NotifyServerPlayerDirection.Enabled = true;
3835
}
3936
}
4037

41-
public async void TimerNotifyServerProcessDeltaCallback(System.Object source, ElapsedEventArgs args) =>
42-
await NotifyServerOfProcessDelta();
43-
44-
private async Task NotifyServerOfProcessDelta() =>
45-
await GameClient.Send(ClientPacketOpcode.ProcessDelta, new CPacketProcessDelta
46-
{
47-
Delta = Delta
38+
public async void NotifyServerPlayerDirectionCallback(System.Object source, ElapsedEventArgs args)
39+
{
40+
await GameClient.Send(ClientPacketOpcode.PlayerDirectionPressed, new CPacketPlayerDirectionPressed {
41+
DirectionHorizontal = DirectionHorizontal,
42+
DirectionVertical = DirectionVertical
4843
});
44+
}
4945

5046
public override void _Process(float delta)
5147
{
@@ -54,7 +50,7 @@ public override void _Process(float delta)
5450
HandleMovement(delta);
5551
}
5652

57-
private async void HandleMovement(float delta)
53+
private void HandleMovement(float delta)
5854
{
5955
var dir = new Vector2();
6056

@@ -69,57 +65,33 @@ private async void HandleMovement(float delta)
6965

7066
Position += dir * Speed * delta;
7167

72-
await SendDirection();
68+
UpdateDirectionPressed();
7369
}
7470

75-
private async Task SendDirection()
71+
private void UpdateDirectionPressed()
7672
{
7773
if (!GameClient.Running)
7874
return;
7975

8076
// PRESSED
8177
if (Input.IsActionJustPressed("ui_left"))
82-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionPressed, new CPacketPlayerDirectionPressed
83-
{
84-
Direction = Direction.West
85-
});
78+
DirectionHorizontal = Direction.West;
8679
if (Input.IsActionJustPressed("ui_right"))
87-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionPressed, new CPacketPlayerDirectionPressed
88-
{
89-
Direction = Direction.East
90-
});
80+
DirectionHorizontal = Direction.East;
9181
if (Input.IsActionJustPressed("ui_up"))
92-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionPressed, new CPacketPlayerDirectionPressed
93-
{
94-
Direction = Direction.North
95-
});
82+
DirectionVertical = Direction.North;
9683
if (Input.IsActionJustPressed("ui_down"))
97-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionPressed, new CPacketPlayerDirectionPressed
98-
{
99-
Direction = Direction.South
100-
});
84+
DirectionVertical = Direction.South;
10185

10286
// RELEASED
10387
if (Input.IsActionJustReleased("ui_left"))
104-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionReleased, new CPacketPlayerDirectionReleased
105-
{
106-
Direction = Direction.West
107-
});
88+
DirectionHorizontal = Direction.None;
10889
if (Input.IsActionJustReleased("ui_right"))
109-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionReleased, new CPacketPlayerDirectionReleased
110-
{
111-
Direction = Direction.East
112-
});
90+
DirectionHorizontal = Direction.None;
11391
if (Input.IsActionJustReleased("ui_up"))
114-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionReleased, new CPacketPlayerDirectionReleased
115-
{
116-
Direction = Direction.North
117-
});
92+
DirectionVertical = Direction.None;
11893
if (Input.IsActionJustReleased("ui_down"))
119-
await GameClient.Send(ClientPacketOpcode.PlayerDirectionReleased, new CPacketPlayerDirectionReleased
120-
{
121-
Direction = Direction.South
122-
});
94+
DirectionVertical = Direction.None;
12395
}
12496

12597
public void SetHealth(int v)

Scripts/Scenes/Game/SceneGame.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public static void UpdatePlayerPositions(Dictionary<uint, Vector2> playerPositio
6262

6363
if (pair.Key == GameClient.PeerId)
6464
{
65+
GD.Print("CLIENT: " + player.Position);
6566
if (player.Position.DistanceSquaredTo(pair.Value) > 250)
6667
player.Position = pair.Value;
6768
}

0 commit comments

Comments
 (0)