Rippling: Instancing got easier! [REQUESTED UPDATE #1 (v3 TOTAL)]

Before you say anything!

There are a LOT of people trying to debunk that @commitblue was wrong saying Fusion is bad. KEEP IT TO DM’s, and not get offtopic. Thank you.

This was just a project I made for fun and decided to release to other people. If you use different instancing tools, and find no use for this- just don’t continue, because in my opinion it makes it easier, but it may be different for different people working on different projects. As far as I know, there aren’t any competetors Nevermind, turns out there’s quite a few modules like this (e.g Fusion or Roact), but this isn’t a project to go against them, more to just give people a resource.


RipplingTitle

Index

Any listed items in bold are important topics.

1. Before you say anything
2. Why use rippling
3. Advantages and disadvantedges
4. (slight) Documentation
5. Download
6. Updates

Why use rippling?

This may be the first question you ask, and also a good one. Rippling is an instancing tool which shortens the outcome of code when creating new objects which helps you clean up your code and overall improves the speed of development time, with the same quality outcome.

If these are thing you want in development, rippling may be for you.

Advantages and disadvantages

Advantages

  • Speed
  • Colaboration is made easier
  • Easy to use and port to projects

Disadvantages

  • Handling children seems harder
  • Singular function handling all.

(slight) Documentation

To create an object, use

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New

local Part = New("Part")

Now, you need to attatch properties to it. Add a table as a parameter to the part.

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New

local Part = New("Part", { -- Table created here.

}) -- Table ends here

So, let’s give it a name!

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New

local Part = New("Part", {
   Name = "My new part!"
})

See! That easy! Now, let’s parent it to our workspace, and give it a try!

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New

local Part = New("Part", {
   Name = "My new part!",
   Parent = workspace
})

If you now run or playtest your game, you’ll notice in the explorer tab there’s a part. But you can’t see it! That’s because we haven’t given it a position, so the part is in the baseplate!!

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New

local Part = New("Part", {
   Name = "My new part!",
   Parent = workspace,
   Positon = Vector3.new(0, 8, 0)
})

And that’s our making instances! Now let’s work on making Children. In the function, add a new table and add an instance name as an index:

local Part : BasePart = New("Part", {
	Position = Vector3.new(0, 8, 0),
	Color = Color3.fromRGB(60, 255, 184),
	CanCollide = false,
	Anchored = true,
	Parent = workspace
}, {
    BillboardGui = {}
})

Then, add the properties to the table.

local Part : BasePart = New("Part", {
	Position = Vector3.new(0, 8, 0),
	Color = Color3.fromRGB(60, 255, 184),
	CanCollide = false,
	Anchored = true,
	Parent = workspace
}, {
    BillboardGui = {
       Name = "Bob" -- We don't require any parent property. Adding it will cause it to be overwritten.
   }
})

Now, playtesting you can see a BillboardGui named Bob :shock:
But… what if hear me out, we add a child TO THE CHILD?!?!?!

Add a children index to the properties of the element and then you can add an instance the same way as children elements are handled!!

local Part : BasePart = New("Part", {
	Position = Vector3.new(0, 8, 0),
	Color = Color3.fromRGB(60, 255, 184),
	CanCollide = false,
	Anchored = true,
	Parent = workspace
}, {
    BillboardGui = {
       Name = "Bob" -- We don't require any parent property. Adding it will cause it to be overwritten.
       Children = {
         TextLabel = {
            Name = "Scarlet"
         }
      }
   }
})

Now then, this sadly won’t show these instances, because there are no defaults, but that’s for another update :frowning_face: . For now you have to manually input sizes for them, but a working one with size input is:

local Rippling = require(game.ReplicatedStorage:WaitForChild("Rippling"))
local New = Rippling.New
local _R = Rippling.Enum()

local Part : BasePart = New("Part", {
	Position = Vector3.new(0, 8, 0),
	Color = Color3.fromRGB(60, 255, 184),
	CanCollide = false,
	Anchored = true,
	Parent = workspace
}, {
	BillboardGui = {
		Name = "Bob",
		Size = UDim2.fromOffset(400, 50),
		StudsOffset = Vector3.new(0, 5, 0),
		Parent = workspace,
		Children = {
			TextLabel = {
				Name = "Aurora",
				Text = "hi",
				Size = UDim2.fromOffset(200, 50),
				AnchorPoint = Vector2.new(0.5, 0.5),
				Position = UDim2.fromScale(0.5, 0.5)
			}
		},
	},
}, _R.RipplingObjectState.Release)

Download

Whether you instantly scrolled down here, decided to go post a comment and are reading this or you’re actually wanting to get it, here is the download for Rippling. Have a good day, and (if you’re getting it) enjoy!.


Updates

15 Likes

Hi! So, first of all, the name is rippling but it’s a fair enough mistake, and also the usecase is similar to Fusion’s. Fusion is, as it’s github says, “Fusion is a modern reactive UI library”. Rippling’s case is for in general instancing of any class. I also did not know of Fusion before hand, and I can see the interesting similarities. Rippling’s usecase is for in-general instancing to be cleaner and (slightly) easier to read for some people. I think Fusion is great, and as it says at the start of the post;

but this isn’t a project to go against them, more to just give people a resource.

So it’s fine if people want to use Fusion, as this isn’t anything to go against them, but for the people like me who like the new instancing resource it provides.

Continuing, Fusion is a great resource and I’ve seen Elttob’s work before and it has been outstanding. It’s fine for any developer to use it, as it’s a great resource for what it provides. Although I have a similar standing point, Fusion is for UI, and I’m here for all class components.

Thanks for the feedback!

I do not agree with fusion being great. Its a ripoff of roact, except with way less features.

Fusion, Is also used for other instances. Roact and Fusion both is mainly for ui but can be used with other instances too, which is neat.

Good. I see rippling potential, but you could put in more features too like fragments and bindings! Something like that, to atleast differentiate from fusion because its really similar on how it lacks features

I understand, But with that in hand, you could make the resource more useful by trying to make it rich in features so more people use it and learn from it and actually make it worth to use

Fusion is great at lacking features/most features you have to implement yourself, I hate it honestly. i just noticed that its really similar to that module, ettlob made a few good resources, but i highly disagree with fusion being good. Which is why i put a “whyfusionsucks” page in my description

Anyway, here is what you can add:
stateful components
bindings
events
states
rodux support?

Good luck

1 Like

Thanks for the feedback! I’ll be sure to add these soon. :slight_smile:

Well, that was quite rude… @jasperagent_dev I think this is nice since otherwise, it’d need to look like something like this.

local Part = Instance.new("Part")

Part.Name = "My new part!"
Part.Parent = workspace
Part.Positon = Vector3.new(0, 8, 0)

Which is fine but being able to instance the part and change its properties all in one is honestly a lot nicer.

Thanks for the positive reply, another thing is that making the instances is a bit easier/faster for some people, which is one of my main purposes. Also, if I came off as rude- sorry! :sweat_smile:

That sometimes happens when I’m typing, because I begin to get too factual about my work when I type about it, leading to misconcetions in my meaning

2 Likes

This is awesome! I’m sure this will be very useful to many up and coming developers.

1 Like

fusion is a great library, and its in development by a couple of people, against 32 collaborators in roact’s system.

it may be not that great (for you) but it’s a quality library.

Great resource by the way

1 Like

This looks incredibly useful! I do have one question though? Here it says that you can’t add more than one child to an object:

But then here is says you can:

So I was just wondering if you can add a child to a child or not? I may be misunderstanding this though so I apologize if that is the case

But either way this looks incredibly useful and I will most likely be using this in the future! Thanks!

1 Like

fusion can be used to create any instance, not just UI

Ah! So a created instance can have multiple children, however having more children inside of those children are not possible currently.

1 Like

My point with it was that it’s mainly based upon UI, however this is focused on all types of instances instead of just UI. This means Fusion or Roact are going to contain more UI-Based functions or features. My resource is trying to respond to all of this.

I can help u with that if you want. its rlly ez

1 Like

I looked at your complains on your repl free tier website and your arguments seem to consist of

  1. Roact has more stars on github
  2. Fusion is in alpha
  3. You have to make your own components

Honestly those first 2 literally do not matter at all unless you need a high amount of support.
And the 3rd one? The whole point in using a library like fusion is to create your own components and have them easily interface well with your scripts, if you really want to have components made by other people you can just use a module made by another person which uses fusion.

The only thing that you mentioned that I agree with is that I wish fusion would use a state management system separate from fusion itself but its not a major concern for me.

2 Likes

continue in dms its getting so offtopic

anyway, what you said is too bogus. First of all, I like how you said “free tier repl website” to make me feel worse. If anything, I would rather a worse server than read this at all.

Second,
I know you said “consist of” but your saying its like the only reasons i put it in my website, mind debunking the other reasons or are you scared to get wrecked?

Then its really awful. The point of 3rd party modules, is to use the functions in it so you dont have to write it yourself. In this special case, you have to? The only thing fusion has wrote so far is state, element, animations, and thats so far i know at a 20 minute look into fusion.

Roact? you have all these, but you dont have to make these yourself. sure, some things like animations are in other modules like roact-spring, but its better than having to make these functions yourself.

Thats it.

In the module’s current form it’s gotten the functions for it, however the functions fail to work. I’m still investigation it now, but I’ll let you know if I’m ever in need of help :slight_smile:

1 Like

This is awful.

This module does not shorten the “outcome of code”, “clean up your code” or increase productivity. Does it also cook my code too? In fact, I cannot come up with one use case for this.

Definitely.

I don’t get the hype of UI libraries incorporated to game engines that already make this task easier for you by providing visual assistance. It’s bad practice and highly redundant.

Is this like the old RbxUtility.Create, except you have to directly put “Properties” which is a little annoying. Or is it intended to be more like Roact?

-- RbxUtility.Create

create "Model" {
    Name = "Test"
    create "Part" {
       Position = Vector3.zero,
       Anchored = true,
    }
    Parent = workspace,
}

It really does seem like that library. Why should we choose this over the RbxUtility.Create module?

1 Like

Hiya! Thanks for the feedback(?)

I get that everyone has their own views of certain things, and thats fine :). I get that you might not like this resource:

But for me it helps, and I just took into concideration some people might think it helps too;

Whether it helps you or not, it does not cook your code- so please, don’t eat it.