init.lua 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. --[[
  2. Debug variable watch class
  3. @author : Eiyeron Fulmincendii
  4. A Flixel-like watch class to be able to track down variables and check them in real time.
  5. Add a variable to watch over like this:
  6. debug_overlay.watch:add(my_object, "name of object member")
  7. Note that if the member is destroyed or unreadable, the variable will be automatically removed.
  8. ]]--
  9. local class = require("class")
  10. local DebugWindow = require("debug_overlay.debugwindow")
  11. require "imgui"
  12. local Watcher = class(DebugWindow)
  13. function Watcher:init( )
  14. self.watched_values = {}
  15. self.shortcut = "f10"
  16. end
  17. function Watcher:add(obj, member, name)
  18. self.watched_values[#self.watched_values + 1] = setmetatable({
  19. obj = obj,
  20. member = member,
  21. name = name or member
  22. }, {__mode = 'v'})
  23. end
  24. function Watcher:render()
  25. imgui.Begin("Watch")
  26. if #self.watched_values > 0 then
  27. imgui.Columns(2)
  28. for k,v in ipairs(self.watched_values) do
  29. if v.obj and v.member then
  30. local status,res = pcall(function() return tostring(v.obj[v.member]) end)
  31. if status then
  32. imgui.TextUnformatted(v.name)
  33. imgui.NextColumn()
  34. imgui.TextUnformatted(res)
  35. imgui.NextColumn()
  36. else
  37. debug_overlay.console:error("Watcher: "..v.name.. " couldn't be read. ")
  38. debug_overlay.console:debug(res)
  39. table.remove(self.watched_values, k)
  40. end
  41. elseif v.obj == nil then
  42. imgui.TextUnformatted(v.name .. " <<Miss. obj.>>")
  43. imgui.NextColumn()
  44. imgui.NextColumn()
  45. else
  46. imgui.TextUnformatted(v.name .. " <<Miss. mem.>>")
  47. imgui.NextColumn()
  48. imgui.NextColumn()
  49. end
  50. end
  51. end
  52. imgui.End()
  53. end
  54. return Watcher