script juegos c# dynamic lua scripting-language embedded-script

c# - script - juegos en html



Lua scripting línea por línea (2)

Me gustaría implementar que obtenga la línea actual que se está ejecutando (como en Visual Studio) y resaltarla.

No hagas esto alimentando a Lua el guión una línea a la vez. Ejecute todo el script y deje que Lua le notifique cuando la ejecución cambie a una nueva línea, a través de un enlace de depuración:

Programación en Lua: Hooks
Lua manual: debug.sethook

Añadí Lua scripting a mi aplicación C # utilizando la librería DynamicLua y funciona muy bien. Me gustaría implementar que obtenga la línea actual que se está ejecutando (como en Visual Studio) y resaltarla.

Actualmente estoy haciendo esto:

public static void RunLua(string LuaToExecute) { dynamic lua = new DynamicLua.DynamicLua(); string[] lua_s_split = LuaToExecute.Split(''/n''); int counter = 0; foreach (string line in lua_s_split) { // highlight current line in editor HighlightLine(counter + 1); //execute current line lua(line); counter++; } }

Esto funciona muy bien con mi código Lua como

move(20, 19) sleep(1000) move(5, 19)

pero no puedo ejecutar solo declaraciones de una línea. Al igual que mi función de límite move() . Pero también me gustaría utilizar declaraciones de línea múltiple como funciones y bucles. Si el editor de texto contiene:

function test() return "Hallo Welt" end

El lua(line) generará una excepción porque solo se pasa la function test() la primera línea function test() y el intérprete no cuenta con la instrucción final.

¿Que puedo hacer? ¿Debo verificar si la línea comienza con una función, mientras ... comando y luego escanear bloques finales y agregarlo a una cadena para que pueda ejecutar y resaltar esta declaración de varias líneas al mismo tiempo? ¿Sería esto posible? ¿Cómo lo haría?

Por favor ayuda.


[EDITAR] En el momento de esta respuesta, no conocía el analizador LUA mencionado en la respuesta aceptada. Estoy de acuerdo con ese póster de que debes usar librerías de análisis oficiales siempre que sea posible en lugar de desplegar las tuyas propias. Lo que sigue responde la pregunta original, pero no debe verse como la respuesta final. Por favor, vea la respuesta aceptada para el método correcto para manejar este problema. [/ EDITAR]

Lo está llamando explícitamente para analizar la línea de código / ejecutar el LUA.

Si tiene una función multilínea, asegúrese de pasar todo antes de llamar al bloque de ejecución.

var myCommand = new StringBuilder() ... myCommand.Append(line) ... foreach (string line in lua_s_split) { // highlight current line in editor HighlightLine(counter + 1); //execute current line If(NeedsToExecute(istrue)) { lua(myCommand.ToString()); counter++; } else{myCommand.appendline(line) }