Danro-Jump/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActionRouter.cs
Danil Iarosh c3bb250769 Integrate COM logging HUD fixes and hopper dispensing
Подробный список изменений:
- Добавлено файловое логирование игровых сессий в game.log и расширена диагностика COM-подключений.
- Подключен native COM transport с fallback-логикой для IL2CPP и добавлен плагин ComNative.dll.
- Исправлена логика one-way платформ, чтобы игрок проходил сквозь платформы при нахождении ниже их верхней точки.
- Переработана компоновка gameplay HUD: верхние плашки выровнены, левая уменьшена, центральная плашка очков центрирована и масштабирована.
- Добавлена общая выдача призов через хоппер с командами запуска/остановки мотора и ожиданием датчика.
- Подключен сервисный тест хоппера в настройках и обновлены связанные тесты.
- Добавлены скриншоты визуальной проверки HUD.
2026-07-06 16:47:27 +03:00

105 lines
5.4 KiB
C#

using System;
using DanroJump.Prizes;
using DanroJump.UI.MainMenu;
namespace DanroJump.Settings
{
/// <summary>
/// Маршрутизирует кнопки сервисного меню в понятные оператору действия.
/// </summary>
public static class ServiceSettingsActionRouter
{
public static ServiceSettingsActionResult Execute(
ServiceSettingDefinition definition,
IReadOnlyServiceSettings settings,
IPrizeSessionStateService prizeSessionState = null)
{
if (definition == null)
{
return ServiceSettingsActionResult.Unknown(
"Неизвестное действие",
"Кнопка сервисного меню не содержит описания действия.");
}
return definition.Key switch
{
ServiceSettingsKeys.StatisticsButton => ServiceSettingsStatisticsSummaryBuilder.Build(
settings,
prizeSessionState),
ServiceSettingsKeys.PhoneNumberButton => OpenSettingEditor(
"Номер телефона",
"Открыто служебное окно номера телефона для QR-призов.",
ServiceSettingsKeys.PrizePhoneNumber),
ServiceSettingsKeys.BigPrizeButton => OpenSettingEditor(
"Суперприз",
"Открыто служебное окно настройки суперприза.",
ServiceSettingsKeys.BigPrize),
ServiceSettingsKeys.SupportNumberButton => OpenSettingEditor(
"Номер поддержки",
"Открыто служебное окно номера поддержки автомата.",
ServiceSettingsKeys.SupportNumber),
ServiceSettingsKeys.SettingsPinButton => OpenSettingEditor(
"PIN-код",
"Открыто служебное окно изменения PIN-кода.",
ServiceSettingsKeys.SettingsPin),
ServiceSettingsKeys.CurrencyButton => OpenSettingEditor(
"Валюта баланса",
"Открыто служебное окно валюты денежного баланса.",
ServiceSettingsKeys.Currency),
ServiceSettingsKeys.HopperTestButton => ServiceSettingsActionResult.Success(
"Тест выдачи",
"Запускается тест хоппера: мотор выдачи будет включен до срабатывания датчика или таймаута.",
ServiceSettingsKeys.HopperTestButton),
ServiceSettingsKeys.LevelsPrizesButton => ServiceSettingsActionResult.Success(
"Настройки призов",
PrizeInfoFormatter.Build(settings),
ServiceSettingsKeys.PrizeLevels),
ServiceSettingsKeys.QrSettingsButton => ServiceSettingsActionResult.Success(
"Настройки QR",
QrInfoFormatter.Build(settings),
ServiceSettingsKeys.QrPrizeTextSettings),
ServiceSettingsKeys.StandSettingsButton => ServiceSettingsActionResult.Success(
"Настройки витрины",
"Открыт раздел призовой витрины. Следующий шаг - подключить статусы ячеек и команды тестовой выдачи.",
"Призовая витрина"),
_ => ServiceSettingsActionResult.Unknown(
definition.DisplayName,
string.IsNullOrWhiteSpace(definition.ButtonData)
? "Для этой кнопки пока нет маршрута действия."
: $"Для этой кнопки пока нет маршрута действия: {definition.ButtonData}.")
};
}
private static ServiceSettingsActionResult OpenSettingEditor(string title, string status, string settingKey)
{
return ServiceSettingsActionResult.Success(title, status, settingKey);
}
}
public readonly struct ServiceSettingsActionResult
{
private ServiceSettingsActionResult(bool handled, string title, string status, string focusKey)
{
Handled = handled;
Title = string.IsNullOrWhiteSpace(title) ? "Служебное действие" : title;
Status = status ?? string.Empty;
FocusKey = focusKey ?? string.Empty;
}
public bool Handled { get; }
public string Title { get; }
public string Status { get; }
public string FocusKey { get; }
public static ServiceSettingsActionResult Success(string title, string status, string focusKey)
{
return new ServiceSettingsActionResult(true, title, status, focusKey);
}
public static ServiceSettingsActionResult Unknown(string title, string status)
{
return new ServiceSettingsActionResult(false, title, status, string.Empty);
}
}
}