Resonite · published
Hello everyone!
I've been away at a con, so there haven't been updates. But I now that I'm back, I have a bit of a surprise for you.
My current big project is the new IK system. However I've been struggling with burnout on it for a bit and making almost no progress and needed to focus on some other things.
This gave me some time to think about other things and I got a bit of a brainbulb moment... Instead of making ProtoFlux collections into this huge project in one go... I could do a little bit of it, piece by piece and weave that with other work.
So here's a little bit of collections for ProtoFlux!
This adds a lot of the building blocks - nodes for iterating over them, accessing, adding, removing things in lists and dictionaries. These are generic, so they work with any exposed collection type! The data model collections have been updated so they work through the generic interfaces.
Since we have those nodes now, there's also a few new nodes that output collections, which you can use the same nodes to work with! These should open a lot of new possibilities on what you can do and we can now start adding a lot more nodes that output or consume collections!
Some of the current notable limitations is ability to create & allocate local collections - that will come later and is one of the reasons I decided to split this up into more manageable chunks - being able to work with existing collections or ones produced by nodes should be very useful for now.
There's a lot more to come, some of it might be soon, some of it not, but I hope you enjoy, even though it's not "everything".
Overall I want to shift a lot of features towards handling them in smaller, more manageable chunks, because handling them as huge "let's do everything in one go" issues leads to more burnout.
-----------------------
There's also few other notable things - the bug with duplicating dash components is fixed now by @ProbablePrime! It won't cleanup existing dash yet.
If you don't mind redoing your dash, you can just reset it. Otherwise wait a bit more for automatic cleanup.
There's also bunch of progress towards HTTP requests timing out by @ProbablePrime with some optimizations!
- Added initial set of nodes for working with collections to ProtoFlux (@frooxius, Phyn, <@236963769526386700>, brecert, @jackthefoxotter, gameboycjp, @charlie_san and probably literally everyone else who plays Resonite (this is one of the most upvoted issues), issue #572)
-- Lists and Dictionary type collections are now supported!
-- New iteration nodes: ForEach, ForEachWithIndex, AsyncForEach & AsyncForEachWithIndex
-- Interaction nodes: Add, Contains (element/key), GetA (index/key), Set (index/key) IndexOf, InsertAt, Remove (element/key), RemoveAt, Count, Clear, IsReadOnly, UnpackKeyValuePair
-- More nodes, collection types and interactions will come!
-- There's no ability to allocate local collections yet - this will come later
-- ProtoFlux overload system has been expanded to be able to handle types with multiple generic constraints, so nodes should properly overload to appropriate types
- Added Users node which outputs a collection of all the users currently present in the session
-- Note: This collection is not an indexed list - users do not have inherent index to them
- Added EnumValues node
-- This provides a readonly list of all defined enums of the given type
- Added RaycastAll node
-- This will perform a raycast and return all the hits found along the ray as a read only list
-- You can iterate over the results yourself and do whatever filtering testing you need, rather than relying on the specifics of RaycastOne node
- Added UnpackRaycastHit node
-- This lets you unpack the hit data from the RaycastHit struct returned by RaycastAll
- Added SplitString node (requested by J4, issue #1572)
-- This splits string into an array of substrings using a separator
-- You can optionally trim the split strings and/or remove any empty entries
- Added JoinString node
-- This accepts a collection of strings and joins them together with a separator
- Added UniFesta 2026 Badge (implemented by @ProbablePrime)
- Swapped to SocketsHttpHandler to handle HTTP Requests and tweaked configuration (implemented by @ProbablePrime)
-- Should improve handling of HTTP requests under changing DNS and network conditions
-- Part of work on issue #6386, reported by @the.phil., @gyztormizirath
- Generate inspector fields for dictionary members
-- This does NOT generate UI for editing the dictionaries in the inspector at the moment (similar to arrays)
-- However it allows to reference dictionaries (e.g. with ProtoFlux)
- Updated policy link on Registration to new location (implemented by @ProbablePrime)
- Added .jfif as recognized extension for JPG (requested by @lierofox, issue #6940)
- Merged Chinese (Taiwan) locale update by @meowwei
- Merged Spanish locale update by @rad4ngel_
- Merged Portuguese (Brazil) locale update by HeduardoBits
- Merged German locale update by @muppeq
- Merged Chinese locale update by @modimobeikete, @ninnana.
- Prevent Dash screens from repeatedly adding components on load (reported by @_deltawolf, @jackthefoxotter, djsime1, @nytra, GrayBoltWolf, <@288074994188156928>, Astral-J, issue #594, fixed by @ProbablePrime)
-- In a subsequent update, we'll write an automatic process to clean these up
-- However, if your dash has suffered from this you can Reset your dash to clean these up now and the issue will not reocurr
- Corrected spelling of Carriage Return node (reported by @banane9, issue #4520, fixed by @ProbablePrime)
- Fixed ValueObjectInput being able to be instantiated with invalid datatypes, resulting in exceptions when pulling ProtoFlux input nodes
- Fixed ProtoFlux ValueInput node being considered as usable for structs that do not satisfy unmanaged constraint, resulting in exceptions when pulling input nodes for some types
-- This is due to C# reflection system not honoring the unmanaged constraint when instantiating generic types, requiring manual validation