using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; public class GlobalBehaviour : MonoBehaviour { public static GlobalBehaviour Instance { get => _Instance; set { if (_Instance == null) _Instance = value; else Destroy(value); } } private static GlobalBehaviour _Instance; //Make sure when using RGBA-Colors, the A-value of animationStartColor //and animationEndColor is the same OR try with value = 255 public static Color HintAnimationStartColor => Instance._hintAnimationStartColor; public static Color HintAnimationEndColor => Instance._hintAnimationEndColor; public static float HintAnimationDuration => Instance._hintAnimationDuration; public static float AnimationLerpDuration => Instance._AnimationLerpDuration; public static Color StageAccomplished => Instance._StageAccomplished; public static Color StageNotYetAccomplished => Instance._StageNotYetAccomplished; public static Color StageError => Instance._StageError; public static float GadgetLaserDistance => Instance._GadgetLaserDistance; public static float GadgetPhysicalDistance => Instance._GadgetPhysicalDistance; #region Unity Serialization [SerializeField] private Color _hintAnimationStartColor; [SerializeField] private Color _hintAnimationEndColor; [SerializeField] private float _hintAnimationDuration; [SerializeField] private float _AnimationLerpDuration; [SerializeField] private Color _StageAccomplished; [SerializeField] private Color _StageNotYetAccomplished; [SerializeField] private Color _StageError; [SerializeField] private float _GadgetLaserDistance; [SerializeField] private float _GadgetPhysicalDistance; #endregion private void Awake() { Instance = this; DontDestroyOnLoad(this); } private void Start() { PostServerConnection(); } //TODO: Move where appropiate public int tryScrollListTimes = 2; static public List<Scroll> AvailableScrolls; private void PostServerConnection() { StartCoroutine(getScrollsfromServer()); IEnumerator getScrollsfromServer() { //Try /scroll/listAll endpoint when scroll/list is not working UnityWebRequest request = UnityWebRequest.Get(CommunicationEvents.ServerAdress + "/scroll/list"); //Postman-Echo-Mock //UnityWebRequest request = UnityWebRequest.Get("https://019a8ea5-843a-498b-8d0c-778669aef987.mock.pstmn.io/get"); for (int i = 0; i < this.tryScrollListTimes; i++) { request = UnityWebRequest.Get(CommunicationEvents.ServerAdress + "/scroll/list"); request.method = UnityWebRequest.kHttpVerbGET; yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogWarning(request.error); Debug.Log("GET Scroll/list failed. Attempt: " + (i + 1).ToString()); } else break; } string jsonString = null; if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogWarning(request.error); } else { CommunicationEvents.ServerRunning = true; jsonString = request.downloadHandler.text; } if (string.IsNullOrEmpty(jsonString) || jsonString.Equals("[]")) { jsonString = File.ReadAllText(Application.streamingAssetsPath + "/scrolls.json"); Debug.Log("Using Fallback Scrolls: \n" + jsonString); } System.DateTime startTime = System.DateTime.UtcNow; AvailableScrolls = JsonConvert.DeserializeObject<List<Scroll>>(jsonString); Debug.Log("Scroll Parsing in: " + (System.DateTime.UtcNow - startTime).TotalMilliseconds + "ms"); } } }