Skip to content

Commit

Permalink
Tempt merge commit
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianGlawogger committed Jan 15, 2025
2 parents 13f56d6 + a5b2f75 commit 1205fb2
Show file tree
Hide file tree
Showing 55 changed files with 5,081 additions and 2,827 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using UnityEngine;
using System.Collections.Generic;
using UnityEngine;

namespace Maroon.GlobalEntities
{
Expand Down Expand Up @@ -26,6 +27,10 @@ public class BootstrappingManager : MonoBehaviour, GlobalEntity

MonoBehaviour GlobalEntity.Instance => Instance;

#if UNITY_WEBGL
public Dictionary<WebGlUrlParameter, string> UrlParameters { get; private set; }
#endif

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Methods

Expand Down Expand Up @@ -68,16 +73,19 @@ private void Start()
(this._webglEnableSceneLoadingViaUrlParameter) )
{
// Read URL parameter
string parameter = Maroon.WebGLUrlParameterReader.GetUrlParameter(this._webglUrlParameterName);
this.UrlParameters = Maroon.WebGlUrlParameterReader.GetAllUrlParameters();

// Get scene asset
Maroon.CustomSceneAsset urlScene;
urlScene = SceneManager.Instance.GetSceneAssetBySceneName(parameter + ".pc");

// Check if scene requested by parameter exists, and try to load it
if((urlScene != null) && (SceneManager.Instance.LoadSceneRequest(urlScene)))
if(this.UrlParameters.TryGetValue(WebGlUrlParameter.LoadScene, out string parameter))
{
alreadyRedirected = true;
Maroon.CustomSceneAsset urlScene;
urlScene = SceneManager.Instance.GetSceneAssetBySceneName(parameter + ".pc");

// Check if scene requested by parameter exists, and try to load it
if((urlScene != null) && (SceneManager.Instance.LoadSceneRequest(urlScene)))
{
alreadyRedirected = true;
}
}
}
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
"rootNamespace": "",
"references": [
"GUID:ccf513c02a7c0734f97bf699ec9fcc75",
"GUID:20a3f6c7643c02b4f91ee2b86822b6a7",
"GUID:833d205176b3e444a810dbf875342968",
"GUID:9d2d2b17ea939f447a2e35b833b82ffa",
"GUID:56f15dd651d5d3a44bbfc9ca89629921"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
mergeInto(LibraryManager.library,
{
GetUrlParameter: function(url_parameter_name_ptr)
_getUrlParameter: function(url_parameter_name_ptr)
{
// Get requested parameter
var url_parameter_name = Pointer_stringify(url_parameter_name_ptr);
var url_parameter_name = UTF8ToString(url_parameter_name_ptr);

// Extract requested parameter from URL
var searchParams = new URLSearchParams(window.location.search);
Expand All @@ -14,6 +14,26 @@ mergeInto(LibraryManager.library,
returnString = searchParams.get(url_parameter_name);
}

// Send it back to Unity
var bufferSize = lengthBytesUTF8(returnString) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(returnString, buffer, bufferSize);
return buffer;
},

_getAllUrlParameters: function()
{
var searchParams = new URLSearchParams(window.location.search);
var returnDict = {};

for (var pair of searchParams.entries())
{
returnDict[pair[0]] = pair[1];
}

// Convert the dictionary to a JSON string
var returnString = JSON.stringify(returnDict);

// Send it back to Unity
var bufferSize = lengthBytesUTF8(returnString) + 1;
var buffer = _malloc(bufferSize);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,54 @@
using UnityEngine;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System;
using Newtonsoft.Json;

namespace Maroon
{
public class WebGLUrlParameterReader : MonoBehaviour
public enum WebGlUrlParameter
{
LoadScene,
Config,
}
public class WebGlUrlParameterReader : MonoBehaviour
{
// JS implementation at Plugins/WebGLUrlParameterReader.jslib
[DllImport("__Internal")]
public static extern string GetUrlParameter(string urlParameterName);
private static extern string _getUrlParameter(string urlParameterName);
[DllImport("__Internal")]
private static extern IntPtr _getAllUrlParameters();

[Obsolete("GetUrlParameter is deprecated due to case-sensitivity. Use 'BootstrappingManager.UrlParameters' instead.")]
public static string GetUrlParameter(WebGlUrlParameter urlParameter)
{
return GetAllUrlParameters().TryGetValue(urlParameter, out string value) ? value : null;
}

public static Dictionary<WebGlUrlParameter, string> GetAllUrlParameters()
{
// rawJson = {"LoadScene":"Optics","Config":"Default"}
var rawJson = Marshal.PtrToStringAnsi(_getAllUrlParameters());
var stringKeyedValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawJson);

var enumKeyedValues = new Dictionary<WebGlUrlParameter, string>();

foreach (var kvp in stringKeyedValues)
{
// TODO: ignore case sensitivity of enums
// Enum consists of LoadScene and Config
if (Enum.TryParse(kvp.Key, true, out WebGlUrlParameter parsedEnum))
{
enumKeyedValues[parsedEnum] = kvp.Value;
}
else
{
// Handle the case where the key cannot be parsed into an enum
Debug.LogWarning($"Key '{kvp.Key}' does not exist in WebGlUrlParameter enum and will be ignored.");
}
}

return enumKeyedValues;
}
}
}
Loading

0 comments on commit 1205fb2

Please sign in to comment.