X4UI r1.0b3
Resumen de Cambios
Actualización de la arquitectura interna de renderizado y eventos, introduciendo soporte nativo de Z-Index, interpolaciones basadas en DeltaTime, y gestión segura de recortes OpenGL anidados, además de una gran cantidad de nuevos componentes interactivos.
Arquitectura y Núcleo
- Soporte Z-Index: Implementada la propiedad
layer para componentes, proporcionando un ordenamiento determinista para el renderizado y la propagación de eventos (bubbling).
- Animaciones DeltaTime: Integrada lógica de DeltaTime en todo el framework para lograr animaciones e interpolaciones independientes de los FPS.
- Seguridad de Memoria: Implementado
FontWidthCache con política de limpieza LRU para mitigar fugas de memoria durante el análisis de textos complejos (ej. Markdown).
- Recorte OpenGL Anidado: Implementado
ScissorHelper para gestionar de manera robusta el uso de GL_SCISSOR_TEST en componentes anidados.
- Construcción Fluida: Añadida la clase de utilidad
GuiBuilder que proporciona una API fluida (Fluent API) para facilitar la construcción de interfaces.
- Reactividad: Integrado un sistema de gestión de estado reactivo (
State).
Componentes y Funcionalidades
- Arrastrar y Soltar (Drag & Drop): Añadida capacidad de arrastre nativa a
GuiComponent con límites configurables (DragConstraint.NONE, DragConstraint.PARENT_BOUNDS).
- Tooltips Integrados: Añadido soporte nativo de renderizado de Tooltips en
GuiBaseScreen y GuiBaseContainer mediante setTooltip().
- Diseños FlexWrap: Añadida la funcionalidad
flexWrap a GuiPanel para el ajuste automático y multilínea de elementos en diseños horizontales y verticales.
- Nuevos Componentes:
GuiDropdown para menús desplegables.
GuiImage y GuiSprite para la renderización flexible de texturas.
GuiTextInput para campos de entrada de texto avanzados.
GuiSlot para gestionar inventarios y stacks de ítems dentro del DOM.
GuiSlider y sus variantes (GuiSliderDouble, GuiSliderFloat, GuiSliderInt).
GuiModelRender para soporte de renderizado de entidades 3D e ítems.
GuiVideo para reproducción de vídeo in-game.
Mejoras y Correcciones
- Refactorización de GuiScrollPanel:
- Migración a
ScissorHelper para la resolución adecuada de recortes anidados.
- Implementado descarte de componentes (culling) para omitir la renderización y procesamiento de eventos de elementos fuera del área visible.
- Resueltos los problemas de jerarquía de propagación de eventos, permitiendo que los paneles de scroll anidados funcionen correctamente y de manera independiente.
- Solucionada la fuga de memoria en
GuiBaseContainer causada por la adición duplicada de áreas en jeiRecipeAreas al redimensionar la ventana.
- Refactorizado
GuiMarkdown para utilizar FontWidthCache, mejorando notablemente el rendimiento.
- Estandarizadas las animaciones en
GuiButton, GuiToggle y GuiScrollPanel para escalar con DeltaTime en lugar de ticks en crudo.
- Expuestos los métodos
getGuiLeft() y getGuiTop() en GuiBaseContainer.
- Reestructurada y completada la documentación técnica en el directorio
Docs/ (Disponible en inglés y español).
Changelog Summary
Core rendering and event architecture update, introducing native Z-Index support, DeltaTime-based interpolations, and safe management of nested OpenGL clipping, along with a massive batch of new interactive components.
Architecture & Core
- Z-Index Support: Implemented the
layer property for components, providing deterministic sorting for rendering and event bubbling priorities.
- DeltaTime Animations: Integrated DeltaTime logic throughout the framework for FPS-independent animations and transitions.
- Memory Safety: Implemented
FontWidthCache incorporating an LRU eviction policy to mitigate memory leaks during intensive text parsing tasks (e.g. Markdown rendering).
- Nested OpenGL Clipping: Implemented
ScissorHelper to robustly manage nested GL_SCISSOR_TEST applications.
- Fluent Construction: Added
GuiBuilder utility class providing a fluent API to streamline interface construction.
- Reactivity: Integrated a reactive
State management system.
Components & Features
- Drag & Drop: Added native drag-and-drop capability to
GuiComponent with flexible boundaries (DragConstraint.NONE, DragConstraint.PARENT_BOUNDS).
- Native Tooltips: Added internal Tooltip rendering support to
GuiBaseScreen and GuiBaseContainer via setTooltip().
- FlexWrap Layouts: Added
flexWrap functionality to GuiPanel for automatic multi-line wrapping of elements in horizontal and vertical configurations.
- New Components:
GuiDropdown for standard dropdown menu structures.
GuiImage and GuiSprite components for flexible texture and sprite rendering.
GuiTextInput for advanced text input fields.
GuiSlot component to integrate and manage item stacks and inventories within the DOM.
GuiSlider architecture with specific implementations (GuiSliderDouble, GuiSliderFloat, GuiSliderInt).
GuiModelRender to support 3D entity and item rendering directly inside the user interface.
GuiVideo for in-game video playback support.
Fixes & Improvements
- GuiScrollPanel Refactor:
- Migrated from raw GL calls to
ScissorHelper for proper nested clipping resolution.
- Implemented strict component culling to skip rendering and event processing for elements outside the visible viewport.
- Resolved event bubbling hierarchy issues, enabling nested scroll panels to function correctly independently of parent containers.
- Resolved memory leak in
GuiBaseContainer caused by duplicate instances appending to jeiRecipeAreas upon window resize.
- Refactored
GuiMarkdown to utilize FontWidthCache for significantly improved parsing and rendering performance.
- Standardized animations in
GuiButton, GuiToggle, and GuiScrollPanel to scale consistently with DeltaTime instead of raw ticks.
- Exposed
getGuiLeft() and getGuiTop() within GuiBaseContainer for external utility consumption.
- Restructured and populated the
Docs/ directory with comprehensive technical documentation in English (en-us) and Spanish (es-latam).