Rosakasa
Elixir

Rosakasa

Motor de juegos 3D minimalista para el sistema de entretenimiento Lys. (Resulta un tanto alucinatorio, ya que la realidad se define en el lado del servidor)

GitHub|

Motor de framebuffer Skeleton C con un cartucho de demostración y un host SDL2 para PC.

Este proyecto está pensado para ejecutarse en hardware ESP32 en el futuro. El actual host para PC
existe como entorno de desarrollo nativo para probar el motor de framebuffer y
el cartucho de demostración antes de su integración en sistemas embebidos.

rosakasa_core también está vinculado al
proyecto Lys Entertainment System,
que se encuentra en un repositorio independiente.

Estructura

include/rosakasa/display/   API pública de framebuffer/visualización
demo/ Punto de entrada para la configuración y actualización del cartucho de demostración
demo/src/ Ayudas de renderizado y fuentes del cartucho de demostración
host/pc/ Ejecutable para PC que conecta el motor con el cartucho de demostración
src/engine/ Ciclo de vida del motor, paquetes HTTP/WebSocket y backend de visualización SDL

CMake recoge automáticamente los códigos fuente del cartucho de demostración que se encuentran en demo/src/.

PC nativo

make build
make run

Si SDL2 no está instalado localmente, CMake descarga SDL2 con FetchContent de forma predeterminada.

Configuración del motor

rosakasa_engine gestiona la configuración de los paquetes a través de RosakasaEngineConfig.
Los paquetes HTTP y WebSocket están presentes, pero desactivados de forma predeterminada hasta que se conecte un
backend integrado o de PC:

RosakasaEngineConfig config = rosakasa_engine_default_config();

config.websocket.enabled = true;
config.websocket.host = "192.168.1.10";
config.websocket.path = "/socket";
config.websocket.port = 80;
config.websocket.use_tls = false;
config.websocket.send = platform_websocket_send;
config.websocket.user_data = platform_websocket;

rosakasa_engine_create_with_config(&config, &engine);

La API de envío orientada al motor es independiente del backend:

RosakasaWebSocket *websocket = rosakasa_engine_websocket(engine);

rosakasa_websocket_send_text(websocket, "{\"type\":\"ping\"}");

La función de devolución de llamada send configurada se encarga del transporte real en la plataforma
y de la escritura de tramas WebSocket. En un PC, puede basarse en una biblioteca WebSocket nativa;
en un ESP32, puede basarse en el cliente WebSocket de ESP-IDF.

El host de PC incluye un backend básico ws://. Actívalo mediante variables de entorno
antes de ejecutarlo:

ROSAKASA_WS_HOST=127.0.0.1 ROSAKASA_WS_PORT=4000 ROSAKASA_WS_PATH=/socket make run

ROSAKASA_WS_TLS=1 está reservado para wss://, pero el backend del PC aún no es compatible con
TLS.

Demostración de dibujo

La demostración cuenta con una abstracción de framebuffer local:

typedef struct {
    uint8_t *pixels;
    int width;
    int height;
    int pitch_bytes;
} Framebuffer;

Las funciones auxiliares de dibujo aceptan un Framebuffer *, por lo que en los puntos de llamada no es necesario repetir las dimensiones de la pantalla:

draw_line(&demo_framebuffer, (Point){20, 20}, (Point){220, 220}, 220);
draw_square(&demo_framebuffer, center, length, 255);

Las coordenadas de la pantalla comienzan en la esquina superior izquierda:

(0, 0) x aumenta ->
  |
  v
y aumenta

Para el framebuffer predeterminado de 240x240, el centro de la pantalla es:

Point screen_center = {
    demo_framebuffer.width / 2,
    demo_framebuffer.height / 2,
};

draw_square considera su argumento Point como el centro del cuadrado.