示例#1
0
文件: DeathBall.cs 项目: McBuff/DMV
    // NETWORK CODE
    // -----
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            // send server position, velocity, and the lifetime at which this snapshot was taken
            stream.SendNext(rigidbody.position);
            stream.SendNext(Velocity);
            stream.SendNext(m_Lifetime);
        }
        else
        {
            // I've chosen to use entity interpolation for the deathball
            // http://www.gabrielgambetta.com/fpm3.html
            // it means that the ball will be shown with a 1 packet delay, but with this, I always have an endpos for my interpolation to turn to

            //  Queue should always be packed with 2
            networkData newPacket = new networkData();

            newPacket.P        = (Vector3)stream.ReceiveNext();
            newPacket.V        = (Vector3)stream.ReceiveNext();
            newPacket.Lifetime = (float)stream.ReceiveNext();
            newPacket.cT       = Time.time; // client time I received this package

            m_NetworkPackages.Add(newPacket);
            if (m_NetworkPackages.Count < 2)
            {
                // some initting for late joiners
                m_Lifetime = newPacket.Lifetime;// - 0.1f;
                //newPacket.Lifetime += .1f;
                // double package and teleport deathball to server's given position
                m_NetworkPackages.Add(newPacket);
                transform.position = newPacket.P;
            }
            //else if (m_NetworkPackages.Count >= 2)
            //{
            //    // rreducelifteime of first packet with delay
            //    float packageDelay = ((networkData)(m_NetworkPackages[1])).Lifetime - ((networkData)(m_NetworkPackages[0])).Lifetime;
            //    syncDelay = packageDelay;
            //}


            // if MY LOCAL LIFETIME m_Lifetime is not yet at the SECOND PACKAGE'S lifetime, I do NOT remove the FIRST PACKAGE

            if (m_NetworkPackages.Count >= 2)
            {
                float nextPackageLifetime = ((networkData)m_NetworkPackages[1]).Lifetime;

                // remove first package, local lifetime has passed beyond first-second package range
                if (m_Lifetime > nextPackageLifetime)
                {
                    m_NetworkPackages.RemoveAt(0);
                }
            }
        }
    }
示例#2
0
文件: DeathBall.cs 项目: McBuff/DMV
    void ChangeBallTrajectory(Vector3 startpos, Vector3 newDirection, float newSpeed, float EventTime)
    {
        // received dir, speed and time, add fake package in packet stream

        Speed    = newSpeed;
        Velocity = newDirection;


        networkData fakePackage = new networkData();

        fakePackage.P        = startpos;
        fakePackage.V        = newDirection;
        fakePackage.Lifetime = EventTime;

        //InsertPackage(fakePackage);
    }
示例#3
0
文件: DeathBall.cs 项目: McBuff/DMV
    private void InsertPackage(networkData newPackage)
    {
        int   insertPosition   = 0;
        float previousLifetime = 0;

        // insert package into stream at correct position
        for (int i = 0; i < m_NetworkPackages.Count; i++)
        {
            networkData listedPacket = (networkData)m_NetworkPackages[i];

            if (previousLifetime < newPackage.Lifetime && newPackage.Lifetime < listedPacket.Lifetime)
            {
                insertPosition = i;
            }

            previousLifetime = listedPacket.Lifetime;
        }

        m_NetworkPackages.Insert(insertPosition, newPackage);
    }
