domingo, 17 de febrero de 2019

Actualización de estado #1

Hoy domingo 17 de febrero de 2019, he subido a github el código base en el que he estado trabajando este fin de semana.


La parte visual del proyecto está hecha con OpenGL en Java mediante la librería LWJGL.
Pese a haber tenido experiencia previa con LWJGL 2, he preferido usar la versión más reciente (3.2) y debo decir que no tiene nada que ver.
Pese a este contratiempo, he ido dando pinceladas durante la semana al motor base. Mi idea es crear una base (que no un framework, ahora esta de moda llamar framework a todo) para que el diseño de la interfaz sea lo más fácil posible, ya que sobre ella debe ir el funcionamiento final y no quiero tener que discutir sobre el sistema de coordenadas cuando ya haya pasado a implementar las últimas funciones del programa.

En rasgos generales cabe destacar que he intentado escribir todo el código en ingles; tengo la mala costumbre de mezclar idiomas todo el rato. lowerCammelCase para todas las variables excepto las constantes o variables globales importantes, esas en mayuscula y SNEAK_CASE.
Esta es la estructura que he seguido:

  • Dot define un punto en el espacio 2D. (sirve para lidiar con el sistema de coordenadas de LWJGL)
  • ElementBase es el padre de todos los objetos que tienen posición, es decir, de todos los elementos y orgánulos.
  • Shape es la estructura básica de una forma. El resto de formas se crean a partir de estas, por ejemplo Shape_Square. Estos si son orgánulos.
  • Texture es una textura, carga imágenes y contiene el ID de textura en OpenGL.
  • Image es el orgánulo que dibuja una textura.
  • Font es una colección de Texturas para dibujar texto.
  • TextLabel es un orgánulo que dibuja texto.
  • TextBox es un orgánulo que permite introducir texto, utiliza un TextLabel.
  • Element es el que contiene los orgánulos. Se maneja con sus propiedades principales Drawable y Dragable, y la lista de orgánulos. Element es abstracto, los elementos reales implementan esta clase.
  • Global contiene las constantes o variables globales a las que se accede en cualquier parte del código.
  • Keyboard y Mouse son dos clases para leer las entradas.
  • SoundPlayer es una clase para reproducir audio.
  • Controller es proceso principal. Se le llama desde el ciclo de ejecución del hilo (creado en Display) y se controla el número de actualizaciones mediante SyncTimer. Controller maneja el dibujado, arrastrado y seleccionado de los elementos. (Estos dos últimos diferenciándose muy poco)


Adjunto un vídeo que muestra un elemento de prueba con las características que he introducido.

Entre semana intentaré publicar un esquema con los elementos reales de la interfaz y para el fin de semana que viene espero poder tener una demo con características más cercanas a la interfaz final.

No hay comentarios:

Publicar un comentario