Esempio n. 1
0
    /* Takes in a finger trigger position and sliders the closest slider in one dimension relative to the finger
     * slider position (if the new slider position will be on the slider field). If the slider is the start slider
     * or the end slider then they will snap to the floored or ceiled sample respectively. Else if the slider is
     * the current slider, it will adjust the position with a smooth transition using t. */
    private void SlideClosestSlider(Vector3 fingerTriggerPosition)
    {
        Vector3 worldCenter = transform.TransformPoint(localCenter);
        // Project point into two dimensions on slider field
        Vector3 v = fingerTriggerPosition - worldCenter;
        Vector3 d = Vector3.Project(v, transform.up);
        Vector3 pointInTwoDimensions = fingerTriggerPosition - d;
        // Project point into one dimension on slider field
        Vector3 v2 = pointInTwoDimensions - worldCenter;
        Vector3 d2 = Vector3.Project(v2, transform.forward);
        Vector3 pointInOneDimension = pointInTwoDimensions - d2;

        float testDistance = Vector3.Distance(pointInOneDimension, worldCenter);

        if (testDistance < worldHalfLength)
        {
            if (Vector3.Distance(pointInOneDimension, transform.TransformPoint(V3E.SetX(localCenter, -localHalfLength))) <
                Vector3.Distance(pointInOneDimension, transform.TransformPoint(V3E.SetX(localCenter, localHalfLength))))
            {
                testDistance *= -1;   // Closer to left side, so make negative since Vector3.Distance() is only magnitude
            }
            float sliderPercent = (testDistance - worldHalfLength) / (worldHalfLength * -2);

            if (closestSlider == startSlider)
            {
                // Find the floored sample index and adjust the start slider
                int flooredSampleIndex = (int)Mathf.Floor(sliderPercent * (dummySampleCount - 1));
                AdjustSlider("StartSlider", flooredSampleIndex, 0.0f);
                DMS.AdjustStartAids(flooredSampleIndex);
            }
            else if (closestSlider == currentSlider)
            {
                // Find the floored sample index, find the t, adjust the current slider, then adjust slider indicator and dummy
                int flooredSampleIndex = (int)Mathf.Floor(sliderPercent * (dummySampleCount - 1));
                if (flooredSampleIndex >= startSliderSampleIndex && flooredSampleIndex <= endSliderSampleIndex)
                {
                    float flooredSamplePercent = (float)flooredSampleIndex / ((float)dummySampleCount - 1.0f);
                    float t = (sliderPercent - flooredSamplePercent) / (1.0f / ((float)dummySampleCount - 1.0f));
                    AdjustSlider("CurrentSlider", flooredSampleIndex, t);
                    DMS.DS_Adjust(flooredSampleIndex, t);
                }
            }
            else        // end slider
            // Find the ceiled sample index and adjust end slider
            {
                int ceiledSampleIndex = (int)Mathf.Ceil(sliderPercent * (dummySampleCount - 1));
                AdjustSlider("EndSlider", ceiledSampleIndex, 0.0f);
                DMS.AdjustEndAids(ceiledSampleIndex);
            }
        }
    }
Esempio n. 2
0
    /* Called once when the dummy is first grabbed. Depending on the state of the left glove (overwite or refine), will call the appropriate
     * functions. */
    public void GrabBegin()
    {
        if (!isPaused)      // If it was playing when grabbed, stop playing and force the play band to pause
        {
            StopPlaying();
            DMS.PBS_ForceIntoPauseToggleState();
        }
        DMS.UB_ForceIntoUndoToggleState();

        if (DMS.LGS_IsInOverwriteState())
        {
            DMS.SFS_AdjustSlider("StartSlider", lastSampleIndex, 0f);     // force the start slider to align
            DMS.AdjustStartAids(lastSampleIndex);
            lastT = 0f;
            StartCoroutine(OverwriteNextSample());
        }
        else      // Refining
        {
            DMS.RGS_StartGuiding(transform.position);
        }
    }