2024.4.15.1407 - New Setting UI, data feed system, tons of additions & fixes

Resonite

Enter a novel digital universe with infinite possibilities. Whether you resonate with people around the world in a casual conversation, playing games and socializing or you riff off each other when creating anything from art to programming complex games, you'll find your place here.

It's finally here! After months of work the very first public version new Settings UI is out! If you go to the Settings page, you'll find brand new snappy Settings UI. But wait, there's more! Most of work so far went into building brand new systems and frameworks (notably the data feeds & data feed views) for designing new UI's, on which the new settings is built. This provides us with very solid foundations to build upon, not just for the setting UI but most other pieces of UI as well in the future! The Setting UI has become the "pilot project" for these new mechanisms, but all future UI's will hugely benefit from this as well. The work on the Settings UI is not yet finished! The goal of this release is to rework all existing settings on the new system and not much has been put into adding brand new settings and functions (there's a few, but not much yet). In the upcoming days, expect lots of the settings to be added (yes including the motion blur toggle!) and new features as we finish this up! This will now go a lot faster! There's lots of other goodies in this, the changelog is big and doesn't even cover everything - I skipped most things that were relevant only to the pre-release builds to keep things shorter - you can check #devlog if you'd like more details. There are some non-setting related additions and fixes as well, for UIX, grab instancers, inspectors, parsing, networking and more! And before we get into the details of this update, I'd like to extend a huge thanks for everyone in the community who has helped us test the prerelease builds and provide feedback! You helped us get this across the finish line for the initial version and get it as polished as it can be for the wider community. All the pre-release contributors are: @mpmxyz, @probableprime, @bluecyro, @troyborg, @kierdran, @nytra, @shininghero, @art0007i, @sveken, @stiefeljackal, @cerealbowlsystem, @dustysprinkles, @ohzee, @jackthefoxotter, @foolishsnowmew, @kulza, @zyro1331, lxw404, @readun, @rellik66, lyoth13, @shrikealvaron, @zyzylian, @electronus, @modernballoonie, @epiceaston197, 5H4D0W-X, @orange3134, @decoybird, @akiram_, @kodufan, Mr-CostlessClaw (and possibly others, poke us if we missed someone, as GitHub makes it hard to get list of contributors! ;_;) But of course this doesn't mean that you can no longer provide feedback! If you have issues or feature requests, feel free to make an issue! Anyway, I hope you all will enjoy this update and what's to come in the upcoming days! I'm really glad this is finally out, which now frees our hands and makes lots of things significantly easier going forward! [h2]New Features:[/h2] - Implemented completely new Settings UI & Setting backend (handled by @frooxius and @ryuvi for UI template side) -- New Setting UI is now handled by a more flexible dynamic system with support for categories and better organization and a number of upcoming features -- The old Setting UI, related components and setting system were completely removed -- All existing settings were reimplemented to this new system -- IMPORTANT: Select legacy settings will automatically convert, but a number of settings will reset and you will need to reconfigure them -- The new setting system is dynamic. As new features and settings are requested, they are automatically registered with the UI -- You can now configure sideways motion between turn, strafe and off independently for both left and right hand -- Photo gesture resolution is now configrable -- Added support for capturing sterescopic finger photos via a setting -- You can configure mouse & gamepad input sensitivity now - Introduced new framework for building flexible & dynamic UI's - data feeds -- This separates concerns between sources of data & interactions & UI's and allows the actual building blocks of UI to be designed in-game -- The sources of data are Data Feeds -- The data from a data feed source can be displayed using Data Feed View components, which will typically use type-based mapping to pick a template -- Each template piece contains an interface, through which the piece of UI is configured and hooked into proper actions -- Data feeds provide interface that supports searching/filtering as well as events for when items are added, updated and removed - data feed views are aware of these and will automatically update the elements - Added SettingsDataFeed -- This provides category based access to all the settings currently registered with the setting system - Added EnumFeed -- This generates data feed items for each entry of an enum of the type E -- It supports following options: DisplayOrder (will list them in order they should be displayed), Distinct (will skip same values with different names) and IncludeObsolete (will include enum values that are marked obsolete) - Added SingleFeedView -- This provides simple single category view of a data feed - Added RootCategoryView -- This provides a view that shows all the root categories at all times and then specific view of currently selected category or subcategory -- This is the view used by the default settings - Added DataFeedItemMapper -- This allows you to define which data feed item types map to which UI templates -- The mapping happens from top to bottom - put more derived types at the top -- This also supports generics - you can specify list of GenericReplacementTypes, which will replace instances of given type with the specific one in the template - this is useful so you can make only a single template that will support a range of types - Added FeedItemInterface and number of derived types (there's too many to list) -- This provides an interface through which a template is configured with the data from the data feed item -- This supports composition as well, by providing ParentContainer reference - a template into which given template will be placed (this also supports nesting) and list of optional NestedItems - all the interfaces will be passed the same data feed item to configure themselves -- Use ChildContainer to specify where the child template will go - Added MoveUpDataFeedCategory which will move data feed view up a category when activated (e.g. button press) - Added OpenDataFeedCategory adds one or more segments to the current path of data feed view - Added SetDataFeedCategory which overrides the current path of data feed view - Added BreadcrumbManager & BreadcrumInterface components -- These provide a generic mechanism for building breadcrumb UI for a path that is specified by a list of strings - Added mechanism to repair facet presets that have been deleted due the bug above -- This is done by the name of the slot. If you made a custom facet in your dash and named it the same, it'll get replaced, sorry. The alternative is leaving people with broken facets. - Added UIGrabInstancer, which allows grab instancing items from the UI elements - Add ExcludedParts to GrabInstancer, which allows excluding parts of hierarchy of the template from being duplicated alongside it - Added ContainerTemplate & ContainerTemplateInstanceRoot to grab instancer components -- This allows you to specify a single container into which the instanced item will be placed -- This container can be shared across multiple grab instancers, allowing for easy reuse - Added HoverDynamicValueSet component (UIX/Interaction), which allows setting a dynamic variable value when UI element is hovered on - Added support for multiple IUIHoverables on a single Slot (based on request by @Ryuvi) - Added NullableSourceDriver which can drive target value of type T and boolean based on a nullable type T? -- E.g. you can drive float and boolean from float? -- This also supports writeback, with caching of the default value - Added support for reordering items in lists through the inspector - Added sync methods to ScrollRect that allow resetting the scroll view - Int/FloatTextEditorParser is now aware of % formatting in StringFormat and will parse the values accordingly (based on report by @shiftyscales) - Added RequireLockInToInteract and RequireInitialPress to Slider (requested by @ryuvi) - Added GrabTransformReset which allows resetting transform when item is grabbed - Added ButtonValueActionTrigger which allows calling sync methods with a single argument of type T - Added support for generic arguments taken from the container class on SyncMethods - Added UnitSystemSwitcher which will switch quantity parser units between normal default and imperial units based on user's current setting - Automatically rescan audio devices when they are changed - Added DictionaryHashSet and PathDictionary collections for internal use - Added DummyEnum datatype for testing and generic placeholder purposes - Improve enum support for cloud variables -- Cloud variables can now specify the underlying storage type to be either string (strongly recommended for long term compatibility) or any integer type (this can be prone to values changing as enums are modified) - Added support for specifying parsed value type for quantity text fields - Added Blank UIX canvas template to the Create New dialog - List label in the inspector is now a grabbable reference to the list - Added limited support for locally stored cloud variables when the user is not signed in -- This makes certain things work (e.g. dash movement & freeform dash in VR, as reported by @Nytra) -- Only variables that are read & updated by the local user will work. If the variable is ready by other users, this does not work, as it is not stored in the cloud - Added additional networking statistics for LNL: -- Average Packet Size -- Average Packet Merge Count (average number of merged packets for each packet that's sent out) -- Total Window Wait Count (how many times did pending packets have to wait for a free spot in the transmission window) - Added direct packet loss statistic (ranging from 0.0 to 1.0) (requested by @aritosuits) -- This can be accessed using UserPacketLoss node - Added UserNetworkStatistic node for retrieving dynamic network statistics -- This node will give you network statistics that might or might not exist depending on the protocol used -- You need to instantiate the correct type for given statistic (e.g. float, long, int...) and provide proper name -- If statistic of given name and type exists, it will be returned, otherwise you will get a null value [h2]Tweaks:[/h2] - Disabled IUIHoverable components will no longer receive hover events [h2]Locale:[/h2] - Merged Chinese locale update by modimobeikete - Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc, @zozokasu - Merged Spanish locale update by Ruzeh3D - Merged Swedish locale update by @_schabo - Merged Korean locale update by @mirpasec - Merged French locale update by @j4.lc - Merged German locale update by @muppeq, @jackthefoxotter [h2]Bugfixes:[/h2] - Fix exceptions due to calling EndHover events on destroyed elements - Fix cloud variable linking not updating properly in some cases when user logs in, resulting in the values being stuck - Add type validation to and ButtonActionTrigger (based on report by @mpmxyz) - Fix race conditions when querying UIX Canvas for intersecting elements resulting in the UI interactions flickering in some cases (based on report by @Cyro, @Decoy) - Ensure that EndHover events get called before any new StartHover events -- This ensures that if any variables are reset with EndHover and immediately set to something else with another hover-able, the reset always happens first - Improve floating number parsing robustness to handle both user's current culture and invariant one -- This fixes user's height with "," decimal separator parsing wrongly (reported by @Muppeq and @Banane9) -- This fixes editor drag and drop not being roundtrip safe on some OS cultures (reported by @Banane9, issue #905) - Fix object duplication failing when some references are excluded from the duplication - Improve floating point number parsing robustness to be able to handle both local culture and invariant inputs (based on feedback by @mpmxyz, issue #1655) - Fix exception when changing online status when user is not logged in - Fix exception logspam when interacting with portal raycasts which result in invalid direction after transfering the raycast through the portal - Fixed VerticalLayout elements within GridLayout cells not being laid out properly, resulting in zero width - Fix inspectors breaking in come cases when component contains implicitly marked delegates (based on internal report by @ryuvi) - Fix DictionaryList not returning lists to the pool on clear resulting in higher GC pressure [h1]Sponsors:[/h1] Also huge thanks to our Sponsors without who this project wouldn't be possible! [h2]Hikari Akimori, BigRedWolfy, Tekno Catron, ThomFox, DoubleStyx, Earthmark, StiefelJackal, noraneko, AdroitTheorist, dandicoot, GabrielSerealia, SiderealScout, Lagos, Conicaw, Creator Jam, Trittyburd, Komdog, Xekri[/h2] [h2]Biggest supporters:[/h2] And our biggest supporters: [b]KierDran, AjaxWolf, brodokk, kazu, Ryn Fluff, Rucio, jason, rhenium, MIRA_sk, 1amnick, JackTheFoxOtter, Sveken, badhaloninja, Rixx, Bashscript, yohoheyho, Derpicidal, MkE, e1ght3, ChevronSeven, OrionWolf, Micro, InnocentThief, Xyphurr, Zyzyl, vizi, Skielsthear, υμβραν, TomTom20!, holmebrian, Major Remp, hinano.aira, emmi_official, raido, Aniki355, Lenrui, bd_, LotusGaming, 䨝, Trev, VRxist[/b] [h2]Prominent supporters:[/h2] zangooseoo, Voldrak, Lucaedr, Ethandarkeco, Jewel, Emma, Alice, aesc, Sani-sensei, Kulza, ScarsTRF, IceCreamPie, Rabbuttz, Conduit, Tacusin, VBunnyGo, shizuku, Shrike, orange, R3C0D3r, Duskitten, SecondaryCell, Sharkmare, sirkitree, bredo, p0c0p0c0, Fuzy Sidwell, xlinka, ingreum, ElizabethDayax, Pyroboy5000, kiantis, Gawdl3y, Tatsu Kimiero, Kodu, MaddMaxKZ, Garfflesnark, Ikani, JackieAlexender, Kal, Readun, -Duff, FRICK, Chayste, toritori, Nordwick, SHFR, Elektrospy, TheBasementNerd, Sykes, Celeste Snow, FoxBox, Kamila_Avali, Hopfel, Spex, Snooper, Rustybot, Hambone, ZoralThePirate, Axel, Glavin, MyriadSubprocess, MirPASEC, foxworth, Zandario, Mera, darbdarb, Lyokanthrope, Delphin Epsilon, KajumaFox, IcyWafflebun, Freyar, skooch, Lydia_Whyte, Azavit, NickiPanna, Caldoric, Flame Soulis, yisto, Wolf Seisenbacher, FluffyTail, FluffySnowKitty, Kronas, Knackrack615, Nargle, SpaceGaytor, Floximo, NVhun7er, shiri yuki, bunnyconda, Rockman Rock, Raxoron, Bisc, Alca, Flute, DingoYabuki, Arion Silverhoof, Joshtiger, Mr.MegaTronic, AmriaLeiah, J4, Renarikun, Jinxtiest, AmethystFox, Plaster, Drison64, Archie, kokoa0429, Shello, bwgi, Feyyore, Wolfox, cj2x, Northern_Lights, Gourry, BlueTera, TriVR, cadyn, dasnull, zayrefox, Jackalgirl, Darius Sergal, Tiky8192, cleafspear, Nier Photon, Arkie, TheCrowDevilsBK, akahanehan, Brie, Natbard, I'm Erin., Salira, twodimensional, Beagle, The Honeybee, Vulpeta, isotach, SnepGryphon, TypicalSerp, Water, Lance the lich, Death Site, Towneh, Nullmatic, Aoutful, Talakai, Balros, BabyMiku, Nuka, KT, SkyDeltion, harumaki021, usaturn, Korbloxity, Lone Wolf, KitKat42, Magglor, Marstruc, LavenderFox2430, Konshu, Ventus The Sox, Sigil, Jolen, Himawari_Sakura, nanotopia, Toastie, icedglitch, Syber, moralevi, SpookyCodex, Jonasmh, Kirin_Sage, Tiny Plume, Magick, rizlysander, OrangeStripyDog, Jam10o, imotchi0112_vr, Zephyr_Cyenta, Daddy Shorki, MaxGates, Drazion, esnya, Nahmii Vuh'uni, Wally0623, Sense, Ultranique, Draky, Sokar, vaporub-, Storm_DPD, Barley Southpaw, shininghero, Bellimora, EclipseZeDragon, r_ptor, SparkzTehDragon, HybridKith, Ekkoklang, Uisce, Phantom_PXL, Half, HotChomper, fulgens, Daon, Lyncis, Sui, X RustySniper X, Aster, Twaininduo, Zero_Dom, Wishdream, JaekSmith, H3BO3, udyne, ZoneBeat, Krazen, Sneaky Kobold, T3K, Darth Malakor, Dexy, Xerroz, WallTack, Afromana, Ecafymtoohs, SordaSuperDude, Lexevo, Corric, R3ido101, naka, raz, DartKitten, ForgottenSin, ChameleonO2, HaVoK, GriffinPhillis, dy, KASIL, Johnny Vulpine, Lurky, Patrick Horn, NovaVoidHowl, Chaiya, ZachTheMicroHybrid, Saphiza, All Caps, EmberTheSergal, SnowKittey, Astro, Comeino, V-343, Aelicien, EdenAngel, MilkTheCow, DanKirsch, SolidusSnake, mzx987, nitedragon, Shaman.EXE, BrandonDucky93, Pile, Klaus, SteelTheWarrior, VictoriaSpe, LunaFolf, Faeith, Corey Hushtail, Nemnomi, Zagroseckt, ToasterFox, laizze, Kaleb Pounds, K2JO3, Waterfox, Tigereye, RJ, Keiko, Ninetales, TheDKG, George.T420, Azzurol, Weslie, Arcadia Wolf, Zoobenoo, Santus_lupinus, LeaChim, emeryrocks, Rocky Husky, LoliGoddess, FluffyDraco, Zenuru, CalebOWolf, RekoRed_, soronorjs, yui, reversed, TiGWolf, Ferret Cyan, BearsTheFox, Ki'tal Stargazer, Project., Preasul, ZeeMakesThingsGo, TSBladez, TehSharkWolf, char1ika1, Faroox, Owens Whitcroft, Etoxxy, JenreyDominos, Omnyx, MintiThorn, ParagonIsaac, PlasmaRaven, XyspX, Gocko, 🐰, NyxxTheWolf, karathkasun, MONIKER, DemiEllesh, PannyMan, Finley, Asriel Dreemurr, MEESTER_SoupCan, Nicholas Bennett, Killa, Anil Jason, ipie4fun, JuiceBoxsVR, WolfSkin, koimono, Player Kode, Supreme Power, Naomi Humin, VibrantPolygons, bug_, SimanSama, SaltyToast, Neosmotic, joshfluffy, sparkle cloud, air_smellbad, Kitarra_Fox ΘΔ, Dr_Dangable, holy_, Mogi Kim, satanasov, GONT_3, rubikr16, Talii, t.o.a.s.t.e.r., laira otter, Skeeva, fukuro, irick, DarkSugar, Parker, Kung Fu Monkey, Zelena, Climber, Red Kitters, Brigantia, Replic, love kitten, Scrydan, lill, Yoko1, Skeeva, holy, Dann., SchurikUwU, BusinessLawyer, AwesomeOpossum, Plinth, CuddleWyvern, DNA, telneko, toritori01, Midnight Myth, navy3001, Zoobie, stabs, torch89, Jamie Canavi, Mahi, kakious And everyone else supporting this project!