2026-06-03 09:32:20 +03:00

100 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}