Dicen que una imagen vale más que mil palabras... Los más avispados de vosotros ya habrán deducido lo que representa la imagen de este post.
Efectivamente, estoy trabajando en un sistema de script para mi nuevo motor 3D. En Solstice llevamos ya unos años con el mismo motor que bueno... funciona pero no es lo más estable ni poderoso que se halla visto :P Este nuevo motor llamado "SolidEngine" usa un sistema de script basado en XML paracargar los datos necesarios para "reproducir" una demo y por supuesto incluye un editor gráfico para manejar facil y graficamente los efectos y la sincronización de la demo.
Sigue a continuación...
No es ninguna novedad usar un sistema de script. Ya lo usaba Haujobb hace ya algunos años y se han visto también implementados en muchos grupos como Farbrausch y también grupos españoles como Stravaganza.
No es que sea mi primer intento de hacer un editor, pero este lo considero como especial ya que llevo largo tiempo rehaciendo el núcleo del motor por completo desde cero y esta vez bien hecho :) Es una de las ventajas de desconectar durante un tiempo de la demoscene y empezar a hacer cosas despacito y con buen pié, sin prisas por sacar una demo a tiempo con efectos a medio temrinar o con bug's sin resolver. Eso hace posible de hacer que día a día valla creciendo el motor, haciendolo a consciencia y basandote en la experiencia que has acumulado tras varios años haciendo efectos en 3D.
Bueno, la idea no es hacer un editor de demos, sino que la demo SEA el editor. Basicamente mi sistema consta de tres grandes partes:
El núcleo
La primera parte, el núcleo, se encarga de lo que es el motor en su gran parte. Como por ejemplo la gestión de la ventana y todas las funciones OpenGL, asi como la carga de texturas, escenas 3D, música etc. Todo esto lo hace de forma modular, es decir, que dispone de todo tipo de objetos independientes (clases) que proporcionan un soporte u otro como por ejemplo un cargador de texturas. Algunos módulos se comunican entre si como por ejemplo el cargador de escenas 3D con el empaquetador de archivos pero por lo general, son partes independientes.
El sistema de script
Es un subsistema basado en XML capaz de manejar todas las funciones del núcleo. Se encarga basicamente de cargar los datos necesarios para la demo y guardarlos en memoria listos para ser usados. Este módulo manejar basicamente las funciones del núcleo para renderizar la demo que hallamos definido en un fichero XML.
Con esta dos primeras partes, tenemos practicamente un sistema completo para hacer demos pero poco practico ya que editar a mano un fichero XML puede llegar a ser tedioso. Justamente de eso, se encarga el siguiente módulo.
La ventana del editor
Este módulo, totalmente independiente de los otros dos, se encarga de manejar las funciones disponibles del gestor de script, que a su vez maneja el núcleo. De esta forma, me ahorro la tediosa tarea de hacer un editor, luego un player, luego vincular los dos... y muchos quebraderos de cabeza. Además de tener siempre una única versión del núcleo ya que el editor siempre manejará el sistema más reciente (fácil de actualizar).
Todo esto esta aún en "semi-funcionamiento" y faltan bastantes retoques y mejoras por hacer, sin embargo para lo que tiene ahora, funciona bastante bien. Me he basado en GDI para dibujar rectangulos que representan efectos. Cada recuadro se puede arrastrar, redimensinonar y borrar totalmente en tiempo real ya que la ventana de render se actualiza al mismo tiempo. Eso hace que sea posible editar digamos "la maquetación" de una demo en pocos segundos. Por supuesto es excelente para hacer una perfecta sincronización entre los diferentes efectos que estemos manejando sin tener que retocar el código en ningún momento.
Me estuve fijando con mucho detalle en el editor de Ithaqua (Stravaganza) que para mi es uno de los mejores que he visto en los ultimos años. De hecho, mi sistema funciona practicamente de la misma forma salvo que no es un editor independiente como el de él.
De momento lo dejo por aqui para quien quiera leer todo este tocho :) No he estrenado este sistema aun con ninguna demo, ni mucho menos esta acabado pero el tema parece que promete.
Continuará...