示例#4
0
文件: Player.cs 项目: TamaHobbit/DMV
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        // send position to clients & server?
        if (stream.isWriting)
        {
            // send server position, direction, and the lifetime at which this snapshot was taken
            stream.SendNext(transform.position);
            stream.SendNext(Direction);
            stream.SendNext(transform.rotation.eulerAngles.y); // send Y rotation
            stream.SendNext(m_Lifetime);
        }
        else
        {
            // receive and store data for prediction
            networkData newPacket = new networkData();

            newPacket.P = (Vector3)stream.ReceiveNext();
            newPacket.V = (Vector3)stream.ReceiveNext();
            newPacket.Rotation = (float)stream.ReceiveNext();
            newPacket.Lifetime = (float)stream.ReceiveNext();
            newPacket.cT = Time.time; // client time I received this package

            if (m_NetworkPackagesList == null)
                m_NetworkPackagesList = new ArrayList();

            m_NetworkPackagesList.Add(newPacket);

            // wiat for 2 first packages
            if (m_NetworkPackagesList.Count < 2)
            {
                // some initting for late joiners
                m_Lifetime = newPacket.Lifetime;// - 0.1f;
                //newPacket.Lifetime += .1f;
                // double package and teleport deathball to server's given position
                m_NetworkPackagesList.Add(newPacket);
                transform.position = newPacket.P;
            }

            // remove packages that are no longer needed
            if (m_NetworkPackagesList.Count >= 2)
            {
                float nextPackageLifetime = ((networkData)m_NetworkPackagesList[1]).Lifetime;

                // remove first package, local lifetime has passed beyond first-second package range
                if (m_Lifetime > nextPackageLifetime)
                {
                    m_NetworkPackagesList.RemoveAt(0);
                }
            }

        }

    }
示例#5
0
    private void InsertPackage(networkData newPackage) {

        int insertPosition = 0;
        float previousLifetime = 0 ;

        // insert package into stream at correct position
        for (int i = 0; i < m_NetworkPackages.Count; i++)
        {
            networkData listedPacket = (networkData)m_NetworkPackages[i];
            
            if( previousLifetime < newPackage.Lifetime && newPackage.Lifetime < listedPacket.Lifetime)
            {
                insertPosition = i;
            }

            previousLifetime = listedPacket.Lifetime;           

        }

        m_NetworkPackages.Insert(insertPosition, newPackage);


    }
示例#6
0
    void ChangeBallTrajectory(Vector3 startpos,  Vector3 newDirection, float newSpeed , float EventTime)
    {
        // received dir, speed and time, add fake package in packet stream

        Speed = newSpeed;
        Velocity = newDirection;
        

        networkData fakePackage = new networkData();
        fakePackage.P = startpos;
        fakePackage.V = newDirection;
        fakePackage.Lifetime = EventTime;

        //InsertPackage(fakePackage);

    }
示例#7
0
    // NETWORK CODE
    // -----
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            // send server position, velocity, and the lifetime at which this snapshot was taken
            stream.SendNext(rigidbody.position);
            stream.SendNext(Velocity);
            stream.SendNext(m_Lifetime);
        }
        else
        {
            // I've chosen to use entity interpolation for the deathball
            // http://www.gabrielgambetta.com/fpm3.html
            // it means that the ball will be shown with a 1 packet delay, but with this, I always have an endpos for my interpolation to turn to

            //  Queue should always be packed with 2
            networkData newPacket = new networkData();

            newPacket.P = (Vector3)stream.ReceiveNext();
            newPacket.V = (Vector3)stream.ReceiveNext();
            newPacket.Lifetime = (float)stream.ReceiveNext();
            newPacket.cT = Time.time; // client time I received this package

            m_NetworkPackages.Add(newPacket);
            if (m_NetworkPackages.Count < 2)
            {
                // some initting for late joiners
                m_Lifetime = newPacket.Lifetime;// - 0.1f;
                //newPacket.Lifetime += .1f;
                // double package and teleport deathball to server's given position
                m_NetworkPackages.Add(newPacket);
                transform.position = newPacket.P;               
            }
            //else if (m_NetworkPackages.Count >= 2)
            //{
            //    // rreducelifteime of first packet with delay
            //    float packageDelay = ((networkData)(m_NetworkPackages[1])).Lifetime - ((networkData)(m_NetworkPackages[0])).Lifetime;
            //    syncDelay = packageDelay;
            //}


            // if MY LOCAL LIFETIME m_Lifetime is not yet at the SECOND PACKAGE'S lifetime, I do NOT remove the FIRST PACKAGE

            if (m_NetworkPackages.Count >= 2)
            {
                float nextPackageLifetime = ((networkData)m_NetworkPackages[1]).Lifetime;

                // remove first package, local lifetime has passed beyond first-second package range
                if (m_Lifetime > nextPackageLifetime)
                {
                    m_NetworkPackages.RemoveAt(0);
                }
            }

        }

    }