Unity_1lab/1 laba/Assets/Scripts/PasswordManager.cs
2025-09-19 03:17:08 +03:00

89 lines
3.2 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 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 не присвоена!");
}
}
}