100 lines
2.8 KiB
C#
100 lines
2.8 KiB
C#
using UnityEngine;
|
||
using System.Collections.Generic;
|
||
|
||
public class Centerer : MonoBehaviour
|
||
{
|
||
private bool _isCentered = false;
|
||
private List<InSignal> _comboBuffer = new List<InSignal>();
|
||
|
||
// Секретная комбинация
|
||
private readonly InSignal[] _secretCombo = new InSignal[]
|
||
{
|
||
InSignal.UpLeft, InSignal.UpLeft,
|
||
InSignal.UpRight, InSignal.UpRight,
|
||
InSignal.DownLeft, InSignal.DownRight,
|
||
InSignal.DownLeft, InSignal.DownRight,
|
||
InSignal.UpLeft
|
||
};
|
||
|
||
private void OnEnable()
|
||
{
|
||
|
||
}
|
||
|
||
void Update()
|
||
{
|
||
|
||
// Центрируем только если еще не центрировались
|
||
if (!_isCentered && (In.GetButtonDown(InSignal.CenterSensor) || Input.GetKeyDown(KeyCode.C)))
|
||
{
|
||
CenterCamera();
|
||
_isCentered = true;
|
||
}
|
||
else
|
||
{
|
||
// Проверяем секретную комбинацию для сброса
|
||
CheckSecretCombo();
|
||
}
|
||
}
|
||
|
||
private void CenterCamera()
|
||
{
|
||
Quaternion cameraRotation = CamerasManager.VR_Camera.transform.rotation;
|
||
float currentYaw = cameraRotation.eulerAngles.y;
|
||
float deltaYaw = -currentYaw;
|
||
|
||
CamerasManager.CamerasPivot.Rotate(0, deltaYaw, 0);
|
||
}
|
||
|
||
private void CheckSecretCombo()
|
||
{
|
||
// Проверяем нажатия клавиш для комбинации
|
||
InSignal[] signalsToCheck = new InSignal[]
|
||
{
|
||
InSignal.UpLeft, InSignal.UpRight,
|
||
InSignal.DownLeft, InSignal.DownRight
|
||
};
|
||
|
||
foreach (InSignal signal in signalsToCheck)
|
||
{
|
||
if (In.GetButtonDown(signal))
|
||
{
|
||
_comboBuffer.Add(signal);
|
||
|
||
// Ограничиваем размер буфера размером комбинации
|
||
if (_comboBuffer.Count > _secretCombo.Length)
|
||
{
|
||
_comboBuffer.RemoveAt(0);
|
||
}
|
||
|
||
// Проверяем совпадение
|
||
if (IsComboMatch())
|
||
{
|
||
ResetCenteredState();
|
||
_comboBuffer.Clear(); // Очищаем буфер после успешного ввода
|
||
Debug.Log("Center state reset!");
|
||
}
|
||
|
||
break; // Обрабатываем только одно нажатие за кадр
|
||
}
|
||
}
|
||
}
|
||
|
||
private bool IsComboMatch()
|
||
{
|
||
if (_comboBuffer.Count != _secretCombo.Length)
|
||
return false;
|
||
|
||
for (int i = 0; i < _secretCombo.Length; i++)
|
||
{
|
||
if (_comboBuffer[i] != _secretCombo[i])
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
private void ResetCenteredState()
|
||
{
|
||
_isCentered = false;
|
||
}
|
||
} |