local pray = {} local explain pray.activeprayers = {} function pray:DrawOnDPanel(panel) print("Attempted to draw prayer panel") --Active grid local agrid = vgui.Create("DGrid",panel) agrid:SetCols(4) local w = ((ScrW()/4) - 10) / 4 agrid:SetHeight(w) agrid:SetColWide(w) agrid:SetRowHeight(w) for i=1,4 do local rec = vgui.Create("DImageButton",agrid) rec:SetText("F"..i) rec:SetSize(w,w) rec.DoClick = function(s) local ap = self.activeprayers[i] explain:SetText(ap ~= nil and ap.Description or "Select a prayer") end rec:Receiver("prayer",function(s,tbl,dropped,mi,x,y) if not dropped then return end self.activeprayers[i] = tbl.item if tbl.item.DoOnPanel then tbl.item.DoOnPanel(s) end end,{}) agrid:AddItem(rec) end agrid:Dock(TOP) --Explanation of spells local explainpanel = vgui.Create("DPanel",panel) explainpanel:SetHeight(w*2) explainpanel:Dock(TOP) explainpanel:SetText("This panel will explain information about a hovered skill") explain = vgui.Create("DLabel",explainpanel) explain:Dock(FILL) explain:SetDark(true) --All spells we know local scroll = vgui.Create( "DScrollPanel", panel ) scroll:Dock( FILL ) local grid = vgui.Create("DGrid",scroll) grid:SetCols(4) grid:SetColWide(w) grid:SetRowHeight(w) local function drawprayer(prayer) local rec = vgui.Create("DImageButton",grid) rec:SetText(prayer.Name) rec:SetSize(w,w) if(prayer.DoOnPanel) then prayer:DoOnPanel(rec) end rec.item = prayer rec:Droppable("prayer") grid:AddItem(rec) end for k,v in pairs(self.track) do drawprayer(v) end local observer = {} observer.Put = function(obs,pos,item) print("Prayer observer got request to put") drawprayer(item) end observer.Remove = function(obs,pos,item) print("I should never remove a prayer!") end return observer end --Rebind f1, f2, f3, f4 to prayers local prayerhooks = { ["gm_showhelp"] = 1, ["gm_showteam"] = 2, ["gm_showspare1"] = 3, ["gm_showspare2"] = 4 } hook.Add("PlayerBindPress", function( ply, bind, pressed ) local phn = prayerhooks[bind] if phn == nil then return end local pap = pray.activeprayers[phn] if pap == nil then return end pap:pray() end) return pray