Can you guys not deprecate BreakJoints, there’s no suitable alternative to it (breaking all constraints or legacy joins)
Fixed an issue that prevented dragging dynamic thumbstick over GuiButtons
Also, what is this
Added the property RTLTextsupport in StarterGui to enable or disable the support for right-to-left or bidirectional text. By default, the property is disabled.
Did someone mess with the function thingy called “IsA”? It was broken in all my games for models. If you type IsA(“Model”) over some things it returns true even though it isn’t a model.
Yes, tools were changed recently to inherit models. You should just check the class name instead.
Expected behavior change for Tools:
If you’re seeing incorrect behavior for other Instance types please let us know.
Arabic and some other written languages are actually written from right-to-left rather than left-to-right like English text is. Properly localizing your game to these languages with no help from the engine is quite an undertaking. Most UI systems, soon to include Roblox, offer some affordances to make localizing to these languages less of a pain.
ListObjectsAsync has a new optional parameter called “excludeDeleted” which if enabled, will hide any deleted objects from being returned.
It appears a slight error was made here, went searching for a bit and found that this was referring to the ListKeysAsync function of ‘DataStore’, ListObjectsAsync is not a valid API member
UnionAsync, NegateAsync, but what is this?
probably something like this
(kept geometry is blue)
@JcOnRblx is right. You can see it in action in an example by @Maximum_ADHD https://twitter.com/MaximumADHD/status/1626002378162860032
That is really interesting! Honestly just mentioning “inversed negation” would’ve made me understand but seeing it implemented is awesome. What’s the keybind for it?
for i, v in pairs(Character:GetDescendants()) do if v:IsA("Weld") then -- and other classes v:Destroy() end end
for _, Object in Character:GetDescendants() do if Object:IsA("Weld") then Object:Destroy() end end
Generalized iteration exists
for _, Object in Character:GetDescendants() do if Object:IsA("JointInstance") then Object:Destroy() end end
So you dont have to add each individual class
(cc @Judgy_Oreo @Vundeq)
Do I have to explain why
BreakJoints is obviously faster than iterating over possibly hundreds of instances.
Behind the curtain the code is going to be the same, its only slightly more convenient than writing a module for your projects that can contain custom functions for your own desired use cases (which you should be doing), some API is bloat, and some is helpful, whether or not breakjoints is bloat is the discussion we should be having here, not whether or not it is more performant.
Fun fact, the code linked here is actually substantially different than what
BreakJoints does. Did you know that if you put your parts under a Folder (or any other non-Model non-Part Instance) within the model you’re calling it on, they won’t have their joints broken by BreakJoints!
BreakJoints as a very old function which was implemented in the initial engine API so it has some pretty old janky behavior.
What if the joint is parented to another part? e.g if Part1 has a weld that connects to Part2, and breakJoints is called on Part2, looping through the descendants of Part2 wouldn’t work to destroy them.
This is the code that’s required to replicate exactly what BreakJoints does (which probably isn’t what you want because it doesn’t handle parts under other parts, or folders, etc. But if you do want an exact replacement that’s what it would be):
local function breakJoints(root) if root:IsA("Model") then for _, child in root:GetChildren() do breakJoints(child) end elseif root:IsA("BasePart") then for _, joint in root:GetJoints() do if joint:IsA("JointInstance") or joint:IsA("WeldConstraint") then joint:Destroy() end end end end
I still think it would be useful to have one of two things to replace this
A filtered GetChildren/GetDescendants
OR A more modern replacement to BreakJoints