protected virtual void UpdateUI() { if (Knob.Active) { // start dent if (Time.time - _lastStartClickAt < StartClickDuration) { float elapsedTime = StartClickCurve.Evaluate((Time.time - _lastStartClickAt) * (1 / StartClickDuration)); Knob._rectTransform.localScale = Vector3.one + Vector3.one * elapsedTime * 0.05f; Knob._image.color = Color.Lerp(ActiveColor, Color.white, elapsedTime); } // other dents foreach (float f in Dents) { if (((_knobValue >= f) && (_knobValueLastFrame < f)) || ((_knobValue <= f) && (_knobValueLastFrame > f))) { _lastDentAt = Time.time; break; } } if (Time.time - _lastDentAt < DentDuration) { float elapsedTime = StartClickCurve.Evaluate((Time.time - _lastDentAt) * (1 / DentDuration)); Knob._rectTransform.localScale = Vector3.one + Vector3.one * elapsedTime * 0.02f; Knob._image.color = Color.Lerp(ActiveColor, Color.white, elapsedTime * 0.05f); if (MMVibrationManager.iOS()) { MMVibrationManager.TransientHaptic(0.4f, 1f); } } } // gas bar PowerBar.UpdateBar(Power, 0f, MaximumPowerDuration); // power bars if (CarSpeed <= 0.1f) { for (int i = 0; i < SpeedBars.Count; i++) { SpeedBars[i].SetActive(false); } } else { int barsAmount = (int)(CarSpeed * 5f); for (int i = 0; i < SpeedBars.Count; i++) { if (i <= barsAmount) { SpeedBars[i].SetActive(true); } else { SpeedBars[i].SetActive(false); } } } }
public virtual void TransientHapticsButton() { MMVibrationManager.TransientHaptic(TransientIntensity, TransientSharpness); StartCoroutine(Logo.Shake(0.2f)); DebugAudioTransient.volume = TransientIntensity; DebugAudioTransient.pitch = 0.5f + TransientSharpness / 2f; DebugAudioTransient.Play(); }
public virtual void HitPusher() { HitPusherParticles.Play(); MMVibrationManager.TransientHaptic(0.85f, 0.05f, true, this); TransientAudioSource.volume = 0.1f; StartCoroutine(LogoShaker.Shake(0.2f)); TransientAudioSource.Play(); _ballAnimator.SetTrigger(_hitAnimationParameter); }
protected virtual void HitWall() { float intensity = _rigidBody.velocity.magnitude / 100f; MMVibrationManager.TransientHaptic(intensity, 0.7f, true, this); TransientAudioSource.volume = intensity; StartCoroutine(LogoShaker.Shake(0.2f)); TransientAudioSource.Play(); _ballAnimator.SetTrigger(_hitAnimationParameter); }
/// <summary> /// When this feedback gets played /// </summary> /// <param name="position"></param> /// <param name="attenuation"></param> protected virtual void TestVibration() { Vector3 position = this.transform.position; switch (HapticMethod) { case HapticMethods.AdvancedPattern: string iOSString = (AHAPFileForIOS == null) ? "" : AHAPFileForIOS.text; long[] androidPattern = (AndroidWaveFormFile == null) ? null : AndroidWaveFormFile.WaveForm.Pattern; int[] androidAmplitude = (AndroidWaveFormFile == null) ? null : AndroidWaveFormFile.WaveForm.Amplitudes; long[] rumblePattern = (RumbleWaveFormFile == null) ? null : RumbleWaveFormFile.WaveForm.Pattern; int[] lowFreqAmplitude = (RumbleWaveFormFile == null) ? null : RumbleWaveFormFile.WaveForm.LowFrequencyAmplitudes; int[] highFreqAmplitude = (RumbleWaveFormFile == null) ? null : RumbleWaveFormFile.WaveForm.HighFrequencyAmplitudes; MMVibrationManager.AdvancedHapticPattern(iOSString, androidPattern, androidAmplitude, AndroidRepeat, rumblePattern, lowFreqAmplitude, highFreqAmplitude, RumbleRepeat, OldIOSFallback, this); break; case HapticMethods.Continuous: StartCoroutine(ContinuousHapticsCoroutine()); break; case HapticMethods.NativePreset: MMVibrationManager.Haptic(HapticType, false, AllowRumble, this); break; case HapticMethods.Transient: MMVibrationManager.TransientHaptic(TransientIntensity, TransientSharpness, AllowRumble, this); break; case HapticMethods.Stop: if (_continuousPlaying) { MMVibrationManager.StopContinuousHaptic(AllowRumble); _continuousPlaying = false; } break; } }