]> Untitled Git - lightcycles-love.git/blob - vec2.lua
Enhanced the grid layout
[lightcycles-love.git] / vec2.lua
1 vec2 = {}
2 vec2.x = 0
3 vec2.y = 0
4 vec2.__index = vec2
5
6 function vec2:new(x,y)
7     return setmetatable({x=x, y=y}, self)
8 end
9
10 function vec2:length()
11     return math.sqrt(self.x * self.x + self.y * self.y)
12 end
13
14 function vec2:normalize()
15     local len = self:length()
16     if len > 0 then
17         self.x = self.x / len
18         self.y = self.y / len
19     end
20 end
21
22 function vec2:__tostring()
23         return "("..tonumber(self.x)..","..tonumber(self.y)..")"
24 end
25
26 local function isvector(v)
27         return type(v) == 'table' and type(v.x) == 'number' and type(v.y) == 'number'
28 end
29
30 function vec2:__eq(v)
31     assert(isvector(v), "Expected a vec2 type")
32     return self.x == v.x and self.y == v.y
33 end
34
35 function vec2:__add(v)
36     assert(isvector(v), "Expected a vec2 type")
37     return vec2:new(self.x + v.x, self.y + v.y)
38 end
39
40 function vec2:add(v)
41     assert(isvector(v), "Expected a vec2 type")
42     self.x = self.x + v.x
43     self.y = self.y + v.y
44 end
45
46 function vec2:__sub(v)
47     assert(isvector(v), "Expected a vec2 type")
48     return vec2:new(self.x - v.x, self.y - v.y)
49 end
50
51 function vec2:__mul(a)
52     if type(a) == 'number' then
53         return vec2:new(self.x * a, self.y * a)
54     else
55         assert(isvector(a), "Expected a number or vec2 type")
56         return vec2:new(self.x * a.x, self.y * a.y)
57     end
58 end
59
60 function vec2:__div(a)
61     if type(a) == 'number' then
62         return vec2:new(self.x / a, self.y / a)
63     else
64         assert(isvector(a), "Expected a number or vec2 type")
65         return vec2:new(self.x / a.x, self.y / a.y)
66     end
67 end