public OptimizedUnityCoroutine(ScriptRunnerBase runner, string functionBody, params string[] parameters) { UnityCoroutineState = $"{ID}_UNITY_COROUTINE_STATE"; this.ScriptRef = runner.Lua; ScriptRef.Globals[UnityCoroutineState] = true; string nxtV = $"{ID}_NextVals"; StringBuilder sb = new StringBuilder(); //1 based lua indices, ugh for (int i = 1; i < parameters.Length + 1; i++) { sb.Append($"{parameters[i - 1]} = {nxtV}[{i}] "); } string NextParamsStr = sb.ToString(); string funcString = $"function({string.Join(",", parameters)}) while (true) do{Environment.NewLine}{functionBody}{Environment.NewLine}{UnityCoroutineState} = false " + $"local {nxtV} = coroutine.yield() " + $"{NextParamsStr} " + $"end end"; LuaFunc = ScriptRef.LoadFunction(funcString); Coroutine = ScriptRef.CreateCoroutine(LuaFunc); }
public void InitializeRunner(ScriptRunnerBase scriptRunner) { Initialize(scriptRunner.Lua); }