private void HandleMovement() { _lerpPosSpeed = Mathf.Lerp(_line.KochTrailProperty.TrailSpeedMinMax.x, _line.KochTrailProperty.TrailSpeedMinMax.y, _audioPeer.GetAmplitude()); foreach (TrailObject trail in _trails) { _distanceSnap = Vector3.Distance(trail.Go.transform.localPosition, trail.TargetPosition); if (_distanceSnap < 0.05f) { trail.Go.transform.localPosition = trail.TargetPosition; if (_line.KochLineProperty.UseBezierCurves && _generationCount > 0) { if (trail.CurrentTargetNum < _bezierPositions.Length - 1) { trail.CurrentTargetNum++; } else { trail.CurrentTargetNum = 1; } trail.TargetPosition = _bezierPositions[trail.CurrentTargetNum]; } else { if (trail.CurrentTargetNum < _positions.Length - 1) { trail.CurrentTargetNum++; } else { trail.CurrentTargetNum = 1; } trail.TargetPosition = _targetPositions[trail.CurrentTargetNum]; } } trail.Go.transform.localPosition = Vector3.MoveTowards(trail.Go.transform.localPosition, trail.TargetPosition, Time.deltaTime * _lerpPosSpeed); } }
private void HandleMovement() { if (_lineModel.PhyllotaxisProperty.UseScaling) { float valueScale; switch (_lineModel.PhyllotaxisProperty.ScaleFrequencyType) { case AudioFrequencyType.Band: valueScale = _audioPeer.GetAudioBand(_lineModel.PhyllotaxisProperty.ScaleAudioBand); break; case AudioFrequencyType.BandBuffer: valueScale = _audioPeer.GetAudioBandBuffer(_lineModel.PhyllotaxisProperty.ScaleAudioBand); break; case AudioFrequencyType.Amplitude: valueScale = _audioPeer.GetAmplitude(); break; case AudioFrequencyType.AmplitudeBuffer: valueScale = _audioPeer.GetAmplitudeBuffer(); break; case AudioFrequencyType.Frequency: valueScale = _audioPeer.GetFrequencyBand(_lineModel.PhyllotaxisProperty.ScaleAudioBand); break; case AudioFrequencyType.FrequencyBuffer: valueScale = _audioPeer.GetFrequencyBandBuffer(_lineModel.PhyllotaxisProperty.ScaleAudioBand); break; default: throw new ArgumentOutOfRangeException(); } if (_lineModel.PhyllotaxisProperty.UseScaleCurve) { _scaleTimer += (_lineModel.PhyllotaxisProperty.InterpolationSpeed * valueScale) * Time.deltaTime; if (_scaleTimer >= 1) { _scaleTimer -= 1; } _currentScale = Mathf.Lerp(_lineModel.PhyllotaxisProperty.ScaleMinMax.x, _lineModel.PhyllotaxisProperty.ScaleMinMax.y, _lineModel.PhyllotaxisProperty.ScaleInterpolationCurve.Evaluate(_scaleTimer)); } else { _currentScale = Mathf.Lerp(_lineModel.PhyllotaxisProperty.ScaleMinMax.x, _lineModel.PhyllotaxisProperty.ScaleMinMax.y, valueScale); } } if (_lineModel.PhyllotaxisProperty.UseLerping) { if (_isLerping) { float valueLerping; switch (_lineModel.PhyllotaxisProperty.LerpFrequencyType) { case AudioFrequencyType.Band: valueLerping = _audioPeer.GetAudioBand(_lineModel.PhyllotaxisProperty.LerpAudioBand); break; case AudioFrequencyType.BandBuffer: valueLerping = _audioPeer.GetAudioBandBuffer(_lineModel.PhyllotaxisProperty.LerpAudioBand); break; case AudioFrequencyType.Amplitude: valueLerping = _audioPeer.GetAmplitude(); break; case AudioFrequencyType.AmplitudeBuffer: valueLerping = _audioPeer.GetAmplitudeBuffer(); break; case AudioFrequencyType.Frequency: valueLerping = _audioPeer.GetFrequencyBand(_lineModel.PhyllotaxisProperty.LerpAudioBand); break; case AudioFrequencyType.FrequencyBuffer: valueLerping = _audioPeer.GetFrequencyBandBuffer(_lineModel.PhyllotaxisProperty.LerpAudioBand); break; default: throw new ArgumentOutOfRangeException(); } _lerpPosSpeed = Mathf.Lerp(_lineModel.PhyllotaxisProperty.SpeedMinMax.x, _lineModel.PhyllotaxisProperty.SpeedMinMax.y, _lineModel.PhyllotaxisProperty.LerpInterpolationCurve.Evaluate(valueLerping)); _lerpPosTimer += Time.deltaTime * _lerpPosSpeed; transform.localPosition = Vector3.Lerp(_startPosition, _endPosition, Mathf.Clamp01(_lerpPosTimer)); if (_lerpPosTimer >= 1) { _lerpPosTimer -= 1; if (_forward) { _number += _lineModel.PhyllotaxisProperty.StepSize; _currentIteration++; } else { _number -= _lineModel.PhyllotaxisProperty.StepSize; _currentIteration--; } if ((_currentIteration >= 0) && (_currentIteration < _lineModel.PhyllotaxisProperty.MaxIterations)) { SetLerpPositions(); } else // current iteration has hit 0 or maxiteration { if (_lineModel.PhyllotaxisProperty.Repeat) { if (_lineModel.PhyllotaxisProperty.Invert) { _forward = !_forward; SetLerpPositions(); } else { _number = _lineModel.PhyllotaxisProperty.NumberStart; _currentIteration = 0; SetLerpPositions(); } } else { _isLerping = false; } } } } } if (!_lineModel.PhyllotaxisProperty.UseLerping) { _phyllotaxisPosition = CalculatePhyllotaxis(_lineModel.PhyllotaxisProperty.Degree, _currentScale, _number); transform.localPosition = new Vector3(_phyllotaxisPosition.x, _phyllotaxisPosition.y, 0); _number += _lineModel.PhyllotaxisProperty.StepSize; _currentIteration++; } }