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