fixed: player joined opcode
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
+19
-21
@@ -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>();
|
||||||
|
|||||||
Reference in New Issue
Block a user