示例#1
0
    void Update()
    {
        if (network.HasMessage)
        {
            byte[] data = network.GetMessage();
            if (data == null)
            {
                Debug.Log("Received NULL");
            }
            else
            {
                Debug.Log("Received with length: " + data.Length);

                // Receiving own ID
                if (data.Length == 3 && data[0] == 0 && data[1] == 5)
                {
                    byte ownID = data[2];
                    manager.OwnID = ownID;

                    SendOwnUDPPort(ownID);
                    Invoke("SendOwnUDPPortDelayed", 1);
                    Invoke("SendOwnUDPPortDelayed", 2);

                    //Invoke("WaitShort2", 3);

                    SendOwnUsername(ownID, IpAndPort.playername);

                    sendingEnabled = true;


                    manager.Initiated = true;
                }

                // Receiving map number
                if (data.Length == 3 && data[0] == 0 && data[1] == 9)
                {
                    byte mapNumber = data[2];

                    manager.SetMapNumber(mapNumber);
                }

                // Receiving playerlist
                if (data.Length >= 2 && data[0] == 0 && data[1] == 3)
                {
                    int counter = 2;
                    while (counter < data.Length)
                    {
                        byte   playerID   = data[counter];
                        int    nameLength = (data[counter + 1]);
                        string name       = System.Text.Encoding.Default.GetString(data, counter + 2, nameLength);

                        manager.SetPlayerName(playerID, name);

                        counter += nameLength + 2;
                    }
                }

                // Receiving other players car
                if (data.Length >= 2 && data[0] == 0 && data[1] == 7)
                {
                    byte   playerID   = data[2];
                    int    byteLength = (data[3] << 24) | (data[4] << 16) | (data[5] << 8) | (data[6]);
                    byte[] carBytes   = new byte[byteLength];
                    for (int i = 0; i < carBytes.Length; i++)
                    {
                        carBytes[i] = data[i + 7];
                    }
                    manager.SetPlayerCarBytes(playerID, carBytes);
                }

                // Player disconnected
                if (data.Length >= 2 && data[0] == 0 && data[1] == 22)
                {
                    byte playerID = data[2];

                    manager.RemovePlayer(playerID);
                }

                // Machinegun Button Press
                if (data.Length >= 2 && data[0] == 0 && data[1] == 25)
                {
                    byte playerID   = data[2];
                    byte buttonID   = data[3];
                    bool buttonDown = data[4] == 1 ? true : false;

                    manager.SetOtherShooting(playerID, buttonID, buttonDown);
                }

                // Damage Player
                if (data.Length >= 2 && data[0] == 0 && data[1] == 28)
                {
                    byte playerDoingDamageID     = data[2];
                    byte playerReceivingDamageID = data[3];

                    float damage = System.BitConverter.ToSingle(data, 4);

                    manager.DoDamageToPlayer(playerReceivingDamageID, damage);
                }

                // Bullet Impact Spawn
                if (data.Length >= 2 && data[0] == 0 && data[1] == 27)
                {
                    byte playerDoingDamageID = data[2];
                    byte weaponID            = data[3];

                    float xPos = System.BitConverter.ToSingle(data, 4);
                    float yPos = System.BitConverter.ToSingle(data, 8);
                    float zPos = System.BitConverter.ToSingle(data, 12);

                    //manager.SetOtherShooting(playerID, buttonID, buttonDown);
                }
            }
        }

        if (network.HasUdpMessage)
        {
            byte[] data = network.GetUdpMessage();
            if (data == null)
            {
                Debug.Log("Received NULL UDP");
            }
            else
            {
                //Debug.Log("Received UDP with length: " + data.Length);

                // Receiving positions
                if (data.Length >= 3 && data[0] == 0 && data[1] == 14)
                {
                    for (int i = 2; i < data.Length; i += 41)
                    {
                        byte playersID = data[i];

                        float xPos = System.BitConverter.ToSingle(data, i + 1);
                        float yPos = System.BitConverter.ToSingle(data, i + 5);
                        float zPos = System.BitConverter.ToSingle(data, i + 9);
                        float xRot = System.BitConverter.ToSingle(data, i + 13);
                        float yRot = System.BitConverter.ToSingle(data, i + 17);
                        float zRot = System.BitConverter.ToSingle(data, i + 21);
                        float wRot = System.BitConverter.ToSingle(data, i + 25);
                        float xVel = System.BitConverter.ToSingle(data, i + 29);
                        float yVel = System.BitConverter.ToSingle(data, i + 33);
                        float zVel = System.BitConverter.ToSingle(data, i + 37);

                        if (manager.otherPlayers != null && manager.otherPlayers[playersID] != null && manager.otherPlayers[playersID].GetComponent <OtherCar>().Model3DLoaded)
                        {
                            //manager.otherPlayers[playersID].transform.position = Vector3.Lerp(manager.otherPlayers[playersID].transform.position, new Vector3(xPos, yPos, zPos), manager.lerpRate);
                            manager.otherPlayers[playersID].transform.position = new Vector3(xPos, yPos, zPos);
                            //manager.possesToLerpTp[playersID] = new Vector4(xPos, yPos, zPos, Mathf.Sqrt(wRot));
                            //Debug.Log("Velocity: " + wRot);
                            manager.otherPlayers[playersID].transform.rotation = Quaternion.Euler(xRot, yRot, zRot);

                            manager.otherPlayers[playersID].GetComponent <OtherCar>().Velocity = new Vector3(xVel, yVel, zVel);

                            manager.PosInterpol.AddInformation(playersID, new Vector3(xPos, yPos, zPos), new Vector3(xRot, yRot, zRot), new Vector3(xVel, yVel, zVel));
                        }
                    }
                }
            }
        }
    }