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 qrCodes = new(); private readonly List 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}"); } } } }