]> Untitled Git - lightcycles-love.git/blob - vec2.lua
Updated right angle message
[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:__sub(v)
41     assert(isvector(v), "Expected a vec2 type")
42     return vec2:new(self.x - v.x, self.y - v.y)
43 end
44
45 function vec2:__mul(a)
46     if type(a) == 'number' then
47         return vec2:new(self.x * a, self.y * a)
48     else
49         assert(isvector(a), "Expected a number or vec2 type")
50         return vec2:new(self.x * a.x, self.y * a.y)
51     end
52 end
53
54 function vec2:__div(a)
55     if type(a) == 'number' then
56         return vec2:new(self.x / a, self.y / a)
57     else
58         assert(isvector(a), "Expected a number or vec2 type")
59         return vec2:new(self.x / a.x, self.y / a.y)
60     end
61 end