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),
}



[Please log in to post a comment]