Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- Добавлена система ввода текста через модальное окно с ячейками для аркадного автомата - Реализован TextInputModal с поддержкой кастомных алфавитов и навигации - Добавлен TextInputCell для ввода отдельных символов с циклической навигацией - Создан TextInputSettingsBinder для интеграции ввода текста с системой настроек - Реализована компактная сериализация настроек (только нужные поля в JSON) - Внедрена система баланса игрока (BalanceManager) - Баланс начисляется при оплате импульсом, списывается при начале/продолжении игры - Добавлен InactivityManager для выхода в меню при отсутствии активности (5 минут) - Улучшена система настроек - Добавлены флаги shownInSettings и exposed для управления видимостью настроек - Реализована автоматическая регистрация/отписка SettingsButtonBinder при активации/деактивации - Исправлена загрузка настроек с проверкой типов через Sanitize() - SettingsApplier упрощен - оставлена только поддержка AudioManager - Добавлен ValueSelectorRow для выбора целочисленных значений с шагом - Удалены примеры и документация из production кода (QUICK_SETUP.md, TextInputExample, AdvancedLoggingExample) - Убран весь отладочный вывод Debug.Log из системы настроек и ввода текста - Очищены неразрывные пробелы из файлов проекта - Добавлены префабы UI (InputCell)
158 lines
6.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|