56 lines
1.3 KiB
C#
56 lines
1.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class KnobController : MonoBehaviour
|
|
{
|
|
[SerializeField] private MassController _massController;
|
|
[SerializeField] private float _rotationDuration = 0.3f;
|
|
[SerializeField] private Vector3[] _positions;
|
|
|
|
private int _currentIndex = 0;
|
|
private bool _isRotating = false;
|
|
|
|
private void OnMouseDown()
|
|
{
|
|
if (_isRotating) return;
|
|
|
|
RotateToNextPosition();
|
|
|
|
if (_massController != null)
|
|
_massController.SwitchUnit();
|
|
}
|
|
|
|
private void RotateToNextPosition()
|
|
{
|
|
_currentIndex++;
|
|
|
|
if (_currentIndex >= _positions.Length)
|
|
_currentIndex = 0;
|
|
|
|
StartCoroutine(RotateTo(_positions[_currentIndex]));
|
|
}
|
|
|
|
private IEnumerator RotateTo(Vector3 targetEuler)
|
|
{
|
|
_isRotating = true;
|
|
|
|
Quaternion start = transform.rotation;
|
|
Quaternion end = Quaternion.Euler(targetEuler);
|
|
|
|
float time = 0f;
|
|
|
|
while (time < _rotationDuration)
|
|
{
|
|
time += Time.deltaTime;
|
|
float t = time / _rotationDuration;
|
|
|
|
transform.rotation = Quaternion.Slerp(start, end, t);
|
|
yield return null;
|
|
}
|
|
|
|
transform.rotation = end;
|
|
_isRotating = false;
|
|
}
|
|
}
|