Browse Source

add: implement LuaThreadAssetExtensions for executing Lua assets

Akeit0 5 months ago
parent
commit
c49122d48d

+ 48 - 0
src/Lua.Unity/Assets/Lua.Unity/Runtime/LuaThreadAssetExtensions.cs

@@ -0,0 +1,48 @@
+using Lua.Runtime;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Lua.Unity
+{
+    public static class LuaThreadAssetExtensions
+    {
+        public static ValueTask<LuaValue[]> ExecuteAsync(this LuaThreadAccess access, LuaAssetBase luaAssetBase, string name, CancellationToken cancellationToken = default)
+        {
+            if (luaAssetBase == null)
+            {
+                throw new ArgumentNullException(nameof(luaAssetBase));
+            }
+
+            var module = luaAssetBase.GetModule(name);
+            var closure = module.Type == LuaModuleType.Bytes
+                ? access.State.Load(module.ReadBytes(), module.Name)
+                : access.State.Load(module.ReadText(), module.Name);
+            return access.ExecuteAsync(closure, cancellationToken);
+        }
+
+        public static ValueTask<int> ExecuteAsync(this LuaThreadAccess access, LuaAssetBase luaAssetBase, string name, Memory<LuaValue> buffer, CancellationToken cancellationToken = default)
+        {
+            if (luaAssetBase == null)
+            {
+                throw new ArgumentNullException(nameof(luaAssetBase));
+            }
+
+            var module = luaAssetBase.GetModule(name);
+            var closure = module.Type == LuaModuleType.Bytes
+                ? access.State.Load(module.ReadBytes(), module.Name)
+                : access.State.Load(module.ReadText(), module.Name);
+            return access.ExecuteAsync(closure, buffer, cancellationToken);
+        }
+
+        public static ValueTask<LuaValue[]> ExecuteAsync(this LuaState state, LuaAssetBase luaAssetBase, string name, CancellationToken cancellationToken = default)
+        {
+            return state.RootAccess.ExecuteAsync(luaAssetBase, name, cancellationToken);
+        }
+
+        public static ValueTask<int> ExecuteAsync(this LuaState state, LuaAssetBase luaAssetBase, string name, Memory<LuaValue> buffer, CancellationToken cancellationToken = default)
+        {
+            return state.RootAccess.ExecuteAsync(luaAssetBase, name, buffer, cancellationToken);
+        }
+    }
+}

+ 3 - 0
src/Lua.Unity/Assets/Lua.Unity/Runtime/LuaThreadAssetExtensions.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f82c28987dc44385a582e3eb37501ee8
+timeCreated: 1750856924