2020.6.2.95 - Laser item rotation additions, new grid space, many tweaks fixes
More pre-requisite building pieces for the Facets, Containers and Workspaces in this build, such us hidden layer, nested canvas extension and canvas interaction system rework (should behave the same, but opens new possibilities under the hood, watch out for any new interaction quirks/bugs). Also a bunch of other additions, tweaks and bugfixes!
The wrist-twist held item rotation returns, now as proper feature! You can also now easily switch to unconstrained rotation mode. Nullable types are easier to instantiate now. The GridSpace template has been completely redesigned by @Coffee | Programmer to look better and more modern. A bunch of LogiX nodes were added as well.
[h2]New Features:[/h2]
- Added "Hidden Layer" component under Rendering, which will hide any renderers under its hiearchy, unless they're part of selective render list on a camera
- Added "Get Active Locomotion Module" LogiX node, which returns the currently active locomotion module on given user (requested by @Hayden (PolyLogiX - ZyroDesign))
- Added support for nullable types when instantiating generic components using type aliases (based on feedback by @Dante)
-- This lets you type types like "float?" or "float3?" or "int?" and will also display those types as such in the inspector and other places
- Redesigned the UIX interaction mechanism, so elements can freely pass interaction and then later accept it, without having to be refocused (this provides significantly higher flexibility for implementing context-specific interactions)
- Extended the NestedCanvas system, so events that are not processed by the nested canvas will now propagate upwards in the hiearchy in the parent canvas (this makes it behave more closesly as if it was just another part of the same canvas)
- Added ability to switch laser grabbing to unconstrained rotation by double pressing the trigger (double pressing again switches it back)
- Implemented wrist twist rotation rotating objects held by the laser (requested by @Turk, @sirkitree, @Shifty | Quality Control Lead and others)
- Reworked the "Gridspace" world template (implemented by @Coffee | Programmer)
[h2]Tweaks:[/h2]
- Added reference cleanup to UserRoot on destroy/dispose, to aid the GC and avoid potential memory leaks
- Added "Ignore Touches From Behind" to UIX canvases (default on), which will filter any interactions from behind of the canvas
-- This fixes inspectors and other UI's being interactable from the back of the panel (reported by @PeterTheThinker through @Shifty | Quality Control Lead)
- Tweaked interaction laser priority mechanics, so context menu opened by world interactions (e.g. click to equip avatar or enter world anchor) is preferred hit
-- This fixes scenarios where user can't click to enter the avatar anchor due to the laser being blocked by a collider
- Tweaked the bone binding sorting, trimming and normalizing behavior to avoid rejecting bone bindings that have a single binding with a really low weight
-- This fixes stray "spike" vertices on some rigged models (e.g. example provided by @Runi)
- Play One Shot will now be cleaned up by the user who fired it, fixing scenarios where the the sounds don't clean up when the host isn't present (reported by @Rue Shejn | Artist 3D)
- FriendLink component now also works with button components (UIX, physical button...), rather than being just standalone clickable element (requested by @Vigilabo)
- Changed Full Body Calibrator and Avatar Creator icons (based on feedback from @Shifty | Quality Control Lead and @0utsider - Programmer. Implemented by @Coffee | Programmer)
- Upgraded to Unity 2019.3.15f1 (from 2019.3.14f1)
- Changed the default world save copy permission to "Only Onwers" from "Only When Public" (suggested by @ProbablePrime)
-- This improves savety, as by default any published worlds can only be saved if the creator explicitly choses to
-- Existing instances of worlds are not affected by this change, only new ones. If you don't want people to be able to save copies of your published worlds, please change this setting
[h2]Bugfixes:[/h2]
- Added infinite recursion guard to TooltipMultiplexer to avoid crashes when the tooltip multiplexer references iteself (based on report by @Kal and @Tatsu Kimiero)
- Fixed crash due to infinite recursion with nested canvases when a canvas is nested into itself (reported by @Ardes)
- Fixed cleared out Tweens still updating the value for 1 frame when they're destroyed, causing random value jumps in some cases
- Fixed laser-held item rotation not being properly aligned with the upwards axis when the user is rotated
- Fixed type name "beautification" not handling nested types under generic types properly, throwing an exception
-- This fixes the user getting respawned when pulling inspector for such types (e.g. UserValueOverride items, reported by @Ardes)

