En esta semana he estado estudiando como añadir un sistema de scripting en el proyecto. No tenía experiencia previa, por lo que he tenido que leer bastante documentación al respecto.
En Project Football estamos utilizando como lenguaje principal C++, por lo que cuando se hace cualquier cambio es necesario compilar toda la aplicación para poder probar el efecto de ese cambio. Un sistema de scripting permite realizar determinadas tareas de la aplicación (normalmente la lógica del juego) en un lenguaje interpretado, por lo que al cambiar estas partes no es necesario volver a compilar la aplicación y se pueden realizar las pruebas inmediatamente.
Tras mirar varias alternativas y consultar a algunas personas (gracias Roger), finalmente vamos a utilizar Lua como lenguaje de scripting, en combinación con Swig para buscar la integración con C++. Si bien el sistema no es muy complejo en cuanto a número de líneas de código (lo podéis ver en la clase "CLuaManager" del directorio "utils"), sí es algo complicado de entender (sobre todo porque mucha de la documentación disponible en Internet está obsoleta).
Domingo, 9 de diciembre del 2007
Integrando Lua en el proyecto
Referencias
Mejorando la integración de Lua: máquina de estados y CEGUI
Hace un tiempo comentamos cómo estábamos integrando Lua en el proyecto. En aquella ocasión nos centramos en utilizar Swig para acceder desde Lua a funciones en C++, ahora vamos a explicar cómo acceder desde C++ a funciones y datos en Lua. Para esta par
Hace un tiempo comentamos cómo estábamos integrando Lua en el proyecto. En aquella ocasión nos centramos en utilizar Swig para acceder desde Lua a funciones en C++, ahora vamos a explicar cómo acceder desde C++ a funciones y datos en Lua. Para esta par
Weblog: Ikaro Games Blog
Tracked: Mar 01, 15:21
Tracked: Mar 01, 15:21








Esperemos haber acertado en la elección, gracias por la sugerencia
Cuando trate con cosas algo más avanzadas ya lo comentaré por aquí.
Saludos.
Estuve leyendo la doc, pero no saco nada en claro
e = PF.CPfEquipos("6", "1001", "Athletic Bilbao", "ruta/escudo.png");
factoria = PF.CDAOAbstractFactory_getIDAOFactory();
equiposDAO = factoria:getIPfEquiposDAO();
equiposDAO:insert(e);
En el que se crea un objeto de la clase CPfEquipos, se obtiene la instancia de la factoría con la que acceder al DAO de la tabla equipos. Una vez que tengo el DAO puedo realizar cualquier operación que tenga definida sobre la base de datos, en este caso insertar un registro.
Otro ejemplo algo más simple, con el siguiente código accedo a la instancia del Log de la aplicación y llamo a un método suyo:
PF.CLog_getInstance():info("Terminando el script");
En los ejemplos, las clases CLog, CDAOAbstractFactory y la clase que implementa IDAOFactory son Singletons.
src/utils/CLuaManager.h y .cpp
src/utils/CLog.h y .cpp
src/bindings/PF_wrap.cxx
src/tools/swig/create_bindings.sh y los ficheros .i
Para compilar se requiere Lua 5.1. La clase CLog es sólo si quieres usar CLuaManager tal cual, pero puedes substituir las llamadas a CLog por printf's o lo que prefieras. PF_wrap.cxx es el fichero que genera Swig, al ejecutar el script create_bindings.sh, a partir de los ficheros .i.