148 lines
3.2 KiB
Lua
148 lines
3.2 KiB
Lua
local function WeaponButtonDoClick(self)
|
|
local swep = self.SWEP
|
|
if swep then
|
|
pWeapons:SetWeaponViewerSWEP(self.SWEP)
|
|
end
|
|
end
|
|
|
|
local Features = {
|
|
{"WalkSpeed", "Movement speed"},
|
|
{"MeleeDamage", "Damage"},
|
|
{"MeleeRange", "Range"},
|
|
{"MeleeSize", "Size"},
|
|
|
|
{"ClipSize", "Clip size", 0, 50, false, "Primary"},
|
|
{"Damage", "Damage", 2, 100, false, "Primary"},
|
|
{"NumShots", "Number of shots", 1, 12, false, "Primary"},
|
|
{"Delay", "Rate of fire", 0.05, 3, true, "Primary"},
|
|
|
|
{"ConeMax", "Minimum accuracy"},
|
|
{"ConeMin", "Maximum accuracy"}
|
|
}
|
|
|
|
local function SetWeaponViewerSWEP(self, swep)
|
|
if self.Viewer then
|
|
if self.Viewer:Valid() then
|
|
self.Viewer:Remove()
|
|
end
|
|
self.Viewer = nil
|
|
end
|
|
|
|
local wid, hei = self:GetWide() * 0.6 - 16, self:GetTall() - self.ViewerY - 8
|
|
local halfwid = wid * 0.5
|
|
|
|
local viewer = vgui.Create("DPanel", self)
|
|
viewer:SetPaintBackground(false)
|
|
viewer:SetSize(wid, hei)
|
|
viewer:SetPos(self:GetWide() - viewer:GetWide() - 8, self.ViewerY)
|
|
self.Viewer = viewer
|
|
|
|
if not swep then return end
|
|
local sweptable = weapons.GetStored(swep)
|
|
if not sweptable then return end
|
|
|
|
local title = EasyLabel(viewer, sweptable.PrintName or swep, "ZSHUDFontSmall", COLOR_GRAY)
|
|
title:SetContentAlignment(8)
|
|
title:Dock(TOP)
|
|
|
|
if sweptable.WorldModel then
|
|
local bg = vgui.Create("DPanel", viewer)
|
|
bg:SetSize(92, 92)
|
|
bg:Dock(TOP)
|
|
bg:DockMargin(100, 0, 100, 0)
|
|
|
|
local modelpanel = vgui.Create("DModelPanelEx", bg)
|
|
modelpanel:SetModel(sweptable.WorldModel)
|
|
modelpanel:AutoCam()
|
|
modelpanel:Dock(FILL)
|
|
end
|
|
|
|
local text = ""
|
|
|
|
if sweptable.Description then
|
|
text = text..sweptable.Description
|
|
end
|
|
|
|
for i, featuretab in ipairs(Features) do
|
|
local touse
|
|
if featuretab[6] then
|
|
touse = sweptable[ featuretab[6] ]
|
|
else
|
|
touse = sweptable
|
|
end
|
|
|
|
local value = touse[ featuretab[1] ]
|
|
if value then
|
|
text = text.."\n"..featuretab[2]..": "..value
|
|
end
|
|
end
|
|
|
|
local desc = vgui.Create("DLabel", viewer)
|
|
desc:SetText(text)
|
|
desc:SetMultiline(true)
|
|
desc:SetWrap(true)
|
|
desc:Dock(FILL)
|
|
end
|
|
|
|
function MakepWeapons(silent)
|
|
if not silent then
|
|
PlayMenuOpenSound()
|
|
end
|
|
|
|
if pWeapons then
|
|
pWeapons:SetAlpha(0)
|
|
pWeapons:AlphaTo(255, 0.5, 0)
|
|
pWeapons:SetVisible(true)
|
|
pWeapons:MakePopup()
|
|
return
|
|
end
|
|
|
|
local added = {}
|
|
|
|
local weps = {}
|
|
for _, tab in pairs(GAMEMODE.Items) do
|
|
if tab.SWEP and not added[tab.SWEP] then
|
|
weps[#weps + 1] = tab.SWEP
|
|
end
|
|
end
|
|
|
|
local wid, hei = 600, 400
|
|
|
|
local frame = vgui.Create("DFrame")
|
|
frame:SetDeleteOnClose(false)
|
|
frame:SetSize(wid, hei)
|
|
frame:SetTitle(" ")
|
|
frame:Center()
|
|
frame.SetWeaponViewerSWEP = SetWeaponViewerSWEP
|
|
pWeapons = frame
|
|
|
|
local y = 8
|
|
|
|
local title = EasyLabel(frame, "Weapon Database", "ZSHUDFont", color_white)
|
|
title:SetPos(wid * 0.5 - title:GetWide() * 0.5, y)
|
|
y = y + title:GetTall() + 8
|
|
|
|
frame.ViewerY = y
|
|
|
|
local tree = vgui.Create("DTree", frame)
|
|
tree:SetSize(wid * 0.4 - 8, hei - y - 8)
|
|
tree:SetPos(8, y)
|
|
tree:SetIndentSize(4)
|
|
frame.Tree = tree
|
|
|
|
for _, wep in pairs(weps) do
|
|
local enttab = weapons.GetStored(wep)
|
|
local wepnode
|
|
if enttab then
|
|
wepnode = tree:AddNode(enttab.PrintName or wep)
|
|
else
|
|
wepnode = tree:AddNode(wep)
|
|
end
|
|
wepnode.SWEP = wep
|
|
wepnode.DoClick = WeaponButtonDoClick
|
|
end
|
|
|
|
frame:SetWeaponViewerSWEP()
|
|
|
|
MakepWeapons(true)
|
|
end
|