|
|
- local acos = math.acos
- local clamp = Mathf.Clamp
- local sqrt = Mathf.Sqrt
- local setmetatable = setmetatable
- local rawset = rawset
- local rawget = rawget
-
- local Vector2 = {}
- local get = tolua.initget(Vector2)
-
- Vector2.__index = function(t,k)
- local var = rawget(Vector2, k)
-
- if var == nil then
- var = rawget(get, k)
-
- if var ~= nil then
- return var(t)
- end
- end
-
- return var
- end
-
- Vector2.__call = function(t, x, y)
- return Vector2.New(x, y)
- end
-
- function Vector2.New(x, y)
- -- print(debug.traceback(""))
- -- print("2222222222222222222222222 Vector2.New")
- local v = {x = x or 0, y = y or 0}
- setmetatable(v, Vector2)
- return v
- end
-
- function Vector2:Set(x,y)
- self.x = x or 0
- self.y = y or 0
- end
-
- function Vector2:Get()
- return self.x, self.y
- end
-
- function Vector2:SqrMagnitude()
- return self.x * self.x + self.y * self.y
- end
-
- function Vector2:Clone()
- return Vector2.New(self.x, self.y)
- end
-
- function Vector2:Normalize()
- local v = self:Clone()
- return v:SetNormalize()
- end
-
- function Vector2:SetNormalize()
- local num = self:Magnitude()
-
- if num == 1 then
- return self
- elseif num > 1e-05 then
- self:Div(num)
- else
- self:Set(0,0)
- end
-
- return self
- end
-
- function Vector2.Dot(lhs, rhs)
- return lhs.x * rhs.x + lhs.y * rhs.y
- end
-
- function Vector2.Angle(from, to)
- return acos(clamp(Vector2.Dot(from:Normalize(), to:Normalize()), -1, 1)) * 57.29578
- end
-
-
- function Vector2.Magnitude(v2)
- return sqrt(v2.x * v2.x + v2.y * v2.y)
- end
-
- function Vector2:Div(d)
- self.x = self.x / d
- self.y = self.y / d
-
- return self
- end
-
- function Vector2:Mul(d)
- self.x = self.x * d
- self.y = self.y * d
-
- return self
- end
-
- function Vector2:Add(b)
- self.x = self.x + b.x
- self.y = self.y + b.y
-
- return self
- end
-
- function Vector2:Sub(b)
- self.x = self.x - b.x
- self.y = self.y - b.y
-
- return
- end
-
- Vector2.__tostring = function(self)
- return string.format("[%f,%f]", self.x, self.y)
- end
-
- Vector2.__div = function(va, d)
- return Vector2.New(va.x / d, va.y / d)
- end
-
- Vector2.__mul = function(va, d)
- return Vector2.New(va.x * d, va.y * d)
- end
-
- Vector2.__add = function(va, vb)
- return Vector2.New(va.x + vb.x, va.y + vb.y)
- end
-
- Vector2.__sub = function(va, vb)
- return Vector2.New(va.x - vb.x, va.y - vb.y)
- end
-
- Vector2.__unm = function(va)
- return Vector2.New(-va.x, -va.y)
- end
-
- Vector2.__eq = function(va,vb)
- return va.x == vb.x and va.y == vb.y
- end
-
- get.up = function() return Vector2.New(0,1) end
- get.right = function() return Vector2.New(1,0) end
- get.zero = function() return Vector2.New(0,0) end
- get.one = function() return Vector2.New(1,1) end
-
- get.magnitude = Vector2.Magnitude
- get.normalized = Vector2.Normalize
- get.sqrMagnitude = Vector2.SqrMagnitude
-
- UnityEngine.Vector2 = Vector2
- setmetatable(Vector2, Vector2)
- return Vector2
|