Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Lord Trancos 2 en 17 de Julio de 2005, 06:07:09 PM

Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 17 de Julio de 2005, 06:07:09 PM
 Digamos que en una aplicacion en C (o lo que sea), tengo un "enorme" array de (digamos) 5000 enteros de 32 bits.

Y desde un script de lua quiero leer simplemente uno (o unos pocos) de esos valores (digamos el 3241, por ejemplo).

La única forma que conozco de pasar valores de C (o lo que sea) a LUA es mediante tablas... pero meter una tabla con los 5000 enteros me parece muy cutre. Y no quiero crear una tabla y llenar "a cañon" los 3 o 4 valores que me interesan, puesto que es el script y no el programa, el que debe de decir que valor se debe de leer.

No se si me explico...  :rolleyes:

Pues bien,... ¿alguien sabe como se hace?

Soy novatillo en LUA y no acabo de ver la forma de hacerlo...  (nooo)  
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: vincent en 17 de Julio de 2005, 06:28:54 PM
 Para pasar un numero de C a LUA:
lua_pushnumber(L, m_iNumber);

Para leer un número que ha pasado LUA a C:
int iL = lua_tonumber(L, 1);
Para leer un string que ha pasado LUA a C:

char* name;
name = (char*) lua_tostring(L, 1);


Espero que te sirva esto! (pq mucho más no sé... :P )
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 17 de Julio de 2005, 11:32:54 PM
Cita de: "vincent"Para pasar un numero de C a LUA:
lua_pushnumber(L, m_iNumber);
Efectivamente,... esto es lo que andaba buscando... muchas gracias  (uoh)  
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: vincent en 18 de Julio de 2005, 08:26:29 AM
 De ná!

Podrias explicar tu como va el tema de las tablas? Es que me gustaria pasarle a LUA una estructura y me gustaria hacerlo de golpe, no con n pushnumbers...

Merci!
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 18 de Julio de 2005, 12:21:42 PM
Cita de: "vincent"De ná!

Podrias explicar tu como va el tema de las tablas? Es que me gustaria pasarle a LUA una estructura y me gustaria hacerlo de golpe, no con n pushnumbers...

Merci!
Lo de las tablas aprendi ha hacerlo gracias al tutorial (donde pone C API al final de la página):
http://lua-users.org/wiki/TutorialDirectory
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: vincent en 18 de Julio de 2005, 04:15:45 PM
 También he encontrado este pdf por si te sirve de algo.... http://www.vjuegos.org/modules/Tutoriales/...gracionCLua.pdf
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 25 de Julio de 2005, 10:49:07 AM
 Gracias, esta bastante majo el .pdf

Me esta gustando esto.... ya tengo medio juego listo para tirar de scripts LUA  (ole)  
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: MChiz en 29 de Julio de 2005, 01:18:43 PM
 Holaps!

Yo sinceramente te recomiendo que utilices luabind. Es lento de compilar pero va de puta madre.
Quizás sea matar moscas a cañonazos, o quizás no...

talogo!

EDIT: Ahm! Hay un link muy interesante de Lua: PIL
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 29 de Julio de 2005, 03:22:48 PM
 Gracias. Interesantes ambos links.

Del luabind, creo que por ahora paso, ya tengo gran parte del juego funcionando a base de scripts y me da perro cambiarlo. Ademas, uso delphi y no se si hay cabeceras de luabind para delphi.
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: FANatiko en 04 de Agosto de 2005, 12:49:41 AM
 Yo utilizo LuaBind en el PFC y como dice MChiz va de puta madre. Eso si, los templates son un peligro porque a la que empiezas a exportar muchas cosas puedes llegar al limite maximo del Visual Studio.  

Si alguien se anima, la idea es tener claro que exportar y colocar el codigo de bind, que es el que genera los templates, en un lugar separado para que al recompilar no se tenga que recompilar mucho, que como tambien dice MChiz es algo lento.

Sobre tu pregunta, quizas una forma mas practica de pasar numerillos, seria que exportases a lua una funcion get_from_array que le pasas el indice y te devuelve el numero.

Mas o menos se haria asi (igual estoy redundando en algo que ya sabes, pero asi es como lo haria yo):


int get_from_array( lua_State * pLuaState )
{
    int index=(int) lua_tonumber( pLuaState, 1); // leemos el primer parametro (se podria comprobar que fuera un numero con lua_isnumber

    int numero;
    /* codigo para acceder a tu super array */
   
   // los parametros se envian por la pila de Lua
   lua_pushNumber(pLuaState, numero);

    return 1; // devolvemos 1 resultado
}



Luego para poder acceder desde Lua harias ...


lua_register ( pLuaState, "get_x", get_from_array);


El problema de esto es que a) es un poco C hack para mi gusto y B) si usas objetos tienes que pasar parametros para identificar la instancia, el metodo que quieres ejecutar, etc. por eso mejor usar LuaBind para esos casos, ya que te automatiza bastante el proceso.

Sobre LuaBind, creo que no hay la cabecera para Delphi, ademas al ser una libreria basada en templates seria dificil de utilizar en Delphi, no es una cosa que se pueda enchufar como la DLL de Lua.
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: vicho en 04 de Agosto de 2005, 01:04:41 PM
 ese tutorial de lua lo escribio un amigo mio, (participa aqui tambien). actualmente estamos usando lua para controlar datos de los escenarios, como posiciones de objetos y un gran etc. es bastante bueno ;)

para que lo estan usando ustedes?
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: Lord Trancos 2 en 04 de Agosto de 2005, 01:59:45 PM
 vicho, dile a tu amigo que el tuto mola  (ole)

Yo estoy usando lua actualmente para definir los ataques, las conversaciones con NPCs, y el sistema de inventario/tienda del RPG que estoy haciendo. Funciona a las mil perlas y me estoy limitando a mejorarlo y ampliarlo. Actualmente sin tocar el ejecutable puedo hacer medio juego solo a base de tocar/crear scripts.

Para los mapas todavia uso un cutre-sistema ""script"" hecho por mi que me resulta mas comodo que usar lua por diversos motivos.
Título: Lua - Como Pasar Datos Sin Usar Tablas
Publicado por: herman en 05 de Agosto de 2005, 09:07:51 AM
  :wub: