-- Override tostring to display more info about the table local old_tostring = tostring local numtabs = 0 local printed_tables = {} --print = log -- --for obj in *@physobjs --bp.add(t,obj.offset.x,obj.offset.y,obj.size.x,obj.size.y) local function tostring_helper(el) assert(type(el) == "table", "Tried to call helper with something that was not a table, it was a " .. type(el)) local mt = getmetatable(el) if mt and mt.__tostring then return mt.__tostring(el) elseif printed_tables[el] == true then return old_tostring(el) else printed_tables[el] = true numtabs = numtabs + 1 local strbuilder = {"{"} for k,v in pairs(el) do local key,value if type(k) == "table" then key = tostring_helper(k) else key = old_tostring(k) end if type(v) == "table" then value = tostring_helper(v) else value = old_tostring(v) end strbuilder[#strbuilder + 1] = string.format("%s%s : %s", string.rep("\t",numtabs), key, value) end strbuilder[#strbuilder + 1] = string.rep("\t",numtabs - 1) .. "}" numtabs = numtabs - 1 return table.concat(strbuilder,"\n") end end function tostring(el) printed_tables = {} if type(el) == "table" then return tostring_helper(el) end return old_tostring(el) end function checktype(item,t) if type(item) ~= t then error("Was not call with corret type",3) end end -- Functions to save my hands function printf(fmt, ...) print(string.format(fmt,...)) end function errorf(fmt, ...) --Our error isn't actually in this function, it's 1 above us (1) = 2 error(string.format(fmt,...),2) end function assertf(bool, fmt, ...) assert(type(fmt) == "string", "Assertf arg #2 was \"" .. type(fmt) .. "\", expected string") if not bool then args = {fmt} for k,v in ipairs({...}) do table.insert(args,tostring(v)) end error(string.format(unpack(args)),2) end end