168 lines
6.4 KiB
C#
168 lines
6.4 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace UI
|
|
{
|
|
/// <summary>
|
|
/// Óïðàâëÿåò òîëüêî TextMeshPro òåêñòîì ñ êîíòàêòàìè àäìèíèñòðàöèè.
|
|
/// Ïîäïèñûâàåòñÿ íà èçìåíåíèÿ íàñòðîåê è îáíîâëÿåò òåêñò, áåðÿ íîìåð èç PlayerPrefs ïî êëþ÷ó `telephone_number`.
|
|
/// </summary>
|
|
public class AdminContactsController : MonoBehaviour
|
|
{
|
|
[Tooltip("TextMeshPro òåêñò, êóäà âûâîäÿòñÿ êîíòàêòû àäìèíèñòðàöèè.")]
|
|
[SerializeField] private TMP_Text contactsText;
|
|
|
|
[Tooltip("TextMeshPro òåêñò äëÿ îòîáðàæåíèÿ îøèáîê âûäà÷è ïðèçà.")]
|
|
[SerializeField] private TMP_Text errorText;
|
|
|
|
[Tooltip("TextMeshPro òåêñò äëÿ îòîáðàæåíèÿ ñóïåðïðèçà.")]
|
|
[SerializeField] private TMP_Text prizeText;
|
|
|
|
[Tooltip("Êëþ÷ PlayerPrefs, îòêóäà áåð¸òñÿ íîìåð òåëåôîíà (ïî óìîë÷àíèþ 'telephone_number').")]
|
|
[SerializeField] private string telephonePrefKey = "telephone_number";
|
|
|
|
[Tooltip("Êëþ÷ PlayerPrefs, îòêóäà áåð¸òñÿ íîìåð òåëåôîíà (ïî óìîë÷àíèþ 'telephone_number').")]
|
|
[SerializeField] private string prizePrefKey = "SpecialPrize";
|
|
|
|
[Tooltip("Åñëè true — îáúåêò òåêñòà áóäåò ñêðûâàòüñÿ, êîãäà îïöèÿ âûêëþ÷åíà; èíà÷å òåêñò áóäåò î÷èùàòüñÿ.")]
|
|
[SerializeField] private bool hideTextWhenOff = true;
|
|
|
|
private const string SettingName = "Ïîêàçûâàòü êîíòàêòû àäìèíèñòðàöèè";
|
|
private const string ErrorSettingName = "Âûâîä îøèáêè âûäà÷è â ìåíþ";
|
|
private const string PrizeSettingName = "Âûâîä èíôîðìàöèè î ñóïåðïðèçå â ìåíþ";
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (SettingsManager.instance != null)
|
|
SettingsManager.instance.OnSettingsChanged.AddListener(UpdateState);
|
|
TextInput.OnTextChanged += UpdateState;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (contactsText == null)
|
|
contactsText = GetComponent<TMP_Text>();
|
|
|
|
// Åñëè errorText íå íàçíà÷åí â èíñïåêòîðå, ïûòàåìñÿ íàéòè åãî ñðåäè äî÷åðíèõ TMP-òåêñòâ
|
|
if (errorText == null)
|
|
{
|
|
var tmps = GetComponentsInChildren<TMP_Text>(true);
|
|
foreach (var t in tmps)
|
|
{
|
|
if (t == contactsText) continue;
|
|
errorText = t;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Ïîäñòðàõîâêà: ïîäïèøåìñÿ òàêæå â Start, åñëè instance ïîÿâèëñÿ ïîçæå
|
|
if (SettingsManager.instance != null)
|
|
{
|
|
SettingsManager.instance.OnSettingsChanged.RemoveListener(UpdateState);
|
|
SettingsManager.instance.OnSettingsChanged.AddListener(UpdateState);
|
|
}
|
|
|
|
UpdateState();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (SettingsManager.instance != null)
|
|
SettingsManager.instance.OnSettingsChanged.RemoveListener(UpdateState);
|
|
|
|
// Îòïèñûâàåìñÿ îò èçìåíåíèÿ òåêñòà (åñëè ïîäïèñûâàëèñü â OnEnable)
|
|
TextInput.OnTextChanged -= UpdateState;
|
|
}
|
|
|
|
private void UpdateState()
|
|
{
|
|
// Îáíîâëÿåì contactsText íåçàâèñèìî îò errorText
|
|
bool contactsShouldShow = GetSettingFlag(SettingName);
|
|
if (contactsText != null)
|
|
{
|
|
if (contactsShouldShow)
|
|
{
|
|
contactsText.gameObject.SetActive(true);
|
|
string phone = PlayerPrefs.GetString(telephonePrefKey, string.Empty);
|
|
contactsText.text = string.IsNullOrEmpty(phone) ? "Òåëåôîí íå çàäàí" : $"Òåëåôîí: {phone}";
|
|
}
|
|
else
|
|
{
|
|
if (hideTextWhenOff)
|
|
contactsText.gameObject.SetActive(false);
|
|
else
|
|
contactsText.text = string.Empty;
|
|
}
|
|
}
|
|
|
|
// Îáíîâëÿåì errorText íåçàâèñèìî îò contactsText
|
|
bool showError = GetSettingFlag(ErrorSettingName);
|
|
if (errorText != null)
|
|
{
|
|
if (showError)
|
|
{
|
|
errorText.gameObject.SetActive(true);
|
|
string err = PlayerPrefs.GetString(KeyVault.PRIZING_ERROR_REGISTRED, string.Empty);
|
|
if (string.IsNullOrEmpty(err))
|
|
{
|
|
errorText.text = "Îøèáîê âûäà÷è íå çàôèêñèðîâàíî";
|
|
errorText.color = Color.green; // íåò îøèáîê — çåë¸íûé
|
|
}
|
|
else
|
|
{
|
|
errorText.text = $"Îøèáêà âûäà÷è {err}";
|
|
errorText.color = Color.red; // åñòü îøèáêà — êðàñíûé
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (hideTextWhenOff)
|
|
errorText.gameObject.SetActive(false);
|
|
else
|
|
errorText.text = string.Empty;
|
|
}
|
|
}
|
|
|
|
bool showPrize = GetSettingFlag(PrizeSettingName);
|
|
|
|
if (prizeText != null)
|
|
{
|
|
if (showPrize)
|
|
{
|
|
prizeText.gameObject.SetActive(true);
|
|
string prizeInfo = PlayerPrefs.GetString(prizePrefKey, string.Empty);
|
|
prizeText.text = string.IsNullOrEmpty(prizeInfo) ? "Ñóïåðïðèç íå çàäàí" : $"Ñóïåðïðèç: {prizeInfo}";
|
|
}
|
|
else
|
|
{
|
|
if (hideTextWhenOff)
|
|
prizeText.gameObject.SetActive(false);
|
|
else
|
|
prizeText.text = string.Empty;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Óíèâåðñàëüíàÿ ïðîâåðêà áóëåâûõ íàñòðîåê (ó÷èòûâàåò ðàçíûå ïðåäñòàâëåíèÿ true)
|
|
private bool GetSettingFlag(string key)
|
|
{
|
|
if (SettingsManager.instance == null) return false;
|
|
string val;
|
|
try { val = SettingsManager.instance.GetSettingValue(key); }
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogWarning($"AdminContactsController: îøèáêà ïðè ÷òåíèè íàñòðîéêè '{key}': {ex.Message}");
|
|
return false;
|
|
}
|
|
if (string.IsNullOrEmpty(val)) return false;
|
|
val = val.Trim().ToLowerInvariant();
|
|
string[] trueValues = new string[] { "âêë", "âêëþ÷åíî", "äà", "true", "on", "enabled", "âêë." };
|
|
foreach (var t in trueValues)
|
|
if (val.Contains(t)) return true;
|
|
return false;
|
|
}
|
|
}
|
|
}
|