Exemple #1
0
    void OnReceivePacket(ushort type, Stream stream)
    {
        switch (type)
        {
        case (ushort)UserPacketType.Message:
            MessagePacket messagePacket = new MessagePacket();
            messagePacket.Deserialize(stream);

            if (ConnectionManager.Instance.isServer)
            {
                MessageManager.Instance.SendString(messagePacket.payload, 0);
            }

            messages.text += messagePacket.payload + System.Environment.NewLine;
            break;

        case (ushort)UserPacketType.Position:
            PositionPacket positionPacket = new PositionPacket();
            positionPacket.Deserialize(stream);

            if (ConnectionManager.Instance.isServer)
            {
                MessageManager.Instance.SendPosition(positionPacket.payload, 0);
            }

            // Aca enviaria el payload a donde sea necesario
            break;
        }
    }
    protected override void OnReceiveDataEvent(uint packetID, ushort packetTypeID, Stream stream)
    {
        //Debug.Log("Applying velocity received to " + gameObject.name);

        switch (packetTypeID)
        {
        case (ushort)UserPacketType.Velocity:

            VelocityPacket velocityPacket = new VelocityPacket();
            velocityPacket.Deserialize(stream);

            //Debug.Log("Applying velocity received to " + gameObject.name);
            Vector3 velocityReceived = new Vector3(
                velocityPacket.payload.velocity.x,
                velocityPacket.payload.velocity.y,
                velocityPacket.payload.velocity.z
                );
            //rb.position += velocityReceived;

            transform.Translate(velocityReceived, Space.Self);

            if (NetworkManager.Instance.isServer)
            {
                NetworkMessageManager.Instance.SendPosition(transform.position, (uint)objectID);
            }

            break;

        case (ushort)UserPacketType.Position:
            PositionPacket positionPacket = new PositionPacket();
            positionPacket.Deserialize(stream);

            Vector3 position = new Vector3(
                positionPacket.payload.position.x,
                positionPacket.payload.position.y,
                positionPacket.payload.position.z
                );
            //rb.position = position;
            transform.position = position;

            break;

        case (ushort)UserPacketType.Shoot:
            Shoot();
            break;

        case (ushort)UserPacketType.Damage:
            DamagePacket damagePacket = new DamagePacket();
            damagePacket.Deserialize(stream);

            TakeDamage((int)damagePacket.payload.damage);
            break;

        case (ushort)UserPacketType.ShipDestroyed:
            Instantiate(explosionEffect, transform.position, Quaternion.identity);
            Destroy(gameObject);
            break;
        }
    }
Exemple #3
0
 private void ProcessPositionPacket(uint senderId, Stream stream)
 {
     if (!NetworkManager.Instance.isServer)
     {
         PositionPacket packet = new PositionPacket();
         packet.Deserialize(stream);
         transform.position = new Vector3(packet.payload.position.x, packet.payload.position.y, packet.payload.position.z);
     }
 }
    protected override void OnReceiveDataEvent(uint packetID, ushort packetTypeID, Stream stream)
    {
        switch (packetTypeID)
        {
        case (ushort)UserPacketType.Velocity:

            VelocityPacket velocityPacket = new VelocityPacket();
            velocityPacket.Deserialize(stream);

            //Debug.Log("Applying velocity received to " + gameObject.name);
            Vector3 velocityReceived = new Vector3(
                velocityPacket.payload.velocity.x,
                velocityPacket.payload.velocity.y,
                velocityPacket.payload.velocity.z
                );
            //rb.position += velocityReceived;

            transform.Translate(velocityReceived, Space.Self);

            if (NetworkManager.Instance.isServer)
            {
                NetworkMessageManager.Instance.SendPosition(transform.position, (uint)objectID, velocityPacket.payload.sequence);
            }

            break;

        case (ushort)UserPacketType.Position:
            PositionPacket positionPacket = new PositionPacket();
            positionPacket.Deserialize(stream);

            Vector3 position = new Vector3(
                positionPacket.payload.position.x,
                positionPacket.payload.position.y,
                positionPacket.payload.position.z
                );
            //rb.position = position;
            //Debug.Log("Position before reconciliation: " + position);


            if (positionPacket.payload.sequence > lastSequenceServerReceived)
            {
                lastSequenceServerReceived = positionPacket.payload.sequence;

                Vector3 reconciliationPosition = Vector3.zero;
                for (uint currentInputKey = positionPacket.payload.sequence; currentInputKey < sequence; currentInputKey++)
                {
                    if (inputs.ContainsKey(currentInputKey))
                    {
                        //Debug.Log("Removing input with ID " + currentInputKey);
                        reconciliationPosition += inputs[currentInputKey];
                        inputs.Remove(positionPacket.payload.sequence);
                    }
                }
                transform.position = position;
            }
            break;

        case (ushort)UserPacketType.Shoot:
            Shoot();
            break;

        case (ushort)UserPacketType.Damage:
            DamagePacket damagePacket = new DamagePacket();
            damagePacket.Deserialize(stream);

            TakeDamage((int)damagePacket.payload.damage);

            break;

        case (ushort)UserPacketType.ShipDestroyed:

            if (NetworkManager.Instance.isServer)
            {
                NetworkMessageManager.Instance.SendShipdestroyedPacket((uint)objectID);
            }

            Instantiate(explosionEffect, transform.position, Quaternion.identity);
            Destroy(gameObject);
            break;
        }
    }