Beta 2024.7.11.1293 is a Resonite version released on 2024/07/11.
The following notes were sent by Frooxius:
- The new type management system is now done and out! This is a major rework of how Resonite (FrooxEngine) handles types, improving compatibility and security.
- This is also first major task completed for our performance optimizations - while this doesn't help with performance itself, it lays important groundwork for it. The next step will be moving the headless to modern .NET runtime, which might be relatively simple at this point, since this was a major blocker.
- I'd also like to give big thanks to everyone who helped test this and get this polished before public release: @bredo, @epicEaston197, @Modern, @Whip, @Zyro, @Cyro, @Jax, @mpmxyz, @Delta, @Ari, @Stiefel, @ohzee
- Also since I forgot this in a rush yesterday (sorry ;_;), there's also big thanks to people who helped to test the LNL Windows Size pre-release as well: @ohzee, @bredo and @Delta (and everyone who joined the BoTC game to help test), as well as @Rucio, @Stiefel, @Stella, @Sveken, @Banane9, @Jack, iamgreaser, @Delta, PJB3005, @Charizmare in issue #1324 from which the work on dynamic LNL window size stemmed based on their testing data.
New Features:
- Redesigned & reworked type serialization & negotiation - introducing a new "Type Management" system (issue #2264)
- The process of encoding & decoding datatypes, both on network and for persistence, is now fully controlled by our code, rather than relying on .NET
- Framework methods
- This is major step towards moving Resonite & FrooxEngine to modern .NET runtime for performance optimizations, allowing the modern runtime to load existing content and communicate with clients on the old while we transition
- This also improves security by restricting which datatypes can be introduced into the data model - specifically marked types can be introduced (e.g. this fixes headless crashes when creating fields of datatypes only found in the graphical client, but not headless)
- Generic types are handled recursively - both the generic definition and all the generic arguments need to be allowed data model types to be allowed in the data model
- Compatibility between sessions is now computed automatically, which fixes cases where human error (meaning I forget to mark the builds as incompatible) leads to crashes when incompatible builds try to interact (Note: There's still some additional validation that needs to be added)
- When saving items, datatypes are now encoded more efficiently into a table, rather than duplicated, speeding up saving/loading process and reducing the file size
- This also simplifies maintaining backward compatibility with content, providing more powerful mechanisms to indicate relocated or restructured types
- Compatibility is now computed on per-session basis. Each session determines which assemblies (and which versions) it loads. This allows plugins to be loaded without breaking compatibility with vanilla sessions. Note: There's currently no UI for picking which plugins will be available in the session, this will be added later
- Note: Plugins now need to be tagged with DataModelAssembly attribute to be scanned for types
- IMPORTANT: Anything you save with this build will not be able to be loaded in older builds.
- If you find any broken content that doesn't load properly, DO NOT RE-SAVE it (copies are okay) and make a report! We'll have a look asap.
- Nice type parser robustness has been significantly improved (e.g. when specifying type fields or generic arguments)
- It now scans all types allowed in the session and allows ambigious matching - you don't need to specify namespace for any types. However if there are name collisions, this might give you the wrong type
- Generic & nested types are fully supported in any combination and with any depth
- Nice type formatting robustness was also significantly improved
- Generics, nested types, nullables, arrays and any combinations of these will be properly formatted now
- Added encoding/decoding for quantity types, allowing them to be used as values in the data model (based on report by @Delta, @Ari and @Stiefel, issue #2527)
- Added void type alias when parsing types
- Added Wavelength Color nodes that provide a colorX value corresponding to given wavelength of light (requested by @ShadowX, issue #2406, implemented by @Ryuvi and @Cyro)
- The algorithm implemented to compute the color is based on https://www.baeldung.com/cs/rgb-color-light-frequency#2-cie-color-matching
- Added Factorial nodes (requested by @Fukuro, issue #1688, implemented by @Cyro)
- Variants that output float & double are provided
- Trying to compute factorial for negative values will produce NaN
- Added -NeverSaveSettings and -NeverSaveDash launch arguments to prevent settings/dash from being saved on the build
- This is particularly useful for testing purposes to not end up corrupting / breaking these
Locale:
- Merged French locale update by @Jae “awa” J4
- Merged Korean locale update by @MirPASEC