/* Refines each sample index in between the start slider sample index and the end slider sample index. Uses a Hermite curve to give * ease-in ease-out functionality. Slices the work into two halves, one from the start slider sample index to the last sample index, * and one from the last sample index to the end sample index. */ private void ApplyRefinement() { float percent; int startSliderSampleIndex = DMS.SFS_GetStartSliderSampleIndex(); // For caching int endSliderSampleIndex = DMS.SFS_GetEndSliderSampleIndex(); // For caching Vector3 diff = transform.position - samplePositions[lastSampleIndex]; // From range [start slider sample index, last sample index] for (int i = startSliderSampleIndex; i <= lastSampleIndex; i++) { percent = (i - startSliderSampleIndex) / ((float)lastSampleIndex - startSliderSampleIndex); float hermitePercent = Mathfx.Hermite(0.0f, 1.0f, percent); Vector3 offset = diff * hermitePercent; alternativeSamplePositions[i] = samplePositions[i]; samplePositions[i] = samplePositions[i] + offset; } diff = transform.position - samplePositions[lastSampleIndex + 1]; // From range (last sample index, end slider sample index], going backwards for (int i = endSliderSampleIndex; i >= lastSampleIndex + 1; i--) { percent = (endSliderSampleIndex - i) / (float)(endSliderSampleIndex - lastSampleIndex - 1); float hermitePercent = Mathfx.Hermite(0.0f, 1.0f, percent); Vector3 offset = diff * hermitePercent; alternativeSamplePositions[i] = samplePositions[i]; samplePositions[i] = samplePositions[i] + offset; } }