AgentE382

Vector

Nov 1st, 2013
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.30 KB | None | 0 0
  1. function vector(x, y, z)
  2.     local v = {
  3.         x = x or 0,
  4.         y = y or 0,
  5.         z = z or 0,
  6.         __add = function (o)
  7.             return vector(
  8.                 x + o.x,
  9.                 y + o.y,
  10.                 z + o.z
  11.             )
  12.         end,
  13.         __sub = function (o)
  14.             return vector(
  15.                 x - o.x,
  16.                 y - o.y,
  17.                 z - o.z
  18.             )
  19.         end,
  20.         __mul = function (o)
  21.             return vector(
  22.                 x * o.x,
  23.                 y * o.y,
  24.                 z * o.z
  25.             )
  26.         end,
  27.         dot = function(o)
  28.             return x*o.x + y*o.y + z*o.z
  29.         end,
  30.         cross = function(o)
  31.             return vector(
  32.                 y*o.z - z*o.y,
  33.                 z*o.x - x*o.z,
  34.                 x*o.y - y*o.x
  35.             )
  36.         end,
  37.         __len = function()
  38.             return math.sqrt( x*x + y*y + z*z )
  39.         end,
  40.         round = function()
  41.             return vector(
  42.                 math.floor( x + 0.5 ),
  43.                 math.floor( y + 0.5 ),
  44.                 math.floor( z + 0.5 )
  45.             )
  46.         end,
  47.         __tostring = function()
  48.             return x..","..y..","..z
  49.         end,
  50.         __eq = function (o)
  51.             return x == o.x and y == o.y and z == o.z
  52.         end
  53.     }
  54.    
  55.     function v.__unm()
  56.         return v.mul(-1)
  57.     end
  58.    
  59.     function v.normalize()
  60.         return v.mul( 1 / v.length() )
  61.     end
  62.    
  63.     v.add = v.__add
  64.     v.subtract = v.__sub
  65.     v.sub = v.__sub
  66.     v.multiply = v.__mul
  67.     v.mul = v.__mul
  68.     v.length = v.__len
  69.     v.len = v.__len
  70.     v.tostring = v.__tostring
  71.     v.equals = v.__eq
  72.     v.eq = v.__eq
  73.    
  74.     v.__metatable = v
  75.    
  76.     function v.__newindex()
  77.        
  78.     end
  79.    
  80.     return setmetatable(v, v)
  81. end
Advertisement
Add Comment
Please, Sign In to add comment