Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
- добавлена новая система призов: PrizeBase, PrizeType, PrizeDatabase, LevelPrizeConfig и реализации для hopper, QR-кода, отсутствия приза и стойки с призом - добавлена конфигурация призов уровней через `prizes.json` и связанная логика загрузки/обработки в менеджерах игры - расширен UI главного меню и настроек уровней: добавлены LevelSettingsModal, LevelPrizeSettingsModal, QRCodeModal и PrizeStandModal - обновлена навигация модальных окон и связанный UI-код: ModalManager, MainMenu, RulesModal, PauseMenu, PrizeErrorDisplay, UIRowPointer и WinBannerController - доработаны настройки и генерация UI-элементов: обновлены SettingsDatabase, SettingsUIGenerator, SettingUIItem, ValueSelectorRow и editor drawer для настроек - обновлены и добавлены UI-prefab'ы для кнопок, строк настроек, панели групп и кнопки настроек уровня - обновлены сцены `MainMenu` и `Level UI` под новый флоу настройки уровней, выбора призов и отображения модалок - добавлены файлы лаунчера в `StreamingAssets`, включая `RRLauncher.exe`, служебные meta-файлы и документацию - улучшено логирование через FileLogger и удален устаревший код лицензирования - удалены больше неиспользуемые файлы: `Licensing.cs`, `SteppedSlider.cs` и recovery-сцены
73 lines
2.4 KiB
C#
73 lines
2.4 KiB
C#
using System;
|
||
using UnityEngine;
|
||
using RR.Common.UI;
|
||
|
||
namespace RR.Common.Prizes
|
||
{
|
||
/// <summary>
|
||
/// Исполнитель приза «QR-код».
|
||
/// Показывает модальное окно с QR-кодами. Сами QR-коды получает через делегат —
|
||
/// не знает откуда они берутся.
|
||
/// </summary>
|
||
public class QRCodePrize : PrizeBase
|
||
{
|
||
public override PrizeType Type => PrizeType.QRCode;
|
||
public override bool IsGiving => _isGiving;
|
||
|
||
private readonly Func<QRCodeModal> _resolveModal;
|
||
private readonly Func<Texture2D[]> _getQRCodes;
|
||
private bool _isGiving;
|
||
private QRCodeModal _activeModal;
|
||
|
||
/// <param name="resolveModal">Делегат для поиска модального окна в текущих сценах.</param>
|
||
/// <param name="getQRCodes">Делегат получения QR-текстур.</param>
|
||
public QRCodePrize(Func<QRCodeModal> resolveModal, Func<Texture2D[]> getQRCodes)
|
||
{
|
||
_resolveModal = resolveModal;
|
||
_getQRCodes = getQRCodes;
|
||
}
|
||
|
||
public override void Execute(MonoBehaviour host, LevelPrizeConfig config)
|
||
{
|
||
Texture2D[] codes = _getQRCodes?.Invoke();
|
||
|
||
if (codes == null || codes.Length == 0)
|
||
{
|
||
Debug.LogWarning("[QRCodePrize] Нет QR-кодов для отображения.");
|
||
InvokeResult(false);
|
||
return;
|
||
}
|
||
|
||
QRCodeModal modal = _resolveModal?.Invoke();
|
||
if (modal == null)
|
||
{
|
||
Debug.LogWarning("[QRCodePrize] QRCodeModal не найден на сцене.");
|
||
InvokeResult(false);
|
||
return;
|
||
}
|
||
|
||
_isGiving = true;
|
||
|
||
// Отписываемся от предыдущего, если было
|
||
if (_activeModal != null)
|
||
_activeModal.OnClosed -= OnModalClosed;
|
||
|
||
_activeModal = modal;
|
||
_activeModal.OnClosed += OnModalClosed;
|
||
_activeModal.ShowQRCodes(codes);
|
||
}
|
||
|
||
private void OnModalClosed()
|
||
{
|
||
if (_activeModal != null)
|
||
{
|
||
_activeModal.OnClosed -= OnModalClosed;
|
||
_activeModal = null;
|
||
}
|
||
|
||
_isGiving = false;
|
||
InvokeResult(true);
|
||
}
|
||
}
|
||
}
|