89 lines
3.2 KiB
C#
89 lines
3.2 KiB
C#
using UnityEngine;
|
||
using NavKeypad;
|
||
using TMPro;
|
||
|
||
public class PasswordManager : MonoBehaviour
|
||
{
|
||
[Header("Настройки пароля")]
|
||
public int passwordLength = 4; // Длина пароля (4 цифры)
|
||
public string correctPassword; // Сгенерированный пароль
|
||
|
||
[Header("Записки")]
|
||
public GameObject notePrefab; // Prefab записки с TextMesh
|
||
public Transform[] noteSpawnPoints; // Точки спавна
|
||
[SerializeField] private Vector3[] noteRotations; // Массив вращений для каждой записки
|
||
|
||
[Header("Ссылка на keypad")]
|
||
public Keypad keypadScript; // Ссылка на Keypad.cs
|
||
|
||
private void Start()
|
||
{
|
||
// Проверяем соответствие массивов
|
||
if (noteSpawnPoints.Length != passwordLength || noteRotations.Length != passwordLength)
|
||
{
|
||
Debug.LogError("Количество точек спавна и вращений должно быть равно длине пароля!");
|
||
return;
|
||
}
|
||
|
||
GeneratePassword();
|
||
SpawnNotes();
|
||
SetPasswordToKeypad();
|
||
}
|
||
|
||
private void GeneratePassword()
|
||
{
|
||
correctPassword = "";
|
||
for (int i = 0; i < passwordLength; i++)
|
||
{
|
||
int randomDigit = Random.Range(0, 10);
|
||
correctPassword += randomDigit.ToString();
|
||
}
|
||
Debug.Log("Сгенерированный пароль: " + correctPassword);
|
||
}
|
||
|
||
private void SpawnNotes()
|
||
{
|
||
for (int i = 0; i < passwordLength; i++)
|
||
{
|
||
// Спавним записку с индивидуальным вращением
|
||
GameObject note = Instantiate(notePrefab, noteSpawnPoints[i].position, Quaternion.Euler(noteRotations[i]));
|
||
|
||
// Находим TextMeshPro
|
||
TextMeshPro textComponent = note.GetComponentInChildren<TextMeshPro>();
|
||
if (textComponent != null)
|
||
{
|
||
textComponent.text = $"{i + 1}: {correctPassword[i]}";
|
||
textComponent.enableWordWrapping = false;
|
||
textComponent.alignment = TextAlignmentOptions.Center;
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError($"На prefab'е записки ({note.name}) нет компонента TextMeshPro!");
|
||
}
|
||
|
||
// Настраиваем NotePickup
|
||
NotePickup pickup = note.GetComponent<NotePickup>();
|
||
if (pickup == null)
|
||
{
|
||
pickup = note.AddComponent<NotePickup>();
|
||
}
|
||
pickup.noteIndex = i + 1;
|
||
pickup.digit = correctPassword[i];
|
||
|
||
Debug.Log($"Записка {i + 1} заспавнена в {noteSpawnPoints[i].position} с вращением {noteRotations[i]}");
|
||
}
|
||
}
|
||
|
||
private void SetPasswordToKeypad()
|
||
{
|
||
if (keypadScript != null)
|
||
{
|
||
keypadScript.keypadCombo = int.Parse(correctPassword);
|
||
Debug.Log($"Пароль установлен в Keypad: {correctPassword}");
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError("Ссылка на Keypad не присвоена!");
|
||
}
|
||
}
|
||
} |