| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- --[[
- Debug variable watch class
- @author : Eiyeron Fulmincendii
- A Flixel-like watch class to be able to track down variables and check them in real time.
- Add a variable to watch over like this:
- debug_overlay.watch:add(my_object, "name of object member")
- Note that if the member is destroyed or unreadable, the variable will be automatically removed.
- ]]--
- 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 .. " <<Miss. obj.>>")
- imgui.NextColumn()
- imgui.NextColumn()
- else
- imgui.TextUnformatted(v.name .. " <<Miss. mem.>>")
- imgui.NextColumn()
- imgui.NextColumn()
- end
- end
- end
- imgui.End()
- end
- return Watcher
|