Esempio n. 1
0
    void Update()
    {
        transform.localPosition = Vector3.SmoothDamp(transform.localPosition, targetLocalPosition, ref velocity, tracker.smoothing, 10, Time.deltaTime);

        Vector3 zOrigin = new Vector3(origin.position.x, 0, origin.position.z);

        relPos    = transform.position - zOrigin;
        groundPos = new Vector3(transform.position.x, 0, transform.position.z) - zOrigin;

        if (relPos != lastSendPos)
        {
            hasChangedSinceLastUpdate = true;
        }


        if (Time.time > lastSendUpdateTime + 1.0f / sendUpdateFPS)
        {
            float deltaUpdateTime = (Time.time - lastSendUpdateTime);
            float targetSpeed     = Vector3.Distance(relPos, lastRealUpdatePos) / deltaUpdateTime;
            if (speedSmooth == 0)
            {
                currentSpeed = targetSpeed;
            }
            else
            {
                currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref refSpeed, speedSmooth);
            }

            if (currentSpeed < idleSpeedThreshold)
            {
                idleTime += deltaUpdateTime;
            }
            else
            {
                idleTime = 0;
            }

            bool nowIsMoving = idleTime > 0;

            if (sendIdleTime)
            {
                DataFeedback.sendIdleTime(idleTime);
                if (isMoving != nowIsMoving)
                {
                    DataFeedback.sendIsMoving(nowIsMoving);
                }
            }

            isMoving = nowIsMoving;


            if (sendDistAndSpeed)
            {
                DataFeedback.sendDistance(jointName, groundPos.magnitude);
                DataFeedback.sendSpeed(jointName, currentSpeed);
            }

            lastRealUpdatePos  = new Vector3(relPos.x, relPos.y, relPos.z);
            lastSendUpdateTime = Time.time;
        }
    }