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
Legends!
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)
@JoolCaat 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
Um, actually
for _, Object in Character:GetDescendants() do
if Object:IsA("Weld") then
Object:Destroy()
end
end
Generalized iteration exists
ActuallyâŚ
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