The wrist-twist held item rotation returns, now as proper feature! You can also now easily switch to unconstrained rotation mode. Nullable types are easier to instantiate now. The GridSpace template has been completely redesigned by @Coffee | Programmer to look better and more modern. A bunch of LogiX nodes were added as well.
[h2]New Features:[/h2]
- Added "Hidden Layer" component under Rendering, which will hide any renderers under its hiearchy, unless they're part of selective render list on a camera
- Added "Get Active Locomotion Module" LogiX node, which returns the currently active locomotion module on given user (requested by @Hayden (PolyLogiX - ZyroDesign))
- Added support for nullable types when instantiating generic components using type aliases (based on feedback by @Dante)
-- This lets you type types like "float?" or "float3?" or "int?" and will also display those types as such in the inspector and other places
- Redesigned the UIX interaction mechanism, so elements can freely pass interaction and then later accept it, without having to be refocused (this provides significantly higher flexibility for implementing context-specific interactions)
- Extended the NestedCanvas system, so events that are not processed by the nested canvas will now propagate upwards in the hiearchy in the parent canvas (this makes it behave more closesly as if it was just another part of the same canvas)
- Added ability to switch laser grabbing to unconstrained rotation by double pressing the trigger (double pressing again switches it back)
- Implemented wrist twist rotation rotating objects held by the laser (requested by @Turk, @sirkitree, @Shifty | Quality Control Lead and others)
- Reworked the "Gridspace" world template (implemented by @Coffee | Programmer)
[h2]Tweaks:[/h2]
- Added reference cleanup to UserRoot on destroy/dispose, to aid the GC and avoid potential memory leaks
- Added "Ignore Touches From Behind" to UIX canvases (default on), which will filter any interactions from behind of the canvas
-- This fixes inspectors and other UI's being interactable from the back of the panel (reported by @PeterTheThinker through @Shifty | Quality Control Lead)
- Tweaked interaction laser priority mechanics, so context menu opened by world interactions (e.g. click to equip avatar or enter world anchor) is preferred hit
-- This fixes scenarios where user can't click to enter the avatar anchor due to the laser being blocked by a collider
- Tweaked the bone binding sorting, trimming and normalizing behavior to avoid rejecting bone bindings that have a single binding with a really low weight
-- This fixes stray "spike" vertices on some rigged models (e.g. example provided by @Runi)
- Play One Shot will now be cleaned up by the user who fired it, fixing scenarios where the the sounds don't clean up when the host isn't present (reported by @Rue Shejn | Artist 3D)
- FriendLink component now also works with button components (UIX, physical button...), rather than being just standalone clickable element (requested by @Vigilabo)
- Changed Full Body Calibrator and Avatar Creator icons (based on feedback from @Shifty | Quality Control Lead and @0utsider - Programmer. Implemented by @Coffee | Programmer)
- Upgraded to Unity 2019.3.15f1 (from 2019.3.14f1)
- Changed the default world save copy permission to "Only Onwers" from "Only When Public" (suggested by @ProbablePrime)
-- This improves savety, as by default any published worlds can only be saved if the creator explicitly choses to
-- Existing instances of worlds are not affected by this change, only new ones. If you don't want people to be able to save copies of your published worlds, please change this setting
[h2]Bugfixes:[/h2]
- Added infinite recursion guard to TooltipMultiplexer to avoid crashes when the tooltip multiplexer references iteself (based on report by @Kal and @Tatsu Kimiero)
- Fixed crash due to infinite recursion with nested canvases when a canvas is nested into itself (reported by @Ardes)
- Fixed cleared out Tweens still updating the value for 1 frame when they're destroyed, causing random value jumps in some cases
- Fixed laser-held item rotation not being properly aligned with the upwards axis when the user is rotated
- Fixed type name "beautification" not handling nested types under generic types properly, throwing an exception
-- This fixes the user getting respawned when pulling inspector for such types (e.g. UserValueOverride items, reported by @Ardes)


