OptitrackRigidBody.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
    void Update()
    {
        //If we have received a packet from Motive then look for the rigid body ID index
        if(foundIndex == false)
        {
            if(OptitrackRigidBodyManager.instance.receivedFirstRigidBodyPacket)
            {
                if(foundIndex == false)
                {
                    for(int i = 0; i < OptitrackRigidBodyManager.instance.rigidBodyIDs.Length; i++)
                    {
                        //Looking for ID in array of rigid body IDs
                        if(OptitrackRigidBodyManager.instance.rigidBodyIDs[i] == ID)
                        {
                            index = i; //Found ID
                        }
                    }
                    foundIndex = true;
                }
            }
        }
        else
        {
            if (usePostionTracking)
            {
                if (originOverride != null)
                {
                    if( gameObject.GetComponent<Rigidbody>() )
                        gameObject.GetComponent<Rigidbody>().MovePosition( (OptitrackRigidBodyManager.instance.rigidBodyPositions[index] - OptitrackRigidBodyManager.instance.origin.position) + originOverride.transform.position );
                    else
                        transform.position = (OptitrackRigidBodyManager.instance.rigidBodyPositions[index] - OptitrackRigidBodyManager.instance.origin.position) + originOverride.transform.position;
                }
                else if( gameObject.GetComponent<Rigidbody>() )
                {
                    gameObject.GetComponent<Rigidbody>().MovePosition( OptitrackRigidBodyManager.instance.rigidBodyPositions[index] );
                }
                else
                {
                    Vector3 newPos = OptitrackRigidBodyManager.instance.rigidBodyPositions[index];
                    if( predictLostData )
                    {
                        if( Vector3.SqrMagnitude(lastPosition - newPos) < 9.99999944E-11f )//lost data
                        {
                            Vector3 velocity = pastPositions[pastPositions.Count - 1] - pastPositions[pastPositions.Count - 2];
                            newPos = pastPositions[pastPositions.Count - 1] + velocity;
                        }

                        lastPosition = OptitrackRigidBodyManager.instance.rigidBodyPositions[index];

                        pastPositions.RemoveAt(0);

                        pastPositions.Add(newPos);
                    }
                    transform.position = newPos;//OptitrackRigidBodyManager.instance.rigidBodyPositions[index];
                }
            }

            if (useRotationTracking)
            {
                if (originOverride != null)
                {
                    //Subtract the origin rotation used by OptitrackRigidBodyManager
                    transform.rotation = Quaternion.Inverse(OptitrackRigidBodyManager.instance.origin.rotation) * OptitrackRigidBodyManager.instance.rigidBodyQuaternions[index];
                    //Add the originOverride rotation applied to this rigid body
                    transform.rotation = originOverride.transform.rotation * transform.rotation;
                }
        //				else if( gameObject.GetComponent<Rigidbody>() )
        //				{
        //					gameObject.GetComponent<Rigidbody>().MoveRotation( OptitrackRigidBodyManager.instance.rigidBodyQuaternions[index] );
        //				}
                else
                {
                    Quaternion newRot = OptitrackRigidBodyManager.instance.rigidBodyQuaternions[index];
        //					float angle = Quaternion.Angle( transform.rotation, newRot );
        //					if( angle <= 120 )
                        transform.rotation = newRot;
                }
            }
        }
    }