Heartbeat connections refresh every frame, so if you queued functions, and some of them yielded too long, well then things would error as the remaining functions never gets to run. Your solution is to make coroutines for EACH function, and to be honest, that’s not a bad solution, however, heart connections already provide you with a separate pseudo thread which makes your implementation just a code smell, so what we must do is making all code that ends with :Step to get wrapped in a new heartbeat connection.
Why should people use this framework over something like Aero, Dragon, or Knit? What would you say to someone that claims the framework is overcomplicated?
I have not quite worked with Dragon or Knit, so I wouldn’t be very familiar with those two. I can compare this to AeroGame Framework, though.
I know that every framework has it’s own focus. For example, Aero has an amazing system to focus on script communication. It has a powerful API to do it the most efficient way possible.
Yucon, on the other hand, is focused on optimization. This is partially because of the backend API, partially because of the way you have it set up as a consumer (using thread handlers, practically avoiding while, etc.). Now, of course, Yucon does need some fine tuning, as mentioned by previous users, but for the most part, it works pretty well.
In addition, this framework does get plenty of updates, as I do use it in my own projects.
This is really neat, I think I really like this and might use it for future projects. It seems like it sort of mimics a MonoBehavior from Unity in the sense that it’s got a function that runs at preload, start, and every frame. Glad to see you make such a fantastic plugin and I think a LOT of people will benefit from this!
Well I lack the experience of completing a Unity game from start to finish, but from the looks of things you’ve got all the functions in the MonoBehavior. You use a RenderStepped, which is the same as the Mono Update() method and there is preload and start which basically act like the Mono start() function but with more control over execution order. I think one of the things that is missing is the Monobehavior’s LateUpdate() function which basically binds to renderstepped but lets other bindings go first, so you can choose to have it be the last thing that runs on each frame. Another thing is the onEnable() and onDisable() functions that run when the script gets disabled or destroyed and enabled or instantiated.
If you’re really interested I recommend you check out the actual documentation here:
A differentiating factor between the two is that in the Mono none of the functions are mandatory, even tho the script loads up with an update() and a start() function already defined, so you’ll never need to have an empty function in your code.
I considered it, but, that adds another layer of complication. I would prefer to keep in Studio to prevent that, hope you can understand.
Not sure why you are getting an error, can you send some code to show what you mean?
Because this is the base thing, and is in EVERY Yucon script, and I use it in all of my newer projects, I feel like this is something that may have been a mistake on your part, albeit something could have gone wrong with the framework.
I’m a bit confused as to what you are saying here, apologies.
Oop! It’s there, but not documented properly. To clarify, player is passed through function.
As in, how to use it?
It doesn’t?
DataStore2 may or may not have something like that, I can look into modifying it for that.
They are like module scripts, but already loaded in.
Instead of using something like require(script.Parent.Parent.Plugins.PluginName), you can just do self:GetPlugin("PluginName"). In addition, because it’s loaded only once on the framework, any variables or data changed in the plugin is seen by other scripts.
Thank you for your feedback, I will work on an update soon.
to specify even more Apologies for the events but Firing to the client needs an argument ofplayer not unless if you want it to fire for all players like Event:FireAllClients(ArgPassHere)