PJ/Assets/scripts/dotfs_scripts/MANAGER_RemoteData.cs

115 lines
No EOL
2.5 KiB
C#

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
using System;
using Newtonsoft.Json;
[Serializable]
public class QuestData
{
public string id;
public string title;
public string description;
public int reward;
public string actionType;
public string targetId;
public int requiredAmount;
}
[Serializable]
public class QuestList
{
public List<QuestData> quests;
}
[System.Serializable]
public class MailDataWrapper
{
public List<MailEntry> mails;
}
public class MANAGER_RemoteData : MonoBehaviour
{
public static MANAGER_RemoteData Instance { get; private set; }
[Header("Server Settings")]
[SerializeField] private string dataUrl = "http://mc1.live-on.pro:64093/quests/quests.json";
public QuestList currentData;
public static event Action OnDataLoaded;
private void Awake()
{
if (Instance == null){
Instance = this;
DontDestroyOnLoad(gameObject);
}
else Destroy(gameObject);
}
private void Start()
{
FetchLatestData();
}
public void FetchLatestData()
{
StartCoroutine(DownloadJsonCoroutine());
}
private IEnumerator DownloadJsonCoroutine()
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(dataUrl))
{
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
webRequest.result == UnityWebRequest.Result.ProtocolError)
{
}
else
{
string jsonText = webRequest.downloadHandler.text;
ProcessDownloadedData(jsonText);
}
}
}
private void ProcessDownloadedData(string json)
{
try
{
// Используем JsonConvert вместо JsonUtility
currentData = JsonConvert.DeserializeObject<QuestList>(json);
if (currentData != null && currentData.quests != null)
{
Debug.Log($"[RemoteData] Успех! Загружено квестов: {currentData.quests.Count}");
OnDataLoaded?.Invoke();
}
else
{
Debug.LogError("[RemoteData] Ошибка: Данные пусты после десериализации.");
}
}
catch (Exception e)
{
Debug.LogError($"[RemoteData] Ошибка парсинга: {e.Message}");
}
}
}