fixed: player joined opcode

This commit is contained in:
2022-10-21 22:19:21 +04:00
parent cbcf1773aa
commit b9e79af9d8
2 changed files with 20 additions and 22 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
"key": "defaultkey", "key": "defaultkey",
"protocol": "1.0.0", "protocol": "1.0.0",
"statisticsInterval": 5, "statisticsInterval": 5,
"sendRate": 30, "sendRate": 50,
"port": 4444, "port": 4444,
"skipTimeout": 60, "skipTimeout": 60,
"reconnectTimeout": 300, "reconnectTimeout": 300,
+18 -20
View File
@@ -71,7 +71,7 @@ namespace Ragon.Core
_players.Add(player.PeerId, player); _players.Add(player.PeerId, player);
_allPlayers = _players.Select(p => p.Key).ToArray(); _allPlayers = _players.Select(p => p.Key).ToArray();
SendInfo(player); AcceptPlayer(player);
} }
public void RemovePlayer(ushort peerId) public void RemovePlayer(ushort peerId)
@@ -83,7 +83,7 @@ namespace Ragon.Core
_plugin.OnPlayerLeaved(player); _plugin.OnPlayerLeaved(player);
SendLeaved(player); BroadcastLeaved(player);
if (_allPlayers.Length > 0 && player.PeerId == _owner) if (_allPlayers.Length > 0 && player.PeerId == _owner)
{ {
@@ -92,7 +92,7 @@ namespace Ragon.Core
_owner = nextOwnerId; _owner = nextOwnerId;
SendChangeOwner(player, nextOwner); BroadcastNewOwner(player, nextOwner);
} }
_entitiesAll = _entities.Values.ToArray(); _entitiesAll = _entities.Values.ToArray();
@@ -106,7 +106,7 @@ namespace Ragon.Core
case RagonOperation.LOAD_SCENE: case RagonOperation.LOAD_SCENE:
{ {
var sceneName = reader.ReadString(); var sceneName = reader.ReadString();
SendScene(sceneName); BroadcastNewScene(sceneName);
break; break;
} }
case RagonOperation.SCENE_LOADED: case RagonOperation.SCENE_LOADED:
@@ -147,12 +147,12 @@ namespace Ragon.Core
_plugin.OnPlayerJoined(joinedPlayer); _plugin.OnPlayerJoined(joinedPlayer);
_logger.Trace($"[{_owner}][{peer}] Player {joinedPlayer.Id} restored"); _logger.Trace($"[{_owner}][{peer}] Player {joinedPlayer.Id} restored");
SendJoined(player, peerId); BroadcastJoined(player);
} }
_readyPlayers = _players.Where(p => p.Value.IsLoaded).Select(p => p.Key).ToArray(); _readyPlayers = _players.Where(p => p.Value.IsLoaded).Select(p => p.Key).ToArray();
SendSnapshot(_awaitingPeers.ToArray()); BroadcastSnapshot(_awaitingPeers.ToArray());
_awaitingPeers.Clear(); _awaitingPeers.Clear();
} }
@@ -161,12 +161,12 @@ namespace Ragon.Core
_logger.Trace($"[{_owner}][{peerId}] Player {player.Id} restored instantly"); _logger.Trace($"[{_owner}][{peerId}] Player {player.Id} restored instantly");
player.IsLoaded = true; player.IsLoaded = true;
SendJoined(player, peerId); BroadcastJoined(player);
_readyPlayers = _players.Where(p => p.Value.IsLoaded).Select(p => p.Key).ToArray(); _readyPlayers = _players.Where(p => p.Value.IsLoaded).Select(p => p.Key).ToArray();
_plugin.OnPlayerJoined(player); _plugin.OnPlayerJoined(player);
SendSnapshot(new[] {peerId}); BroadcastSnapshot(new[] {peerId});
foreach (var (key, value) in _entities) foreach (var (key, value) in _entities)
value.RestoreBufferedEvents(peerId); value.RestoreBufferedEvents(peerId);
@@ -198,7 +198,6 @@ namespace Ragon.Core
break; break;
} }
} }
break; break;
} }
case RagonOperation.REPLICATE_ENTITY_EVENT: case RagonOperation.REPLICATE_ENTITY_EVENT:
@@ -282,7 +281,7 @@ namespace Ragon.Core
public void Tick(float deltaTime) public void Tick(float deltaTime)
{ {
_scheduler.Tick(deltaTime); _scheduler.Tick(deltaTime);
SendChanges(); BroadcastState();
} }
public void OnStart() public void OnStart()
@@ -311,7 +310,7 @@ namespace Ragon.Core
_entitiesAll = _entities.Values.ToArray(); _entitiesAll = _entities.Values.ToArray();
} }
void SendChangeOwner(Player prev, Player next) void BroadcastNewOwner(Player prev, Player next)
{ {
var entitiesToUpdate = prev.Entities.Where(e => e.StaticId > 0).ToArray(); var entitiesToUpdate = prev.Entities.Where(e => e.StaticId > 0).ToArray();
@@ -328,19 +327,18 @@ namespace Ragon.Core
BroadcastToReady(_writer, DeliveryType.Reliable); BroadcastToReady(_writer, DeliveryType.Reliable);
} }
void SendJoined(Player player, uint excludePeerId) void BroadcastJoined(Player player)
{ {
_writer.Clear(); _writer.Clear();
_writer.WriteOperation(RagonOperation.PLAYER_JOINED); _writer.WriteOperation(RagonOperation.PLAYER_JOINED);
_writer.WriteUShort((ushort) player.PeerId); _writer.WriteUShort(player.PeerId);
_writer.WriteString(player.Id); _writer.WriteString(player.Id);
_writer.WriteString(player.PlayerName); _writer.WriteString(player.PlayerName);
var readyPlayersWithExcludedPeer = _readyPlayers.Where(p => p != excludePeerId).ToArray(); BroadcastToReady(_writer, new [] { player.PeerId }, DeliveryType.Reliable);
BroadcastToReady(_writer, readyPlayersWithExcludedPeer, DeliveryType.Reliable);
} }
void SendLeaved(Player player) void BroadcastLeaved(Player player)
{ {
_writer.Clear(); _writer.Clear();
_writer.WriteOperation(RagonOperation.PLAYER_LEAVED); _writer.WriteOperation(RagonOperation.PLAYER_LEAVED);
@@ -357,7 +355,7 @@ namespace Ragon.Core
BroadcastToReady(_writer, DeliveryType.Reliable); BroadcastToReady(_writer, DeliveryType.Reliable);
} }
void SendSnapshot(ushort[] peersIds) void BroadcastSnapshot(ushort[] peersIds)
{ {
_writer.Clear(); _writer.Clear();
_writer.WriteOperation(RagonOperation.SNAPSHOT); _writer.WriteOperation(RagonOperation.SNAPSHOT);
@@ -406,7 +404,7 @@ namespace Ragon.Core
Broadcast(peersIds, sendData, DeliveryType.Reliable); Broadcast(peersIds, sendData, DeliveryType.Reliable);
} }
void SendChanges() void BroadcastState()
{ {
var entities = (ushort) _entitiesDirty.Count; var entities = (ushort) _entitiesDirty.Count;
if (entities > 0) if (entities > 0)
@@ -425,7 +423,7 @@ namespace Ragon.Core
} }
} }
void SendInfo(Player player) void AcceptPlayer(Player player)
{ {
_writer.Clear(); _writer.Clear();
_writer.WriteOperation(RagonOperation.JOIN_SUCCESS); _writer.WriteOperation(RagonOperation.JOIN_SUCCESS);
@@ -439,7 +437,7 @@ namespace Ragon.Core
Send(player.PeerId, _writer, DeliveryType.Reliable); Send(player.PeerId, _writer, DeliveryType.Reliable);
} }
void SendScene(string sceneName) void BroadcastNewScene(string sceneName)
{ {
_readyPlayers = Array.Empty<ushort>(); _readyPlayers = Array.Empty<ushort>();
_entitiesAll = Array.Empty<Entity>(); _entitiesAll = Array.Empty<Entity>();