Log In  

can someone tell me why this throws the error "attempt to call global vec a table value"?
vec clearly has its metatable set with a call metaevent

vec=
{   
    x=0,
    y=0,
    mag=function(o) return sqrt (o.x^2+o.y^2) end,
 ang=function(o) return atan2(o.x,  o.y  ) end,
 nrm=function(o) return vec(o:ang()/360) end,  
}
vecmeta=
{
     __call=function(o,x,y)
      o  =o or {} 
            o.x=y and x or cos((x+90)/360)
            o.y=y and y or-sin((x+90)/360)  
            return setmetatable(o,vec)
        end,
        __eq=function(a,b)
            a=type(a) == "number" and vec(a,a) or a
            b=type(b) == "number" and vec(b,b) or b
            return (a.x==b.x and a.y==b.y)
        end,
        __add=function(a,b)
            a=type(a) == "number" and vec(a,a) or a
            b=type(b) == "number" and vec(b,b) or b
            return vec(a.x+b.x,a.y+b.y)
        end,
        __sub=function(a,b)
            a=type(a) == "number" and vec(a,a) or a
            b=type(b) == "number" and vec(b,b) or b
            return vec(a.x-b.x,a.y-b.y)
        end,
        __mul=function(a,b)
            a=type(a) == "number" and vec(a,a) or a
            b=type(b) == "number" and vec(b,b) or b
            return vec(a.x*b.x,a.y*b.y)
        end,
        __div=function(a,b)
    a=type(a) == "number" and vec(a,a) or a
            b=type(b) == "number" and vec(b,b) or b
            return vec(a.x/b.x,a.y/b.y)
        end,
}
setmetatable(vec, vecmeta)

local test =
{
    pos=vec(0,0),
    vel=vec(0,0),
}
P#65879 2019-07-16 05:14


[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-04-20 12:09:41 | 0.005s | Q:9