forked from Simnation/Main
87 lines
1.7 KiB
Lua
87 lines
1.7 KiB
Lua
local rad = math.rad
|
|
local sin = math.sin
|
|
local cos = math.cos
|
|
local min = math.min
|
|
local max = math.max
|
|
local type = type
|
|
|
|
function table.copy(x)
|
|
x = table.clone(x)
|
|
for k, v in pairs(x) do
|
|
if type(v) == 'table' then
|
|
x[k] = table.copy(v)
|
|
end
|
|
end
|
|
return x
|
|
end
|
|
|
|
function protect(t)
|
|
local fn = function(_, k)
|
|
error('Key `' .. tostring(k) .. '` is not supported.')
|
|
end
|
|
|
|
return setmetatable(t, {
|
|
__index = fn,
|
|
__newindex = fn
|
|
})
|
|
end
|
|
|
|
function CreateGamepadMetatable(keyboard, gamepad)
|
|
return setmetatable({}, {
|
|
__index = function(t, k)
|
|
local src = IsGamepadControl() and gamepad or keyboard
|
|
return src[k]
|
|
end
|
|
})
|
|
end
|
|
|
|
function Clamp(x, _min, _max)
|
|
return min(max(x, _min), _max)
|
|
end
|
|
|
|
function IsGamepadControl()
|
|
return not IsUsingKeyboard(2)
|
|
end
|
|
|
|
function GetSmartControlNormal(control)
|
|
if type(control) == 'table' then
|
|
local normal1 = GetDisabledControlNormal(0, control[1])
|
|
local normal2 = GetDisabledControlNormal(0, control[2])
|
|
return normal1 - normal2
|
|
end
|
|
|
|
return GetDisabledControlNormal(0, control)
|
|
end
|
|
|
|
function EulerToMatrix(rotX, rotY, rotZ)
|
|
local radX = rad(rotX)
|
|
local radY = rad(rotY)
|
|
local radZ = rad(rotZ)
|
|
|
|
local sinX = sin(radX)
|
|
local sinY = sin(radY)
|
|
local sinZ = sin(radZ)
|
|
local cosX = cos(radX)
|
|
local cosY = cos(radY)
|
|
local cosZ = cos(radZ)
|
|
|
|
local vecX = vector3(
|
|
cosY * cosZ,
|
|
cosY * sinZ,
|
|
-sinY
|
|
)
|
|
|
|
local vecY = vector3(
|
|
cosZ * sinX * sinY - cosX * sinZ,
|
|
cosX * cosZ - sinX * sinY * sinZ,
|
|
cosY * sinX
|
|
)
|
|
|
|
local vecZ = vector3(
|
|
-cosX * cosZ * sinY + sinX * sinZ,
|
|
-cosZ * sinX + cosX * sinY * sinZ,
|
|
cosX * cosY
|
|
)
|
|
|
|
return vecX, vecY, vecZ
|
|
end
|