Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Система выдачи призов хоппером: - PrizeSystemManager теперь читает enableHopper из настройки prizes.giveSmallPrize вместо захардкоженного SerializeField (реагирует на изменения в реальном времени) - LevelFinish: исправлен ключ настройки на prizes.giveSmallPrize - Добавлен HopperCheckController для тестирования выдачи приза кнопкой в настройках - Проверка датчика хоппера перенесена в ComDeviceClient (2-й бит INPUT) - PrizeGivenBuffer заменён с PlayerPrefs на потокобезопасный Interlocked-буфер (исправлен краш при вызове PlayerPrefs из фонового потока платы) - Добавлен PrizeSystem.OnPrizeResult (Action<bool>) — событие результата выдачи Отображение ошибки выдачи приза: - Добавлен PrizeErrorDisplay — UI-компонент, подписанный на OnPrizeResult - Зависит от настройки prizes.showPrizeError (реагирует на изменения в реальном времени) QR-коды: - PrizeSystemManager подписан на изменение prizes.phoneNumber — QR-коды перегенерируются автоматически при смене номера - WinBannerController показывает QR-коды только при включённой prizes.giveBigPrize Прочее: - Добавлен Levitator — компонент плавной левитации объекта (высота, скорость, плавность) - Настройки: группы поддержки/тестов реорганизованы, добавлена кнопка btn.hopper_test
124 lines
4.6 KiB
C#
124 lines
4.6 KiB
C#
using System.Collections.Generic;
|
|
using RR.Common.Controls;
|
|
using UnityEngine;
|
|
using RR.Common.Utility;
|
|
using RR.Common.Settings;
|
|
|
|
namespace RR.Common.Managers
|
|
{
|
|
public class PrizeSystemManager : MonoBehaviour
|
|
{
|
|
public static PrizeSystemManager Instance { get; private set; }
|
|
|
|
[Header("Настройки выдачи призов")]
|
|
[SerializeField] private bool givePrizes = true;
|
|
|
|
private bool _enableHopper;
|
|
|
|
[Header("Настройки генерации QR-кодов")]
|
|
[SerializeField] private List<QRCodeInfo> qrCodes = new();
|
|
private readonly List<Texture2D> generatedQRCodes = new();
|
|
|
|
[SerializeField] private string _phoneNumberMask = "+7XXXXXXXXXX";
|
|
// [SerializeField] private string telegramLinkPrefix = "https://t.me/";
|
|
// [SerializeField] private string whatsappLinkPrefix = "https://wa.me/";
|
|
|
|
private string _phoneNumber = string.Empty;
|
|
|
|
public void Initialize()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
Instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
|
|
Debug.Log(givePrizes
|
|
? "Prize System Initialized: Prizes will be given."
|
|
: "Prize System Initialized: Prizes will NOT be given.");
|
|
|
|
// Получаем состояние хоппера из настроек
|
|
var settings = SettingsManager.Instance;
|
|
_enableHopper = settings != null && settings.GetBool("prizes.giveSmallPrize");
|
|
|
|
Debug.Log(_enableHopper ? "Hopper is enabled for prize dispensing." : "Hopper is disabled.");
|
|
|
|
// Получаем номер телефона из новой системы настроек (если он есть)
|
|
RefreshPhoneNumber(settings);
|
|
|
|
GenerateQRCodes();
|
|
|
|
// Подписываемся на изменение номера телефона для перегенерации QR-кодов
|
|
if (settings != null)
|
|
settings.OnSettingChanged += OnSettingChanged;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
var settings = SettingsManager.Instance;
|
|
if (settings != null)
|
|
settings.OnSettingChanged -= OnSettingChanged;
|
|
}
|
|
|
|
private void OnSettingChanged(string key, SettingValue value)
|
|
{
|
|
if (key == "prizes.giveSmallPrize")
|
|
{
|
|
_enableHopper = value.b;
|
|
Debug.Log(_enableHopper
|
|
? "[PrizeSystemManager] Хоппер включён."
|
|
: "[PrizeSystemManager] Хоппер выключен.");
|
|
return;
|
|
}
|
|
|
|
if (key == "prizes.phoneNumber")
|
|
{
|
|
RefreshPhoneNumber(SettingsManager.Instance);
|
|
GenerateQRCodes();
|
|
Debug.Log($"[PrizeSystemManager] Номер телефона изменён, QR-коды перегенерированы: {_phoneNumber}");
|
|
}
|
|
}
|
|
|
|
private void RefreshPhoneNumber(SettingsManager settings)
|
|
{
|
|
_phoneNumber = settings?.GetString("prizes.phoneNumber") ?? string.Empty;
|
|
_phoneNumber = PhoneNumberUtils.ValidatePhoneNumber(_phoneNumber);
|
|
_phoneNumber = PhoneNumberUtils.ApplyPhoneMask(_phoneNumber, _phoneNumberMask);
|
|
}
|
|
|
|
public void GivePrize()
|
|
{
|
|
if (_enableHopper)
|
|
PrizeSystem.GivePrize();
|
|
else
|
|
Debug.Log("Hopper is disabled. Prize dispensing skipped.");
|
|
}
|
|
|
|
public Texture2D[] GetQRCodes()
|
|
{
|
|
return generatedQRCodes.ToArray();
|
|
}
|
|
|
|
private void GenerateQRCodes()
|
|
{
|
|
// Очищаем предыдущие QR-коды
|
|
if (generatedQRCodes.Count > 0) generatedQRCodes.Clear();
|
|
|
|
foreach (QRCodeInfo data in qrCodes)
|
|
{
|
|
if (!data.generateQRCode) continue;
|
|
string fullLink = data.GetFullLink(_phoneNumber);
|
|
Texture2D qrTexture = QRMaker.MakeTexture(fullLink,
|
|
8,
|
|
true,
|
|
QRCodeInfo.GetColor(data.darkColor),
|
|
QRCodeInfo.GetColor(data.lightColor));
|
|
generatedQRCodes.Add(qrTexture);
|
|
Debug.Log($"Generated QR Code for link: {fullLink}");
|
|
}
|
|
}
|
|
}
|
|
} |