init.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. local class = require("class")
  2. local DebugWindow = require("debug_overlay.debugwindow")
  3. require "imgui"
  4. local Watcher = class(DebugWindow)
  5. function Watcher:init( )
  6. self.watched_values = {}
  7. self.shortcut = "f10"
  8. end
  9. function Watcher:add(obj, member, name)
  10. self.watched_values[#self.watched_values + 1] = setmetatable({
  11. obj = obj,
  12. member = member,
  13. name = name or member
  14. }, {__mode = 'v'})
  15. end
  16. function Watcher:render()
  17. imgui.Begin("Watch")
  18. if #self.watched_values > 0 then
  19. imgui.Columns(2)
  20. for k,v in ipairs(self.watched_values) do
  21. if v.obj and v.member then
  22. local status,res = pcall(function() return tostring(v.obj[v.member]) end)
  23. if status then
  24. imgui.TextUnformatted(v.name)
  25. imgui.NextColumn()
  26. imgui.TextUnformatted(res)
  27. imgui.NextColumn()
  28. else
  29. debug_overlay.console:error("Watcher: "..v.name.. " couldn't be read. ")
  30. debug_overlay.console:debug(res)
  31. table.remove(self.watched_values, k)
  32. end
  33. elseif v.obj == nil then
  34. imgui.TextUnformatted(v.name .. " <<Miss. obj.>>")
  35. imgui.NextColumn()
  36. imgui.NextColumn()
  37. else
  38. imgui.TextUnformatted(v.name .. " <<Miss. mem.>>")
  39. imgui.NextColumn()
  40. imgui.NextColumn()
  41. end
  42. end
  43. end
  44. imgui.End()
  45. end
  46. return Watcher