Danro/Assets/Scripts/Prizes/LevelPrizeConfig.cs
Danil Iarosh 78d7679e2b
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
feat(prizes, ui): complete Mar 24-Apr 2 sprint ahead of schedule
- завершен спринт 24 марта - 2 апреля с опережением плана и закрытием задач раньше срока
- расширена и стабилизирована система призов:
  добавлены и доработаны QR-tier конфиги, новые типы и модели данных,
  сохранение `qrCodes` в `prizes.json`, fallback-логика и синхронизация
  через `PrizeSystemManager`, `PrizeDatabase` и `LevelPrizeConfig`
- переработан flow настройки QR-призов:
  добавлены `QRCodeSettingsModal` и связанный UI-код,
  разнесены короткий текст приза и полный текст сообщения,
  добавлены шаблоны форматирования, корректная подстановка текста
  в QR и в UI-модалках, а также сохранение конфигурации между запусками
- доработан flow суперприза и текстовых настроек:
  добавлены fallback-правила показа, корректная обработка пустых строк
  и строк из одних пробелов, обновлены binders и показ текста в меню
- реализована и обновлена отдельная настройка витрины:
  добавлена `PrizeStandSettingsModal`, обновлена навигация строк,
  логика выбора ячейки и порогов очков, циклический выбор ячеек,
  ускорение изменения значений и исправления для keyboard/gamepad UX
- доработана игровая модалка витрины `PrizeStandModal`:
  добавлен вывод очков игрока, форматируемый текст счета,
  улучшено отображение ячеек и связанная логика выбора приза
- исправлен подсчет очков и интеграция с prize flow:
  `ScoreSystem` переведен на событийное обновление текущего счета,
  добавлены `CurrentScore`, `CurrentScoreChanged` и корректный display score,
  витрина и связанные UI-элементы теперь получают актуальные очки,
  а не нулевые или несвоевременные preview-значения
- переработаны модальные окна и навигация UI:
  улучшены `Modal`, `ModalManager`, `UIRowPointer`, `RulesModal`,
  `QRCodeModal`, `PrizeStandModal`, `LevelPrizeSettingsModal` и др.,
  чтобы фокус, указатель и submit работали консистентно без мыши
- обновлен win/prize UI:
  доработаны `WinBannerController`, `GameEndUIController`,
  `MainMenu`, `QRCodeUIController`, `TopPanelTextController` и настройки UI,
  улучшены тексты баннеров, отображение призов и итогового счета
- обновлены сцены и ассеты под новый flow:
  `MainMenu`, `Level UI`, prefab'ы строк настроек и кнопок,
  глобальные префабы, шрифты TMP, иконки, recovery-данные и ресурсы UI
- добавлены вспомогательные UI-компоненты и служебные скрипты:
  `ButtonTextFocusColor`, `SelectableDescriptionTarget`, `QRTier`
  и другие изменения, поддерживающие новый конфигурируемый prize UI
2026-04-01 12:47:17 +03:00

64 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using RR.Common.Utility;
namespace RR.Common.Prizes
{
/// <summary>
/// Конфигурация приза для одного уровня.
/// Сериализуется в JSON через <see cref="PrizeDatabase"/>.
/// </summary>
[Serializable]
public class LevelPrizeConfig
{
public PrizeType type = PrizeType.None;
public QRTier qrTier = QRTier.None;
// ── Хоппер ──
public int hopperCapsuleCount = 1;
public float hopperDelayBetweenCapsules = 1f;
}
/// <summary>
/// Настройки одной ячейки витрины.
/// </summary>
[Serializable]
public class PrizeStandBoxConfig
{
public int boxNumber = 1;
public int requiredScore;
}
/// <summary>
/// Глобальные настройки витрины для всей игры.
/// </summary>
[Serializable]
public class PrizeStandSettings
{
public List<PrizeStandBoxConfig> boxes = new();
}
/// <summary>
/// Запись «уровень → приз» для JSON-сериализации.
/// JsonUtility не поддерживает Dictionary, поэтому используем список.
/// </summary>
[Serializable]
internal class PrizeLevelEntry
{
public string level;
public LevelPrizeConfig config = new();
}
/// <summary>
/// Корневая структура файла prizes.json.
/// </summary>
[Serializable]
internal class PrizesFileData
{
public PrizeStandSettings prizeStandSettings = new();
public List<QRCodeInfo> qrCodes = new();
public List<PrizeLevelEntry> levels = new();
}
}