|
|
local rawget = rawget
|
|
local setmetatable = setmetatable
|
|
|
|
local Ray = {}
|
|
local get = tolua.initget(Ray)
|
|
|
|
Ray.__index = function(t,k)
|
|
local var = rawget(Ray, k)
|
|
|
|
if var == nil then
|
|
var = rawget(get, k)
|
|
|
|
if var ~= nil then
|
|
return var(t)
|
|
end
|
|
end
|
|
|
|
return var
|
|
end
|
|
|
|
Ray.__call = function(t, direction, origin)
|
|
return Ray.New(direction, origin)
|
|
end
|
|
|
|
function Ray.New(direction, origin)
|
|
local ray = {}
|
|
ray.direction = direction:Normalize()
|
|
ray.origin = origin
|
|
setmetatable(ray, Ray)
|
|
return ray
|
|
end
|
|
|
|
function Ray:GetPoint(distance)
|
|
local dir = self.direction * distance
|
|
dir:Add(self.origin)
|
|
return dir
|
|
end
|
|
|
|
function Ray:Get()
|
|
return self.origin, self.direction
|
|
end
|
|
|
|
Ray.__tostring = function(self)
|
|
return string.format("Origin:(%f,%f,%f),Dir:(%f,%f, %f)", self.origin.x, self.origin.y, self.origin.z, self.direction.x, self.direction.y, self.direction.z)
|
|
end
|
|
|
|
UnityEngine.Ray = Ray
|
|
setmetatable(Ray, Ray)
|
|
return Ray
|