# Gaia Sky 3.3.0

## Code Refactoring
- the largest change in this version by far is the complete refactoring of the internal model. We have moved from an object-oriented inheritance hierarchy to an entity component system (ECS).
- move render lists to Java collections. 
- flatten object hierarchy by removing some classes, merging their functionality upwards. 
- abstract attitude loading system, remove Gaia class, use heliotropic satellite. 
- add `I18nFormatter` to reformat i18n files. 
- remove old date formatting infrastructure (desktop, html, mobile) in favor of a direct approach. 
- remove useless number formatting infrastructure. 

## Features
- enable minimizing focus info interface.
- adjust debug interface layout. 
- key bindings file versioning. If the key bindings file starts with the line `#v[version]`, that version is compared to the default one and overwritten when necessary. That makes updating key bindings much easier. 
- recompute UI scale at startup when starting with default config file.
- add back-buffer scale API call. 
- add back-buffer scale controls to UI. 
- add repository to `-v` information. 
- rename fisheye post-processing effect and shader to reprojection. Update cubemap projection from fisheye to azimuthal equidistant. 
- add shaders for Lambert equal-area, orthographic and stereographic projections. 
- add re-projection GUI drop-down in preferences window. Add `setReprojectionMode()` scripting API call. 
- include orthographic projection in panorama mode. Includes both hemispheres on the screen, side by side. Can be cycled through with `ctrl`+`shift`+`k`. 
- Include "orthosphere" panorama mode -- orthospherical projection with both hemispheres overlaid to give a view of the celestial sphere from the outside. 
- add new camera mode, orthosphere view, which includes the regular and the cross-eye orthosphere projections. 
- add cross-eye view of the orthographic projection of the celestial sphere 
- add support for KTX and ZKTX textures. 
- change from thread to scheduled task to remove the mode change info pop-up. 
- add mode change pop-up setting to enable or disable showing a pop-up with information when changing modes (panorama, planetarium, stereo, etc.). 
- add GUI button to exit stereo mode. 
- add new object type, 'cosmic locations', to mark the positions of interesting areas or regions. 
- enable scene lights for shape objects when static light is off. 
- new model attribute 'blendMode', which defaults to 'alpha' but can also be set to 'additive' to control the object blending. 
- enable gamepad operation in welcome GUI. 
- add zero-point to gamepad configuration. 
- introduce gamepad support for spacecraft mode, remove 'Gaia scene' camera mode (can be mimicked with focus mode), refactor input controllers, fix default SDL gamepad mappings file. 
- add several new functions to enable setting the camera state from scripts. 
- add time zone to settings. Time zone can be either UTC, or the system default. Update date dialog year limits, fix time component layout. 
- adapt raymarching effects work with ECS model. 
- light glow effect now works with ECS model. 
- expose post-processor properties as settings in configuration file. 
- save configuration when closing dataset manager window. 
- add popup notice when opening the keyframes window if component 'others' is not visible. 
- add full screen bit depth and refresh rate to fully qualify selected full screen modes. 
- improve layout and information of crash window. 
- add notice when there are no datasets. 

## Bug Fixes
- disable tessellation on macOS by default. 
- bug in latest version determination in version checker. 
- remove unnecessary spacing in layout of focus info interface. 
- trajectory size determination algorithm not accurate, breaks when adding points close to the origin. 
- add model size attribute to compute solid angle for model objects more accurately. 
- correctly query graphics device for resolution and apply scaling. 
- toggling SSR and motion blur does not update depth state in some shaders. 
- double definitions in shader libraries. 
- render constellation boundaries as closed polygons in order to avoid artifacts. 
- index errors in keybaord in controller GUI. 
- back-buffer scale is now applied correctly (and only once), works with external view. 
- remove angle from zenith from cubemap renderer in planetarium, use shader-based solution. 
- prevent rendering titles if panorama mode is on. 
- initialize position from coordinates object during initialization phase. 
- land at location never returns. [#674](https://codeberg.org/gaiasky/gaiasky/issues/674) 
- set foucs with `FocusView` object type. [#671](https://codeberg.org/gaiasky/gaiasky/issues/671) 
- provide a correct index mapping for arbitrary attributes with string values. 
- particle size of interactively loaded point cloud datasets. 
- vertically flip UV coordinates of two-faced billboard to correct texture orientation. 
- regression in billboard group rendering. [#663](https://codeberg.org/gaiasky/gaiasky/issues/663) 
- update coordinates in invisible only when present. [#662](https://codeberg.org/gaiasky/gaiasky/issues/662) 
- prevent runtime error due to non-invertible matrix in spacecraft entity. 
- diffuse color contribution calculated incorrectly when nLights > 1 in normal shaders. 
- names in star groups can now be localized, fix focus name in panel. 
- translate strings of filters, shapes, datasets and minimap. [#403](https://codeberg.org/gaiasky/gaiasky/issues/403) 
- moon orbits are recomputed more often. 
- filters crash with instanced star renderers. 
- modal windows made not collapsible by default. 
- hotkey tooltip backgrounds. 
- jump in Pluto's orbit due to deviation between full periods. 
- highlight 'all visible' setting in quad-based star renderers. 
- frame sequence number synchronized, value updated when opening preferences. 
- use view angle instead of view angle apparent in go to object API call. 
- increase number of vertices of minimap shape renderer, fixes crash in heliosphere minimap. 
- typo in Jupiter English translation file, add meshes to data descriptor file. 
- break link in dataset manager if too long. 
- make sure direction and up vectors are orthogonal in camera transition call. 
- increase size star point buffer when needed. 
- null-check satellite attitude before getting quaternion. [#402](https://codeberg.org/gaiasky/gaiasky/issues/402) 
- empty tips may crash Gaia Sky at startup. 
- 'add scene graph object' event missing source object. [#400](https://codeberg.org/gaiasky/gaiasky/issues/400) 
- remove phase of pi radians in default-model orbital elements. 
- regression with libgdx 1.11.0 that caused vertical tooltips. 
- null-check settings in crash reporter. 
- workaround for libgdx backslash bug in asset manager. Fixes [#398](https://codeberg.org/gaiasky/gaiasky/issues/398) 
- hide system cursor correctly with GLFW until libgdx 1.10.1 is released. 
- use minimum width for debug interface to prevent dynamic resizing depending on content. 

## Build System
- move repository from Gitlab to Codeberg.
- update Gitlab references to Codeberg, when possible. Use Codeberg API for version checking. 
- update changelog template repository to Codeberg. 
- remove Gitlab CI file. 
- extract documentation to own project, which is no longer a submodule. 
- upgrade to libgdx 1.11.0 and LWJGL 3.3.1 --- this adds M1 Mac support. 
- add aarch64 JRE to macOS bundle for M1 machines. Move to macOS single bundle archive from deprecated old single bundle. 
- force safe graphics mode on M1 macOS. 
- use default GC (G1) in favor of Shenandoah (only LTS). 
- upgrade gradle wrapper version to 7.5.1. 

## Documentation
- update repository pointers to Codeberg. 
- update in-app mastodon reference from cat to social, as it's in English. 
- remove twitter link, add mastodon hashtag. 
- improve comments on color maps GLSL code. 
- add new panorama orthographic projection to API Javadocs. 
- remove wrong license (leftover from old copy-paste) in fisheye fragment shader code. 
- add contributor.
- typos and so. 

## Style
- mend variable names in about window to follow camel case. 
- fix linter stylistic warnings in GUI and interfaces.