Custom UIListLayout

  1. What do you want to achieve? Hello, i am making a notification system and i need to make a custom list layout system like the UIListLayout to tween the objects postitions inside it.

  2. What is the issue? I can’t manage to do it

  3. What solutions have you tried so far? I tried myself and looked on forums

1 Like

You mean like this? It’s pretty simple.

The basic idea is that you have an array (a table) that stores all of the objects chronologically. New objects are inserted at the front which pushes everything up and old objects are removed. Every time the array changes, you update all of the objects and animate them to their new spot.

Below are some code samples pulled out of that project to give you a general idea. Note that master is the array that will store the objects.

--spawn in a new notification object
local function newMsg(t: string, s: string, d: number?)
	assert(_c.instances[t], 'invalid message type: "', t, '"')
	d = d or _c.defaultDuration
	local obj: _c.msgObj = _c.instances[t]:Clone()
	local tx = obj.Text
	local msg: msg = {
		obj = obj,
		text = s,
		pos = 1,
	table.insert(master, 1, msg) --insert new notification at the front of the array
	tx.Text = s
	obj.Parent = container
	updateAll() --update everything, including this new object
--update the objects to move them to the right spot
function updateAll()
	for pos: number, msg: msg in master do
		msg.pos = pos --internally update the position
		if pos > _c.maxMessages and not msg.removing then --remove objects that are out of range
			task.spawn(removeMsg, msg)
		tws:Create(msg.obj, _c.twis.def, {Position = getMsgPos(pos)}):Play() --tween the objects to their new position
--remove notification objects
function removeMsg(msg: msg)
	if not msg.removing then 
		msg.removing = true
		_c.actions.disappear(msg.obj).Completed:Wait() --remove the object via an animation because yes
		table.remove(master, msg.pos) --remove the object from the table
		updateAll() --update everything again

Hey, stumbled across this reply while digging around for a similar system, could you tell me what some variables are? (_c, msg, all that good stuff.)

Nevermind, gave up anyway. Thanks for giving me hope i guess.