Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
1

Can we set the GetChildren() order in a folder?

Asked by 5 years ago

I'm making an tower defense game but the enemies are taking random path. Is there a function that change the order for example: Apple: 0 Cheese: 0 Water: 0 To Apple: 1 Cheese: 0 Water: 0 So when i call the GetChildren function he give me apple first?

1 answer

Log in to vote
3
Answered by 5 years ago

You will have to sort the table of children yourself. Luckily for you, lua has a sort function for tables that allow you to use a custom sorting function: table.sort.

table.sort(t, comp) The function's first argument is the table you want to sort, and the second is the comparison function. The comparison function has to have 2 parameters, and the function has to return true if the first parameter is supposed to be before the second.

Here's an example:

tab = {
    {
        ["Name"] = "Second",
        ["Value"] = 2
    },
    {
        ["Name"] = "Third",
        ["Value"] = 3
    },
    {
        ["Name"] = "First",
        ["Value"] = 1
    }
}

for k, v in pairs(tab) do
    print(v.Name, v.Value)
end

-- Output:
-- Second 2
-- Third 3
-- First 1

table.sort(tab, function(first, second)
    return first.Value < second.Value
end)

for k, v in pairs(tab) do
    print(v.Name, v.Value)
end

-- Output:
-- First 1
-- Second 2
-- Third 3

We can apply this to your problem. One way is to have a dictionary where the names are associated with an order:

local order = {
    ["Apple"] = 1,
    ["Cheese"] = 2,
    ["Water"] = 3
}

table.sort(tableOfParts, function(first, second)
    -- Assuming tableOfParts is a table containing parts
    return order[first.Name] < order[second.Name]
end)

Another way is to add an IntValue in the NPCs, assuming you're using GetChildren on a model containing all NPCs. Name this IntValue "Order" or however you like, then make it's value its order. To be clear, you do this in studio while you're not testing.

local NPCs = workspace.NPCs:GetChildren() -- assuming workspace.NPCs contains all NPCs

table.sort(NPCs, function(first, second)
    return first.Order.Value < second.Order.Value
end)

Hope this helps.

0
Great answer it helped me too. Thanks! vissequ 105 — 5y
Ad

Answer this question