Danro/Assets/Scripts/Settings/Core/SettingsApplier.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

47 lines
1.3 KiB
C#

using UnityEngine;
using RR.Game2D.Core.Managers;
namespace RR.Common.Settings
{
public static class SettingsApplier
{
public static void Apply(SettingEntry def, SettingValue v)
{
if (def == null)
{
Debug.LogWarning("[SettingsApplier] Cannot apply settings: SettingEntry is null");
return;
}
switch (def.applyTarget)
{
case ApplyTarget.None:
return;
case ApplyTarget.Audio:
ApplyAudio(def, v);
return;
}
}
private static void ApplyAudio(SettingEntry def, SettingValue v)
{
float volume = Mathf.Clamp01(v.f);
// Применяем через AudioManager
if (GameManager.Instance?.Audio != null)
{
switch (def.audioTargetType)
{
case AudioTargetType.Music:
GameManager.Instance.Audio.SetMusicVolume(volume);
break;
case AudioTargetType.Sfx:
GameManager.Instance.Audio.SetSfxVolume(volume);
break;
}
}
}
}
}