Search code examples
luagideros

Lua Gideros: Call function with multiple parameters


In my game that uses Gideros Studio, I have a function that has multiple parameters. I want to call my function on one parameter, and then later on another. Is this possible?

Here is my function:

local function wiggleroom(a,b,c)
    for i = 1,50 do
        if a > b then
            a = a - 1
        elseif a < b then
            a = a + 1
        elseif a == b then
            c = "correct"
        end
    return c
    end
end

I want a to be compared with b, but call the function on b and c later on. For example:

variable = (wiggleroom(variable, b, c) --if variable was defined earlier
variable2 = (wiggleroom(a, variable2, c)
variable3 = (wiggleroom(a, b, variable3)

I also want to be able to use this function for multiple objects (call each parameter twice).


Solution

  • If I am understanding you correctly you may consider using the lua version of classes. If you don't know them you may want to look at this.

    example:

    tab = {}
    
    function tab:func(a, b, c)  -- c doesn't get used?
        if a then self.a = a end
        if a then self.b = b end
        if a then self.c = c end
    
        for i = 1,50 do
            if self.a > self.b then
                self.a = self.a - 1
            elseif self.a < self.b then
                self.a = self.a + 1
            elseif self.a == self.b then
                self.c = "correct"
            end
        end
        return c                -- not really necessary anymore but i leave it in
    end
    
    function tab:new (a,b,c)    --returns a table
        o = {}
        o.a = a
        o.b = b
        o.c = c
        setmetatable(o, self)
        self.__index = self
        return o
    end
    
                                --how to use:
    whatever1 = tab:new(1, 60)  --set a and b
    whatever2 = tab:new()       --you also can set c here if needed later in the function
    
    whatever1:func()            --calling your function
    whatever2:func(0,64)
    
    print(whatever1.a)          -->51
    print(whatever2.a)          -->50
    print(whatever1.c)          -->nil
    whatever1:func()            --calling your function again
    whatever2:func()
    print(whatever1.a)          -->60
    print(whatever2.a)          -->64
    print(whatever1.c)          -->correct
    print(whatever2.c)          -->correct