2021.9.11.1001 - Importing arbitrary animations from JSON files, tweaks, fixes
Hello everyone! Another relatively small build, we're still focusing on the educational experiences right now, but here are some general goodies and tools that were implemented for this experience.
Notably, you can now import arbitrary animation file from a custom JSON format .animj! This lets you create and bring in arbitrary animation tracks without having to tack them onto some 3D model files and support all the Neos' animation track types too, as well as any Neos-supported primitive datatype (e.g. colors, integers, booleans...). This can be particularly powerful for building experiences, where you can sample these animations with LogiX to drive behaviors.
There's now also View UserNode element, which should improve certain behaviors to work better with the 3rd person or freeform camera modes and other overriden views.
Also there's some more tweaks and few security improvements as well.
[h2]New Features:[/h2]
- Added suport for importing raw animation tracks from a custom ".animj" format
-- This allows creating any animation track type supported by Neos.
-- To learn more about the format and some examples, see this wiki page: https://wiki.neos.com/AnimJ (will be WIP at the time of release)
-- You can sample these animations with LogiX or drive elements with Animator as any other, but the animation tracks do not need to correspond to just Transform (Position, Rotation, Scale) properties, but can be used for any Neos primitive datatype for arbitrary purposes
- Added "View" as UserNode element, allowing it to be used with any Component or LogiX node that uses this
-- This makes "View" a valid target for PositionAtUser (requested by @Hayden, GH #2816)
-- Note that if you try to set user's position/rotation via View, it might not always produce a correct result, because the view can be controlled by external means where user's root position in the world doesn't map to the view
[h2]Tweaks:[/h2]
- Ctrl+F to focus target in freecam can now be used from any camera mode (e.g. first person or third person) rather than only while Freeform camera is active
-- Pressing Alt+F to unfocus will automatically switch to previous camera mode when Freeform camera is activated this way
- Added type castability checks when generating cast nodes, to avoid generating casts that are known to never succeed and prevent confusion (based on report by @Delta, GH #2989 and number of previous reports)
-- Casts are not generated when casting one class to another, if neither is ever assignable to the other
-- Casts are also eliminated when casting class to interface that it doesn't implement
- GrabbableSetterTip now has the option to apply grabbables to the hit object or the object root (requested by @SHFR_H, implemented by @ProbablePrime | Docs | Docs)
-- Object root is the default option to preserve the old behavior
[h2]Security:[/h2]
- Host access now requires requesting access for each individual port to avoid security vulnerabilities like port scanning (based on report by @FRICK/フリック, Moderation Ticket #823623)
-- HTTP and HTTPs ports (80 and 443) do not require specifying port, they'll be both allowed with just the base string. If you only use these ports, you don't need to change anything
-- LogiX nodes have been updated accordingly, allowing you to specify port that you're requesting access to
- Fixed roleCloudVariable being able to assign higher role than the host has (reported by @Raith | Programmer, Moderation Ticket #952355)
- Added guard to prevent errors in stream messages from crashing the whole world and added extra diagnostics (based on report by @Azora Husky, GH #2980)

Notably, you can now import arbitrary animation file from a custom JSON format .animj! This lets you create and bring in arbitrary animation tracks without having to tack them onto some 3D model files and support all the Neos' animation track types too, as well as any Neos-supported primitive datatype (e.g. colors, integers, booleans...). This can be particularly powerful for building experiences, where you can sample these animations with LogiX to drive behaviors.
There's now also View UserNode element, which should improve certain behaviors to work better with the 3rd person or freeform camera modes and other overriden views.
Also there's some more tweaks and few security improvements as well.
[h2]New Features:[/h2]
- Added suport for importing raw animation tracks from a custom ".animj" format
-- This allows creating any animation track type supported by Neos.
-- To learn more about the format and some examples, see this wiki page: https://wiki.neos.com/AnimJ (will be WIP at the time of release)
-- You can sample these animations with LogiX or drive elements with Animator as any other, but the animation tracks do not need to correspond to just Transform (Position, Rotation, Scale) properties, but can be used for any Neos primitive datatype for arbitrary purposes
- Added "View" as UserNode element, allowing it to be used with any Component or LogiX node that uses this
-- This makes "View" a valid target for PositionAtUser (requested by @Hayden, GH #2816)
-- Note that if you try to set user's position/rotation via View, it might not always produce a correct result, because the view can be controlled by external means where user's root position in the world doesn't map to the view
[h2]Tweaks:[/h2]
- Ctrl+F to focus target in freecam can now be used from any camera mode (e.g. first person or third person) rather than only while Freeform camera is active
-- Pressing Alt+F to unfocus will automatically switch to previous camera mode when Freeform camera is activated this way
- Added type castability checks when generating cast nodes, to avoid generating casts that are known to never succeed and prevent confusion (based on report by @Delta, GH #2989 and number of previous reports)
-- Casts are not generated when casting one class to another, if neither is ever assignable to the other
-- Casts are also eliminated when casting class to interface that it doesn't implement
- GrabbableSetterTip now has the option to apply grabbables to the hit object or the object root (requested by @SHFR_H, implemented by @ProbablePrime | Docs | Docs)
-- Object root is the default option to preserve the old behavior
[h2]Security:[/h2]
- Host access now requires requesting access for each individual port to avoid security vulnerabilities like port scanning (based on report by @FRICK/フリック, Moderation Ticket #823623)
-- HTTP and HTTPs ports (80 and 443) do not require specifying port, they'll be both allowed with just the base string. If you only use these ports, you don't need to change anything
-- LogiX nodes have been updated accordingly, allowing you to specify port that you're requesting access to
- Fixed roleCloudVariable being able to assign higher role than the host has (reported by @Raith | Programmer, Moderation Ticket #952355)
- Added guard to prevent errors in stream messages from crashing the whole world and added extra diagnostics (based on report by @Azora Husky, GH #2980)


