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);
        }
Пример #2
0
 public void InitializeRunner(ScriptRunnerBase scriptRunner)
 {
     Initialize(scriptRunner.Lua);
 }