Skip to content

Commit 7b9adb3

Browse files
committed
Context fixes
1 parent e868836 commit 7b9adb3

File tree

9 files changed

+326
-317
lines changed

9 files changed

+326
-317
lines changed

Editor/AirshipComponentEditor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ public override void OnInspectorGUI() {
8787
EditorGUILayout.LabelField("Component Id", binding.GetAirshipComponentId().ToString());
8888
}
8989
EditorGUILayout.EndHorizontal();
90+
91+
EditorGUILayout.BeginHorizontal();
92+
EditorGUILayout.LabelField("Context", binding.context.ToString());
93+
EditorGUILayout.EndHorizontal();
9094
}
9195
#endif
9296

Runtime/Code/Luau/AirshipComponent.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class AirshipComponent : MonoBehaviour {
3333
[FormerlySerializedAs("m_fileFullPath")] [HideInInspector] public string scriptPath;
3434

3535
public IntPtr thread;
36-
[HideInInspector] public LuauContext context = LuauContext.Game;
36+
public LuauContext context = LuauContext.Game;
3737
[HideInInspector] public bool forceContext = false;
3838
[FormerlySerializedAs("m_metadata")] [HideInInspector] public LuauMetadata metadata = new();
3939

@@ -63,6 +63,7 @@ public static AirshipComponent Create(GameObject go, AirshipScript script, LuauC
6363
var awakeData = new LuauScript.AwakeData() {
6464
Script = script,
6565
Context = context,
66+
ForceContext = false,
6667
};
6768
QueuedAwakeData = awakeData;
6869

@@ -95,6 +96,7 @@ public void Init() {
9596
if (QueuedAwakeData != null) {
9697
script = QueuedAwakeData.Script;
9798
context = QueuedAwakeData.Context;
99+
forceContext = QueuedAwakeData.ForceContext;
98100
QueuedAwakeData = null;
99101
}
100102

@@ -124,7 +126,7 @@ public void Init() {
124126
#endif
125127

126128
// Assume protected context for bindings within CoreScene
127-
if (!forceContext && ((gameObject.scene.name is "CoreScene" or "MainMenu") || (SceneManager.GetActiveScene().name is "CoreScene" or "MainMenu")) && ElevateToProtectedWithinCoreScene) {
129+
if (!forceContext && gameObject.scene.name is "CoreScene" or "MainMenu" && ElevateToProtectedWithinCoreScene) {
128130
context = LuauContext.Protected;
129131
}
130132

@@ -265,7 +267,7 @@ private void InitializeAirshipReference() {
265267
var transformInstanceId = ThreadDataManager.GetOrCreateObjectId(transform);
266268
AirshipBehaviourRootV2.LinkComponentToGameObject(this, out var unityInstanceId);
267269

268-
LuauPlugin.LuauPrewarmAirshipComponent(LuauContext.Game, thread, unityInstanceId, _airshipComponentId, transformInstanceId);
270+
LuauPlugin.LuauPrewarmAirshipComponent(context, thread, unityInstanceId, _airshipComponentId, transformInstanceId);
269271
}
270272

271273
public string GetAirshipComponentName() {

Runtime/Code/Luau/LuauCoreCallbacks.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1096,7 +1096,7 @@ private static IntPtr RequireCallback(LuauContext context, IntPtr thread, IntPtr
10961096
// return newBinding.m_thread;
10971097

10981098
try {
1099-
var newScript = LuauScript.Create(obj, fileNameStr, context);
1099+
var newScript = LuauScript.Create(obj, fileNameStr, context, false);
11001100
return newScript.thread;
11011101
} catch (Exception e) {
11021102
Debug.LogException(e);

Runtime/Code/Luau/LuauScript.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class LuauScript : MonoBehaviour {
2424
public AirshipScript script;
2525

2626
public IntPtr thread;
27-
[HideInInspector] public LuauContext context = LuauContext.Game;
27+
public LuauContext context = LuauContext.Game;
2828
[HideInInspector] public bool forceContext = false;
2929

3030
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
@@ -60,19 +60,20 @@ public static AirshipScript LoadAirshipScriptFromPath(string fullFilePath) {
6060
#endif
6161
}
6262

63-
public static LuauScript Create(GameObject go, string scriptPath, LuauContext context) {
63+
public static LuauScript Create(GameObject go, string scriptPath, LuauContext context, bool forceContext) {
6464
var script = LoadAirshipScriptFromPath(scriptPath);
6565
if (script == null) {
6666
throw new Exception($"Failed to load script from file: {scriptPath}");
6767
}
6868

69-
return Create(go, script, context);
69+
return Create(go, script, context, forceContext);
7070
}
7171

72-
public static LuauScript Create(GameObject go, AirshipScript script, LuauContext context) {
72+
public static LuauScript Create(GameObject go, AirshipScript script, LuauContext context, bool forceContext) {
7373
var awakeData = new AwakeData() {
7474
Script = script,
7575
Context = context,
76+
ForceContext = forceContext,
7677
};
7778
QueuedAwakeData = awakeData;
7879

@@ -85,6 +86,7 @@ public static LuauScript Create(GameObject go, AirshipScript script, LuauContext
8586
QueuedAwakeData = null;
8687
luauScript.script = script;
8788
luauScript.context = context;
89+
luauScript.forceContext = forceContext;
8890
}
8991

9092
return luauScript;
@@ -94,11 +96,13 @@ private void Awake() {
9496
if (QueuedAwakeData != null) {
9597
script = QueuedAwakeData.Script;
9698
context = QueuedAwakeData.Context;
99+
forceContext = QueuedAwakeData.ForceContext;
97100
QueuedAwakeData = null;
98101
}
99102

100103
// Assume protected context for bindings within CoreScene
101-
if (!forceContext && ((gameObject.scene.name is "CoreScene" or "MainMenu") || (SceneManager.GetActiveScene().name is "CoreScene" or "MainMenu")) && ElevateToProtectedWithinCoreScene) {
104+
// if (!forceContext && ((gameObject.scene.name is "CoreScene" or "MainMenu") || (SceneManager.GetActiveScene().name is "CoreScene" or "MainMenu")) && ElevateToProtectedWithinCoreScene) {
105+
if (!forceContext && gameObject.scene.name is "CoreScene" or "MainMenu" && ElevateToProtectedWithinCoreScene) {
102106
context = LuauContext.Protected;
103107
}
104108

@@ -182,6 +186,6 @@ public static IntPtr LoadAndExecuteScript(GameObject obj, LuauContext context, L
182186
public class AwakeData {
183187
public AirshipScript Script;
184188
public LuauContext Context;
185-
public bool ForceContext = false;
189+
public bool ForceContext;
186190
}
187191
}

Runtime/Code/Luau/LuauState.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,13 @@ public GameObject GetRequireGameObject() {
104104
coreGo = new GameObject("AirshipCore");
105105
}
106106

107-
_luauCoreModulesFolder = new GameObject("LuauModules");
108-
_luauCoreModulesFolder.transform.SetParent(coreGo.transform);
107+
var modulesFolder = GameObject.Find("LuauModules");
108+
if (modulesFolder == null) {
109+
modulesFolder = new GameObject("LuauModules");
110+
modulesFolder.transform.SetParent(coreGo.transform);
111+
}
112+
113+
_luauCoreModulesFolder = modulesFolder;
109114
}
110115
_luauModulesFolder = new GameObject(Context.ToString());
111116
_luauModulesFolder.transform.SetParent(_luauCoreModulesFolder.transform);

Runtime/Code/Luau/ScriptingEntryPoint.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
using System;
2-
using Luau;
2+
using System.Diagnostics;
33
using UnityEngine;
4-
using UnityEngine.SceneManagement;
5-
using Object = UnityEngine.Object;
4+
using Debug = UnityEngine.Debug;
65

76
namespace Assets.Code.Luau {
87
public class ScriptingEntryPoint : MonoBehaviour {
98
public static bool IsLoaded = false;
10-
public static event Action onScriptBindingRun;
9+
public static event Action OnScriptBindingRun;
1110

1211
public static void InvokeOnLuauStartup() {
13-
onScriptBindingRun?.Invoke();
12+
OnScriptBindingRun?.Invoke();
1413
}
1514

1615
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
@@ -24,11 +23,11 @@ public static void OnLoad() {
2423
private void Awake() {
2524
if (IsLoaded) return;
2625

27-
onScriptBindingRun += StartCoreScripts;
26+
OnScriptBindingRun += StartCoreScripts;
2827
}
2928

3029
private void OnDestroy() {
31-
onScriptBindingRun -= StartCoreScripts;
30+
OnScriptBindingRun -= StartCoreScripts;
3231
}
3332

3433
private void StartCoreScripts() {
@@ -43,16 +42,19 @@ private void StartCoreScripts() {
4342
}
4443

4544
// Main Menu
45+
var stopwatch = Stopwatch.StartNew();
4646
{
4747
var go = new GameObject("MainMenuInGame");
48-
LuauScript.Create(go, MainMenuEntryScript, LuauContext.Protected);
48+
LuauScript.Create(go, MainMenuEntryScript, LuauContext.Protected, true);
4949
}
5050

5151
// Core
5252
{
5353
var go = new GameObject("@Easy/Core");
54-
LuauScript.Create(go, CoreEntryScript, LuauContext.Game);
54+
LuauScript.Create(go, CoreEntryScript, LuauContext.Game, true);
5555
}
56+
stopwatch.Stop();
57+
Debug.Log($"ScriptingEntryPoint elapsed time: {stopwatch.ElapsedMilliseconds}ms");
5658
}
5759
}
5860
}

Runtime/Code/MainMenu/MainMenuSceneManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ private IEnumerator StartPackageLoad(List<AirshipPackage> packages, bool usingBu
231231
// coreLuauBinding.Init();
232232

233233
var coreLuauBindingGo = new GameObject("CoreLuauBinding");
234-
LuauScript.Create(coreLuauBindingGo, "AirshipPackages/@Easy/Core/Shared/MainMenu.ts", LuauContext.Protected);
234+
LuauScript.Create(coreLuauBindingGo, "AirshipPackages/@Easy/Core/Shared/MainMenu.ts", LuauContext.Protected, false);
235235

236236
StartCoroutine(CheckForFailedStartup());
237237
}

0 commit comments

Comments
 (0)