Example #1
0
        /// <summary>
        /// Load tip from Resources/tips.json file
        /// </summary>
        void LoadTipFromResources()
        {
            var     tipsFile = Resources.Load("tips") as TextAsset;
            TipList tipList  = JsonUtility.FromJson <TipList>(tipsFile.text);
            Tip     tip      = tipList.GetRandom();

            // invoke event
            OnTipLoaded?.Invoke(tip);
        }
Example #2
0
        /// <summary>
        /// Load random tip from web
        /// There is a specific format, but you can write your own method for this
        /// </summary>
        /// <returns></returns>
        IEnumerator LoadTipFromWeb()
        {
            /// json request body (get one random tip between 0 and 15 from web
            string jsonBody = "[{\"method\":\"tasks.search\",\"params\":[\"\",\"createdAt\",\"desc\"," + Random.Range(0, 15) + ",1]}]";

            var www = new UnityWebRequest(url, "POST");

            byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);
            www.uploadHandler   = (UploadHandler) new UploadHandlerRaw(bodyRaw);
            www.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
            www.SetRequestHeader("Content-Type", "application/json");
            www.timeout = 3;

            yield return(www.SendWebRequest());

            if (www.isHttpError || www.isNetworkError)
            {
                Debug.Log("Error");
            }
            else
            {
                // Prepaire json for JsonUtility
                string result = www.downloadHandler.text.Replace("\"results\":[[", "\"results\":{\"tips\":[").Replace("]]}", "]}}");

                /// create UrlResponse object from json response
                UrlResponse response = JsonUtility.FromJson <UrlResponse>(result);

                // if tip is successful downloaded
                if (response.success && !response.results.IsEmpty())
                {
                    Tip tip = response.results.GetRandom();
                    // invoke event
                    OnTipLoaded?.Invoke(tip);
                    yield break;
                }
            }

            // if tip is not loaded from web get one from resource
            LoadTipFromResources();
        }