Newer
Older
using REST_JSON_API;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
Marco Zimmer
committed
public class GlobalBehaviour : MonoBehaviour
Marco Zimmer
committed
{
public static GlobalBehaviour Instance
{
get => _Instance;
set
{
_Instance = value;
else
Destroy(value);
}
}
private static GlobalBehaviour _Instance;
Marco Zimmer
committed
//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;
Marco Zimmer
committed
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;
if (Instance != this)
return;
GetScrollsfromServer();
GetContextfromServer();
}
//TODO: Move where appropiate
public int tryScrollListTimes = 2;
static public List<REST_JSON_API.Scroll> AvailableScrolls;
public static IEnumerator InitiateScrolls = IEnumeratorExtensions.yield_break;
private void GetScrollsfromServer()
StartCoroutine(InitiateScrolls = _GetScrollsfromServer());
IEnumerator _GetScrollsfromServer()
//Try /scroll/listall endpoint when scroll/list is not working
//UnityWebRequest request = UnityWebRequest.Get(CommunicationEvents.ServerAdress + "/scroll/listall");
//Postman-Echo-Mock
//UnityWebRequest request = UnityWebRequest.Get("https://019a8ea5-843a-498b-8d0c-778669aef987.mock.pstmn.io/get");
System.DateTime requestTime = System.DateTime.UtcNow;
//UnityWebRequest request = null;
//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;
//}
//while (request.result == UnityWebRequest.Result.InProgress)
// yield return null;
System.DateTime answerTime = System.DateTime.UtcNow;
//if (request.result == UnityWebRequest.Result.ConnectionError
// || request.result == UnityWebRequest.Result.ProtocolError)
//{
// Debug.LogWarning(request.error);
//}
//else
//{
// CommunicationEvents.ServerRunning = true;
// while (!request.downloadHandler.isDone)
// yield return null;
// 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 parseTime = System.DateTime.UtcNow;
List<Scroll> _AvailableScrolls = JsonConvert.DeserializeObject<List<Scroll>>(jsonString);
AvailableScrolls = new();
foreach (Scroll scroll in _AvailableScrolls)
AvailableScrolls.Add(IJSONsavable<Scroll>.postprocess(scroll));
Debug.Log(
$"Scroll Times:\n" +
$"Summ\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" +
$"Server\t{(answerTime - requestTime).TotalMilliseconds}ms\n" +
$"Download\t{(parseTime - answerTime).TotalMilliseconds}ms\n" +
$"Parsing\t{(System.DateTime.UtcNow - parseTime).TotalMilliseconds}ms");
public static FactRecorder Context = new();
public static IEnumerator InitiateContext = IEnumeratorExtensions.yield_break;
private void GetContextfromServer()
{
StartCoroutine(InitiateContext = _GetContextfromServer());
IEnumerator _GetContextfromServer()
{
System.DateTime requestTime = System.DateTime.UtcNow;
UnityWebRequest request = null;
for (int i = 0; i < this.tryScrollListTimes; i++)
{
request = UnityWebRequest.Get(CommunicationEvents.ServerAdress + "/fact/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 /fact/list failed. Attempt: " + (i + 1).ToString());
}
else
break;
}
while (request.result == UnityWebRequest.Result.InProgress)
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
System.DateTime answerTime = System.DateTime.UtcNow;
string jsonString = null;
if (request.result == UnityWebRequest.Result.ConnectionError
|| request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogWarning(request.error);
}
else
{
CommunicationEvents.ServerRunning = true;
while (!request.downloadHandler.isDone)
yield return null;
jsonString = request.downloadHandler.text;
}
if (string.IsNullOrEmpty(jsonString)
|| jsonString.Equals("[]"))
{
jsonString = File.ReadAllText(Application.streamingAssetsPath + "/context.json");
Debug.Log("Using Fallback Context: \n" + jsonString);
}
System.DateTime parseTime = System.DateTime.UtcNow;
MMTFact[] context_facts = JsonConvert.DeserializeObject<MMTFact[]>(jsonString);
System.DateTime parseEnd = System.DateTime.UtcNow;
System.DateTime justParseTime = default;
System.DateTime justAddinTime = default;
bool samestep = false;
foreach (MMTFact fact in context_facts)
{
if (Regex.IsMatch(fact.@ref.uri, ".*fact\\d+$") // one of ours
|| Regex.IsMatch(fact.@ref.uri, ".*SituationTheory\\d+\\?.*") // one of ours
|| fact.GetDefines() == null) // Scala rule?
continue;
System.DateTime parse_time = System.DateTime.Now;
List<Fact> new_list = Fact.MMTFactory(fact); // old but IEnumerator: yield return ParsingDictionary.parseFactDictionary[fact.getType()](new_list, fact);
justParseTime += System.DateTime.Now - parse_time;
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
if (new_list.Count == 0)
{
Debug.LogWarning("Parsing on context-fact returned empty List -> One of the dependent facts does not exist or parsing failed");
continue;
}
System.DateTime addin_time = System.DateTime.Now;
foreach (Fact new_fact in new_list)
{
Context.Add(new_fact, out bool exists, samestep, null, null, true, true);
if (!exists)
samestep = true;
yield return null;
}
justAddinTime += System.DateTime.Now - addin_time;
}
Debug.Log(
$"Context Times:\n" +
$"Summ\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" +
$"Server\t{(answerTime - requestTime).TotalMilliseconds}ms\n" +
$"Download\t{(parseTime - answerTime).TotalMilliseconds}ms\n" +
$"Parsing\t{(parseEnd - parseTime).TotalMilliseconds}ms\n" +
$"FactParsing\t{justParseTime.Millisecond}ms\n" +
$"FactAdding\t{justAddinTime.Millisecond}ms\n" +
"");
yield break;
}
}