160 lines
5.7 KiB
Lua
160 lines
5.7 KiB
Lua
local formatPort = {}
|
|
WireLib.Debugger = { formatPort = formatPort } -- Make it global
|
|
function formatPort.NORMAL(value)
|
|
return string.format("%.3f",value)
|
|
end
|
|
|
|
function formatPort.STRING(value)
|
|
return '"' .. value .. '"'
|
|
end
|
|
|
|
function formatPort.VECTOR(value)
|
|
return string.format("(%.1f,%.1f,%.1f)", value[1], value[2], value[3])
|
|
end
|
|
|
|
function formatPort.ANGLE(value)
|
|
return string.format("(%.1f,%.1f,%.1f)", value.p, value.y, value.r)
|
|
end
|
|
|
|
formatPort.ENTITY = function(ent)
|
|
if not IsValid(ent) then return "(null)" end
|
|
return tostring(ent)
|
|
end
|
|
formatPort.BONE = e2_tostring_bone
|
|
|
|
function formatPort.MATRIX(value)
|
|
local RetText = "[11="..value[1]..",12="..value[2]..",13="..value[3]
|
|
RetText = RetText..",21="..value[4]..",22="..value[5]..",23="..value[6]
|
|
RetText = RetText..",31="..value[7]..",32="..value[8]..",33="..value[9].."]"
|
|
return RetText
|
|
end
|
|
|
|
function formatPort.MATRIX2(value)
|
|
local RetText = "[11="..value[1]..",12="..value[2]
|
|
RetText = RetText..",21="..value[3]..",22="..value[4].."]"
|
|
return RetText
|
|
end
|
|
|
|
function formatPort.MATRIX4(value)
|
|
local RetText = "[11="..value[1]..",12="..value[2]..",13="..value[3]..",14="..value[4]
|
|
RetText = RetText..",21="..value[5]..",22="..value[6]..",23="..value[7]..",24="..value[8]
|
|
RetText = RetText..",31="..value[9]..",32="..value[10]..",33="..value[11]..",34="..value[12]
|
|
RetText = RetText..",41="..value[13]..",42="..value[14]..",43="..value[15]..",44="..value[16].."]"
|
|
return RetText
|
|
end
|
|
|
|
function formatPort.RANGER(value) return "ranger" end
|
|
|
|
function formatPort.ARRAY(value, OrientVertical)
|
|
local RetText = ""
|
|
local ElementCount = 0
|
|
for Index, Element in ipairs(value) do
|
|
ElementCount = ElementCount+1
|
|
if(ElementCount > 10) then
|
|
break
|
|
end
|
|
RetText = RetText..Index.."="
|
|
--Check for array element type
|
|
if isnumber(Element) then --number
|
|
RetText = RetText..formatPort.NORMAL(Element)
|
|
elseif((istable(Element) and #Element == 3) or isvector(Element)) then --vector
|
|
RetText = RetText..formatPort.VECTOR(Element)
|
|
elseif(istable(Element) and #Element == 2) then --vector2
|
|
RetText = RetText..formatPort.VECTOR2(Element)
|
|
elseif(istable(Element) and #Element == 4) then --vector4
|
|
RetText = RetText..formatPort.VECTOR4(Element)
|
|
elseif((istable(Element) and #Element == 3) or isangle(Element)) then --angle
|
|
if(isangle(Element)) then
|
|
RetText = RetText..formatPort.ANGLE(Element)
|
|
else
|
|
RetText = RetText.."(" .. math.Round(Element[1],1) .. "," .. math.Round(Element[2],1) .. "," .. math.Round(Element[3],1) .. ")"
|
|
end
|
|
elseif(istable(Element) and #Element == 9) then --matrix
|
|
RetText = RetText..formatPort.MATRIX(Element)
|
|
elseif(istable(Element) and #Element == 16) then --matrix4
|
|
RetText = RetText..formatPort.MATRIX4(Element)
|
|
elseif(isstring(Element)) then --string
|
|
RetText = RetText..formatPort.STRING(Element)
|
|
elseif(isentity(Element)) then --entity
|
|
RetText = RetText..formatPort.ENTITY(Element)
|
|
elseif(type(Element) == "Player") then --player
|
|
RetText = RetText..tostring(Element)
|
|
elseif(type(Element) == "Weapon") then --weapon
|
|
RetText = RetText..tostring(Element)..Element:GetClass()
|
|
elseif(type(Element) == "PhysObj" and e2_tostring_bone(Element) != "(null)") then --Bone
|
|
RetText = RetText..formatPort.BONE(Element)
|
|
else
|
|
RetText = RetText.."No Display for "..type(Element)
|
|
end
|
|
--TODO: add matrix 2
|
|
if OrientVertical then
|
|
RetText = RetText..",\n"
|
|
else
|
|
RetText = RetText..", "
|
|
end
|
|
end
|
|
RetText = string.sub(RetText,1,-3)
|
|
return "{"..RetText.."}"
|
|
end
|
|
|
|
function formatPort.TABLE(value, OrientVertical)
|
|
local RetText = ""
|
|
local ElementCount = 0
|
|
for Index, Element in pairs(value) do
|
|
ElementCount = ElementCount+1
|
|
if(ElementCount > 7) then
|
|
break
|
|
end
|
|
|
|
local long_typeid = string.sub(Index,1,1) == "x"
|
|
local typeid = string.sub(Index,1,long_typeid and 3 or 1)
|
|
local IdxID = string.sub(Index,(long_typeid and 3 or 1)+1)
|
|
|
|
RetText = RetText..IdxID.."="
|
|
--Check for array element type
|
|
if(typeid == "n") then --number
|
|
RetText = RetText..formatPort.NORMAL(Element)
|
|
elseif(istable(Element) and #Element == 3) or isvector(Element) then --vector
|
|
RetText = RetText..formatPort.VECTOR(Element)
|
|
elseif(istable(Element) and #Element == 2) then --vector2
|
|
RetText = RetText..formatPort.VECTOR2(Element)
|
|
elseif(istable(Element) and #Element == 4 and typeid == "v4") then --vector4
|
|
RetText = RetText..formatPort.VECTOR4(Element)
|
|
elseif(istable(Element) and #Element == 3) or isangle(Element) then --angle
|
|
if isangle(Element) then
|
|
RetText = RetText..formatPort.ANGLE(Element)
|
|
else
|
|
RetText = RetText.."(" .. math.Round(Element[1]*10)/10 .. "," .. math.Round(Element[2]*10)/10 .. "," .. math.Round(Element[3]*10)/10 .. ")"
|
|
end
|
|
elseif(istable(Element) and #Element == 9) then --matrix
|
|
RetText = RetText..formatPort.MATRIX(Element)
|
|
elseif(istable(Element) and #Element == 16) then --matrix4
|
|
RetText = RetText..formatPort.MATRIX4(Element)
|
|
elseif(typeid == "s") then --string
|
|
RetText = RetText..formatPort.STRING(Element)
|
|
elseif(isentity(Element) and typeid == "e") then --entity
|
|
RetText = RetText..formatPort.ENTITY(Element)
|
|
elseif(type(Element) == "Player") then --player
|
|
RetText = RetText..tostring(Element)
|
|
elseif(type(Element) == "Weapon") then --weapon
|
|
RetText = RetText..tostring(Element)..Element:GetClass()
|
|
elseif(typeid == "b") then
|
|
RetText = RetText..formatPort.BONE(Element)
|
|
else
|
|
RetText = RetText.."No Display for "..type(Element)
|
|
end
|
|
--TODO: add matrix 2
|
|
if OrientVertical then
|
|
RetText = RetText..",\n"
|
|
else
|
|
RetText = RetText..", "
|
|
end
|
|
end
|
|
RetText = string.sub(RetText,1,-3)
|
|
return "{"..RetText.."}"
|
|
end
|
|
|
|
|
|
function WireLib.registerDebuggerFormat(typename, func)
|
|
formatPort[typename:upper()] = func
|
|
end
|