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;
//TODO: move?
/// <summary> Default Setting for all JSONConvert operations </summary>
public static JsonSerializerSettings JsonConvertDefaultSettings = new() { MaxDepth = 256 };
if (Instance != this)
return;
JsonConvert.DefaultSettings = () => JsonConvertDefaultSettings;
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;
public static bool AttemptScrollList = true; //false;
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;
MaZiFAU
committed
UnityWebRequest request = null;
if (AttemptScrollList)
{
for (int i = 0; i < this.tryScrollListTimes; i++)
MaZiFAU
committed
{
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;
MaZiFAU
committed
}
while (request.result == UnityWebRequest.Result.InProgress)
yield return null;
MaZiFAU
committed
}
System.DateTime answerTime = System.DateTime.UtcNow;
if (AttemptScrollList)
MaZiFAU
committed
{
if (request.result == UnityWebRequest.Result.ConnectionError
|| request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogWarning(request.error);
}
else
{
CommunicationEvents.ServerRunning = true;
MaZiFAU
committed
while (!request.downloadHandler.isDone)
yield return null;
jsonString = request.downloadHandler.text;
}
MaZiFAU
committed
}
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);
System.DateTime processTime = System.DateTime.UtcNow;
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" +
$"JSONParsing\t{(processTime - parseTime).TotalMilliseconds}ms\n" +
$"Processing\t{(System.DateTime.UtcNow - processTime).TotalMilliseconds}ms");
public static FactRecorder Context = new();
public static IEnumerator InitiateContext = IEnumeratorExtensions.yield_break;
public static bool AttemptContextLoad = true; //false;
private void GetContextfromServer()
{
StartCoroutine(InitiateContext = _GetContextfromServer());
IEnumerator _GetContextfromServer()
{
System.DateTime requestTime = System.DateTime.UtcNow;
UnityWebRequest request = null;
if (AttemptContextLoad)
{
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)
yield return null;
System.DateTime answerTime = System.DateTime.UtcNow;
string jsonString = null;
if (AttemptContextLoad)
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.TimeSpan justParseTime = default;
System.TimeSpan 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.UtcNow;
List<Fact> new_list = Fact.MMTFactory(fact); // old but IEnumerator: yield return ParsingDictionary.parseFactDictionary[fact.getType()](new_list, fact);
justParseTime += System.DateTime.UtcNow - parse_time;
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.UtcNow;
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.UtcNow - 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" +
$"JSONParsing\t{(parseEnd - parseTime).TotalMilliseconds}ms\n" +
$"FactCreation\t{(System.DateTime.UtcNow - parseEnd).TotalMilliseconds}ms\n" +
$"FactJustParsing\t{justParseTime.Milliseconds}ms\n" +
$"FactJustAdding\t{justAddinTime.Milliseconds}ms\n" +
"");
yield break;
}
}