源战役客户端
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

153 righe
2.7 KiB

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