Client Difference Log
API Changes
Added Property Enum<AutoIndentRule> Studio.Auto Indent Rule
Added Property Instance StudioService.HoverInstance {RobloxScriptSecurity} [<đ> LoadOnly] [NotReplicated]
Added Property Vector2 VideoFrame.Resolution [ReadOnly] [NotReplicated]
Added Function bool DataModel:GetEngineFeature(string name) {LocalUserSecurity}
Added Enum AutoIndentRule
Added EnumItem AutoIndentRule.Off : 0
Added EnumItem AutoIndentRule.Absolute : 1
Added EnumItem AutoIndentRule.Relative : 2
(Click here for a syntax highlighted version!)
Yea boi we finally got it!
Now Iâm only waiting for the announcement post and for its functionality to be enabled. Man, the team behind this is awesome!
Itâs enabled right now!
If you want to find out first, do a quick refresh of https://fflag.eryn.io/ every once in a while and you might see a new change before everyone else
I like how Roblox added Depth of Field, as itâs been such a long awaited feature. However, I honestly believe it isnât ready yet.
Although it has some properties we can tweak to our liking, it is still missing some things, such as how strong the blur is / the size of the blur (similarly to BlurEffect) and InFocusRadius / InFocusDistance donât really reflect the distance as expected (or atleast, I was expecting them to work in studs). Instead, what we get right now, seems to start only after a certain threshold and does not really reflect the property change well.
Donât get me wrong, I like it. I just think that it needs a little bit of improvement until I can start using it in my games.
Right now it just doesnât look right no matter how I adjust it.
OMG, youâre right! I didnât realize at first since I had my graphics settings down to match my poopy computer. But this is seriously amazing!
Itâs just a little sad that it requires higher end PCs (which I can understand). But man itâs still amazing!
Been waiting for DOF for a while now
Feedback on the new Animation Uploader/Importer.
I would like to mouse over the icons to see the full name, or make it where it always shows the full name of the animation because I am unable to differentiate between these two animations.
Hereâs a video demo I did for the DepthOfFieldEffect class about a month ago if anyone is interested lol:
Are those material footstep sounds an upcoming feature from Roblox, or is that something you just made for the demo? Curious about the realistic first person cam as well.
To be quite honest, you can do that right now currently with the current studio - you just need the sweet SFX that hes got.
Iâm aware that you can do this already - I was just curious if itâs an upcoming behavior of the corescripts or if it was something he implemented for the demo video.
Nah, its part of my (yet unreleased) character realism system. I shoehorned it into the demo because I didnât like Robloxâs default character behavior lol.
Youâll see it in one of my upcoming projects though
Itâs already present in Welcome to Roblox Building:
https://www.roblox.com/games/2897155393/Welcome-to-Roblox-Building-Beta
Is Luau just going to become TypeScript at this point? Exporting types is a very TypeScripty thing.
So we had some internal feedback that automatically exporting all types declared in the module is harmful, which is why weâre going to transition to explicitly exporting types that are part of the public type interface. This change isnât enabled yet.
For importing though, weâre going to continue to use namespaced type aliases for now (e.g. local foo = require(bar)
brings exported types into foo
namespace).
My major concern is the fact that itâs still difficult to import a type namespace from a module without requiring it, which is very important for avoiding circular require deadlocks at runtime. Right now the only way to do that is with a rather confusing and limited type MyImportedModule = typeof(require(...))
statement. For what I want to do with the type system, itâs essential to be able to have some way of reading a moduleâs exported types statically, without actually requiring that module at runtime.
I suppose a possible workaround here is to lazy-load the modules when you need their types, but it feels like this is a major problem with importing type namespaces with require; youâre enforcing runtime effects for a feature that shouldnât affect runtime code. Importing modules at runtime has side effects like the require deadlock, and whatever else the required module is doing. Why should I use a require statement at runtime when all I need is static type information?
I know youâve got a lot on your hands with typed lua, as itâs such a big project, but I hope you consider adding a syntax for type imports that donât affect runtime code; itâs a small feature that goes a long way for me.
Itâs probably not the most intuitive way to import it, but can you explain the limitations?
Well, the biggest thing is that you donât actually get the moduleâs type namespace; you only get the single type of the value youâre trying to import. This often means you have to use some hacks to get the type you actually want to import, and itâs hard to get a well-defined, manually-specified type from another module.
A good example is with classes. Often times the type you want from a class module is the object type, even those these modules return the class value. So with the typeof(require())
syntax, you have two options, which arenât particularly great:
- Use
type ObjectType = typeof(require(...).new())
. This works, but it still isnât very great. Itâs also really easy to confuse the class type and object type if this is the only available option for other people using your code to import the object type.
or - Conflate the âClass typeâ and âObject typeâ. This is very hacky, but magnalite showed an example of it in this thread: https://devforum.roblox.com/t/the-future-of-oop-in-light-of-typed-luau/554988/10?u=databrain
It would be much nicer if instead you could do export type MyClass = {...}
for the object type, and a statement along the lines of import type MyClass from path.to.MyClass
or importtypes(path.to.MyClass)
to avoid this altogether.
Ah, right, I get it⌠so you really need to do something like this which is not great either
local ModuleType
if false then
ModuleType = require(path)
end
(assuming this works, which I am not sure about)