Danro/Assets/Scripts/UI/TextInput/TextInputModal_Test.cs
Danil Iarosh 2417f58f61
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat: Add text input system and balance management with settings improvements
- Добавлена система ввода текста через модальное окно с ячейками для аркадного автомата
- Реализован TextInputModal с поддержкой кастомных алфавитов и навигации
- Добавлен TextInputCell для ввода отдельных символов с циклической навигацией
- Создан TextInputSettingsBinder для интеграции ввода текста с системой настроек
- Реализована компактная сериализация настроек (только нужные поля в JSON)

- Внедрена система баланса игрока (BalanceManager)
- Баланс начисляется при оплате импульсом, списывается при начале/продолжении игры
- Добавлен InactivityManager для выхода в меню при отсутствии активности (5 минут)

- Улучшена система настроек
- Добавлены флаги shownInSettings и exposed для управления видимостью настроек
- Реализована автоматическая регистрация/отписка SettingsButtonBinder при активации/деактивации
- Исправлена загрузка настроек с проверкой типов через Sanitize()
- SettingsApplier упрощен - оставлена только поддержка AudioManager
- Добавлен ValueSelectorRow для выбора целочисленных значений с шагом

- Удалены примеры и документация из production кода (QUICK_SETUP.md, TextInputExample, AdvancedLoggingExample)
- Убран весь отладочный вывод Debug.Log из системы настроек и ввода текста
- Очищены неразрывные пробелы из файлов проекта
- Добавлены префабы UI (InputCell)
2026-02-11 16:27:33 +03:00

158 lines
6.3 KiB
C#

using UnityEngine;
namespace RR.Common.UI
{
/// <summary>
/// Пример использования TextInputModal для различных типов ввода
/// </summary>
public class TextInputModal_Test : MonoBehaviour
{
[SerializeField] private TextInputModal textInputModal;
/// <summary>
/// Открывает модальное окно для ввода номера телефона
/// </summary>
public void OpenPhoneNumberInput()
{
if (textInputModal == null) return;
// Устанавливаем алфавит для телефонных номеров
textInputModal.SetAlphabet(TextInputAlphabets.PhoneNumber);
// Устанавливаем количество ячеек (например, 11 для российского номера)
textInputModal.SetCellCount(11);
// Подписываемся на события
textInputModal.OnTextConfirmed += OnPhoneNumberEntered;
textInputModal.OnTextCancelled += OnInputCancelled;
// Открываем окно
textInputModal.OpenForInput("Введите номер телефона", "+7");
}
/// <summary>
/// Открывает модальное окно для ввода имени игрока
/// </summary>
public void OpenPlayerNameInput()
{
if (textInputModal == null) return;
// Устанавливаем алфавит для имени (русские буквы)
textInputModal.SetAlphabet(TextInputAlphabets.RussianStandard);
// Устанавливаем количество ячеек
textInputModal.SetCellCount(15);
// Подписываемся на события
textInputModal.OnTextConfirmed += OnPlayerNameEntered;
textInputModal.OnTextCancelled += OnInputCancelled;
// Открываем окно
textInputModal.OpenForInput("Введите ваше имя");
}
/// <summary>
/// Открывает модальное окно для ввода кода приза
/// </summary>
public void OpenPrizeCodeInput()
{
if (textInputModal == null) return;
// Устанавливаем алфавит только из цифр
textInputModal.SetAlphabet(TextInputAlphabets.Numeric);
// Устанавливаем количество ячеек (например, 6 для кода)
textInputModal.SetCellCount(6);
// Подписываемся на события
textInputModal.OnTextConfirmed += OnPrizeCodeEntered;
textInputModal.OnTextCancelled += OnInputCancelled;
// Открываем окно
textInputModal.OpenForInput("Введите код приза");
}
/// <summary>
/// Открывает модальное окно для ввода email
/// </summary>
public void OpenEmailInput()
{
if (textInputModal == null) return;
// Устанавливаем алфавит для email
textInputModal.SetAlphabet(TextInputAlphabets.Email);
// Устанавливаем количество ячеек
textInputModal.SetCellCount(20);
// Подписываемся на события
textInputModal.OnTextConfirmed += OnEmailEntered;
textInputModal.OnTextCancelled += OnInputCancelled;
// Открываем окно
textInputModal.OpenForInput("Введите email");
}
private void OnPhoneNumberEntered(string phoneNumber)
{
Debug.Log($"Введен номер телефона: {phoneNumber}");
// Отписываемся от событий
textInputModal.OnTextConfirmed -= OnPhoneNumberEntered;
textInputModal.OnTextCancelled -= OnInputCancelled;
// Здесь можно сохранить номер телефона
PlayerPrefs.SetString("PlayerPhone", phoneNumber);
}
private void OnPlayerNameEntered(string playerName)
{
Debug.Log($"Введено имя игрока: {playerName}");
// Отписываемся от событий
textInputModal.OnTextConfirmed -= OnPlayerNameEntered;
textInputModal.OnTextCancelled -= OnInputCancelled;
// Здесь можно сохранить имя игрока
PlayerPrefs.SetString("PlayerName", playerName);
}
private void OnPrizeCodeEntered(string prizeCode)
{
Debug.Log($"Введен код приза: {prizeCode}");
// Отписываемся от событий
textInputModal.OnTextConfirmed -= OnPrizeCodeEntered;
textInputModal.OnTextCancelled -= OnInputCancelled;
// Здесь можно проверить код приза
// CheckPrizeCode(prizeCode);
}
private void OnEmailEntered(string email)
{
Debug.Log($"Введен email: {email}");
// Отписываемся от событий
textInputModal.OnTextConfirmed -= OnEmailEntered;
textInputModal.OnTextCancelled -= OnInputCancelled;
// Здесь можно сохранить email
PlayerPrefs.SetString("PlayerEmail", email);
}
private void OnInputCancelled()
{
Debug.Log("Ввод отменен");
// Отписываемся от всех событий
textInputModal.OnTextConfirmed -= OnPhoneNumberEntered;
textInputModal.OnTextConfirmed -= OnPlayerNameEntered;
textInputModal.OnTextConfirmed -= OnPrizeCodeEntered;
textInputModal.OnTextConfirmed -= OnEmailEntered;
textInputModal.OnTextCancelled -= OnInputCancelled;
}
}
}