local class = require("class") local DebugWindow = require("debug_overlay.debugwindow") require "imgui" local Watcher = class(DebugWindow) function Watcher:init( ) self.watched_values = {} self.shortcut = "f10" end function Watcher:add(obj, member, name) self.watched_values[#self.watched_values + 1] = setmetatable({ obj = obj, member = member, name = name or member }, {__mode = 'v'}) end function Watcher:render() imgui.Begin("Watch") if #self.watched_values > 0 then imgui.Columns(2) for k,v in ipairs(self.watched_values) do if v.obj and v.member then local status,res = pcall(function() return tostring(v.obj[v.member]) end) if status then imgui.TextUnformatted(v.name) imgui.NextColumn() imgui.TextUnformatted(res) imgui.NextColumn() else debug_overlay.console:error("Watcher: "..v.name.. " couldn't be read. ") debug_overlay.console:debug(res) table.remove(self.watched_values, k) end elseif v.obj == nil then imgui.TextUnformatted(v.name .. " <>") imgui.NextColumn() imgui.NextColumn() else imgui.TextUnformatted(v.name .. " <>") imgui.NextColumn() imgui.NextColumn() end end end imgui.End() end return Watcher