miduo_client/Assets/ManagedResources/~Lua/UnityEngine/Plane.lua

66 lines
1.8 KiB
Lua

--------------------------------------------------------------------------------
-- Copyright (c) 2015 - 2016 , 蒙占志(topameng) topameng@gmail.com
-- All rights reserved.
-- Use, modification and distribution are subject to the "MIT License"
--------------------------------------------------------------------------------
local setmetatable = setmetatable
local Mathf = Mathf
local Vector3 = Vector3
local Plane = {}
Plane.__index = function(t,k)
return rawget(Plane, k)
end
Plane.__call = function(t,v)
return Plane.New(v)
end
function Plane.New(normal, d)
return setmetatable({normal = normal:Normalize(), distance = d}, Plane)
end
function Plane:Get()
return self.normal, self.distance
end
function Plane:Raycast(ray)
local a = Vector3.Dot(ray.direction, self.normal)
local num2 = -Vector3.Dot(ray.origin, self.normal) - self.distance
if Mathf.Approximately(a, 0) then
return false, 0
end
local enter = num2 / a
return enter > 0, enter
end
function Plane:SetNormalAndPosition(inNormal, inPoint)
self.normal = inNormal:Normalize()
self.distance = -Vector3.Dot(inNormal, inPoint)
end
function Plane:Set3Points(a, b, c)
self.normal = Vector3.Normalize(Vector3.Cross(b - a, c - a))
self.distance = -Vector3.Dot(self.normal, a)
end
function Plane:GetDistanceToPoint(inPt)
return Vector3.Dot(self.normal, inPt) + self.distance
end
function Plane:GetSide(inPt)
return (Vector3.Dot(self.normal, inPt) + self.distance) > 0
end
function Plane:SameSide(inPt0, inPt1)
local distanceToPoint = self:GetDistanceToPoint(inPt0)
local num2 = self:GetDistanceToPoint(inPt1)
return (distanceToPoint > 0 and num2 > 0) or (distanceToPoint <= 0 and num2 <= 0)
end
UnityEngine.Plane = Plane
setmetatable(Plane, Plane)
return Plane