//Toggle command
local showing = true
concommand.Add("Entity", function()
if showing then
showing = false
else
showing = true
end
end)
//Everything menu related
local EntsToShow = {}
local OtherEnts = {}
concommand.Add("Emenu", function(ply, cmd, args)
function Reload(startX, startY)
table.Empty(OtherEnts)
for k,v in pairs(ents.GetAll()) do
local addToAllEnts = true
for i,p in pairs(EntsToShow) do
if p == v:GetClass() then
addToAllEnts = false
end
end
for i,p in pairs(OtherEnts) do
if p == v:GetClass() then
addToAllEnts = false
end
end
if addToAllEnts then
table.insert(OtherEnts, v:GetClass())
end
end
local main = vgui.Create( "DFrame" )
main:SetSize( 400, 250 )
if startX and startY then
main:SetPos(startX, startY)
else
main:Center()
end
main:SetTitle( "" )
main:SetVisible( true )
main:SetDraggable( true )
main:ShowCloseButton( true )
main:MakePopup()
main.Paint = function()
end
DermaList = vgui.Create( "DPanelList", main )
DermaList:SetPos( 25,25 )
DermaList:SetSize( 700, 500 )
DermaList:SetSpacing( 75 )
DermaList:EnableHorizontal( false )
DermaList:EnableVerticalScrollbar( true )
local SelectedEnts = vgui.Create("DListView")
SelectedEnts:SetSize(150, 200)
SelectedEnts:SetPos(0, 0)
SelectedEnts:SetMultiSelect(false)
SelectedEnts:AddColumn("Ents to show")
for k,v in pairs(EntsToShow) do
SelectedEnts:AddLine(v)
end
SelectedEnts.DoDoubleClick = function(parent, index, list)
table.remove(EntsToShow, index)
main:Close()
local x, y = main:GetPos()
Reload(x, y)
end
DermaList:Add(SelectedEnts)
local AllEnts = vgui.Create("DListView")
AllEnts:SetSize(150, 200)
AllEnts:SetPos(200, 0)
AllEnts:SetMultiSelect(false)
AllEnts:AddColumn("Ents not to show")
for k,v in pairs(OtherEnts) do
AllEnts:AddLine(v)
end
AllEnts.DoDoubleClick = function(parent, index, list)
table.insert(EntsToShow, OtherEnts[index])
main:Close()
local x, y = main:GetPos()
Reload(x, y)
end
DermaList:Add(AllEnts)
end
Reload()
end)
//Actually drawing information
hook.Add("HUDPaint", "Entity", function()
if showing then
for k,v in pairs(ents.GetAll()) do
local drawing = false
for i,p in pairs(EntsToShow) do
if v:GetClass() == p then
drawing = true
end
end
if drawing then
local stuff = v:GetPos():ToScreen()
surface.SetTextPos( stuff.x - 15, stuff.y )
surface.SetFont("default")
local text = v:GetClass()
surface.DrawText( text )
local Width, Height = surface.GetTextSize(text)
surface.SetDrawColor( 255, 0, 0, 255)
surface.DrawOutlinedRect( stuff.x - 20, stuff.y, Width + 10, Height + 5)
end
end
end
end)