refactor: entity packets now directly go into the target entity
This commit is contained in:
parent
12f4950ffb
commit
29829bbaa6
@ -80,11 +80,9 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
|
|||||||
|
|
||||||
public void OnClientPacketArrived(PaddleKeyStatePacket packet)
|
public void OnClientPacketArrived(PaddleKeyStatePacket packet)
|
||||||
{
|
{
|
||||||
if (packet.EntityId.CompareTo(Id) != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
isUpPressed = packet.IsUpPressed;
|
isUpPressed = packet.IsUpPressed;
|
||||||
isDownPressed = packet.IsDownPressed;
|
isDownPressed = packet.IsDownPressed;
|
||||||
|
|
||||||
if (!isUpPressed && !isDownPressed)
|
if (!isUpPressed && !isDownPressed)
|
||||||
Transform.Position.TweenVector2D(tweenManager, .05f, packet.Position, x => Transform.Position = x);
|
Transform.Position.TweenVector2D(tweenManager, .05f, packet.Position, x => Transform.Position = x);
|
||||||
else
|
else
|
||||||
|
@ -28,8 +28,8 @@ public class NetworkManager : UniverseObject, INetworkManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Dictionary<Type, List<object>> clientPacketListeners = [];
|
private readonly Dictionary<Type, Dictionary<string, object>> clientPacketListeners = [];
|
||||||
private readonly Dictionary<Type, List<object>> serverPacketListeners = [];
|
private readonly Dictionary<Type, Dictionary<string, object>> serverPacketListeners = [];
|
||||||
|
|
||||||
private readonly Dictionary<string, INetworkEntity> _networkEntities = [];
|
private readonly Dictionary<string, INetworkEntity> _networkEntities = [];
|
||||||
public IReadOnlyDictionary<string, INetworkEntity> NetworkEntities => _networkEntities;
|
public IReadOnlyDictionary<string, INetworkEntity> NetworkEntities => _networkEntities;
|
||||||
@ -95,20 +95,42 @@ public class NetworkManager : UniverseObject, INetworkManager
|
|||||||
{
|
{
|
||||||
Type packetType = typeof(T);
|
Type packetType = typeof(T);
|
||||||
|
|
||||||
|
if (entityDataPacket is IEntityNetworkPacket entityPacket)
|
||||||
|
{
|
||||||
|
if (networkCommunicator is INetworkCommunicatorClient)
|
||||||
|
if (clientPacketListeners.TryGetValue(packetType, out Dictionary<string, object>? clientListeners))
|
||||||
|
if (clientListeners.TryGetValue(entityPacket.EntityId, out object? clientListener))
|
||||||
|
{
|
||||||
|
MethodInfo clientListenerReceiveMethod = typeof(IPacketListenerClient<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerClient<T>.OnClientPacketArrived));
|
||||||
|
clientListenerReceiveMethod.Invoke(clientListener, [entityDataPacket]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (networkCommunicator is INetworkCommunicatorServer)
|
||||||
|
if (serverPacketListeners.TryGetValue(packetType, out Dictionary<string, object>? serverListeners))
|
||||||
|
if (serverListeners.TryGetValue(entityPacket.EntityId, out object? serverListener))
|
||||||
|
{
|
||||||
|
MethodInfo serverListenerReceiveMethod = typeof(IPacketListenerServer<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerServer<T>.OnServerPacketArrived));
|
||||||
|
serverListenerReceiveMethod.Invoke(serverListener, [entityDataPacket, fromClientId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (networkCommunicator is INetworkCommunicatorClient)
|
if (networkCommunicator is INetworkCommunicatorClient)
|
||||||
if (clientPacketListeners.TryGetValue(packetType, out List<object>? clientListeners))
|
if (clientPacketListeners.TryGetValue(packetType, out Dictionary<string, object>? clientListeners))
|
||||||
foreach (object clientListener in clientListeners)
|
{
|
||||||
{
|
MethodInfo clientListenerReceiveMethod = typeof(IPacketListenerClient<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerClient<T>.OnClientPacketArrived));
|
||||||
MethodInfo clientListenerReceiveMethod = typeof(IPacketListenerClient<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerClient<T>.OnClientPacketArrived));
|
foreach ((string id, object clientListener) in clientListeners)
|
||||||
clientListenerReceiveMethod.Invoke(clientListener, [entityDataPacket]);
|
clientListenerReceiveMethod.Invoke(clientListener, [entityDataPacket]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (networkCommunicator is INetworkCommunicatorServer)
|
if (networkCommunicator is INetworkCommunicatorServer)
|
||||||
if (serverPacketListeners.TryGetValue(packetType, out List<object>? serverListeners))
|
if (serverPacketListeners.TryGetValue(packetType, out Dictionary<string, object>? serverListeners))
|
||||||
foreach (object serverListener in serverListeners)
|
{
|
||||||
{
|
MethodInfo serverListenerReceiveMethod = typeof(IPacketListenerServer<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerServer<T>.OnServerPacketArrived));
|
||||||
MethodInfo serverListenerReceiveMethod = typeof(IPacketListenerServer<>).MakeGenericType(packetType).GetMethods().First(m => m.Name == nameof(IPacketListenerServer<T>.OnServerPacketArrived));
|
foreach ((string id, object serverListener) in serverListeners)
|
||||||
serverListenerReceiveMethod.Invoke(serverListener, [entityDataPacket, fromClientId]);
|
serverListenerReceiveMethod.Invoke(serverListener, [entityDataPacket, fromClientId]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCollected(IBehaviourCollector<INetworkEntity> sender, INetworkEntity behaviourCollected)
|
private void OnCollected(IBehaviourCollector<INetworkEntity> sender, INetworkEntity behaviourCollected)
|
||||||
@ -120,26 +142,26 @@ public class NetworkManager : UniverseObject, INetworkManager
|
|||||||
{
|
{
|
||||||
Type clientListenerParameterType = clientListenerType.GetGenericArguments().First();
|
Type clientListenerParameterType = clientListenerType.GetGenericArguments().First();
|
||||||
|
|
||||||
if (!clientPacketListeners.TryGetValue(clientListenerParameterType, out List<object>? clientListeners))
|
if (!clientPacketListeners.TryGetValue(clientListenerParameterType, out Dictionary<string, object>? clientListeners))
|
||||||
{
|
{
|
||||||
clientListeners = [];
|
clientListeners = [];
|
||||||
clientPacketListeners.Add(clientListenerParameterType, clientListeners);
|
clientPacketListeners.Add(clientListenerParameterType, clientListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
clientListeners.Add(behaviourCollected);
|
clientListeners.Add(behaviourCollected.Id, behaviourCollected);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Type serverListenerType in behaviourCollected.GetType().GetInterfaces().Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketListenerServer<>)))
|
foreach (Type serverListenerType in behaviourCollected.GetType().GetInterfaces().Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketListenerServer<>)))
|
||||||
{
|
{
|
||||||
Type serverListenerParameterType = serverListenerType.GetGenericArguments().First();
|
Type serverListenerParameterType = serverListenerType.GetGenericArguments().First();
|
||||||
|
|
||||||
if (!serverPacketListeners.TryGetValue(serverListenerParameterType, out List<object>? serverListeners))
|
if (!serverPacketListeners.TryGetValue(serverListenerParameterType, out Dictionary<string, object>? serverListeners))
|
||||||
{
|
{
|
||||||
serverListeners = [];
|
serverListeners = [];
|
||||||
serverPacketListeners.Add(serverListenerParameterType, serverListeners);
|
serverPacketListeners.Add(serverListenerParameterType, serverListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverListeners.Add(behaviourCollected);
|
serverListeners.Add(behaviourCollected.Id, behaviourCollected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user