217 lines
7.8 KiB
Lua
217 lines
7.8 KiB
Lua
|
local meta = FindMetaTable("Weapon")
|
||
|
|
||
|
function meta:DrawWeaponCrosshair()
|
||
|
if GetConVar("crosshair"):GetInt() ~= 1 then return end
|
||
|
|
||
|
self:DrawCrosshairCross()
|
||
|
self:DrawCrosshairDot()
|
||
|
end
|
||
|
|
||
|
local ironsightscrosshair = CreateClientConVar("zs_ironsightscrosshair", "0", true, false):GetBool()
|
||
|
cvars.AddChangeCallback("zs_ironsightscrosshair", function(cvar, oldvalue, newvalue)
|
||
|
ironsightscrosshair = tonumber(newvalue) == 1
|
||
|
end)
|
||
|
|
||
|
--local CrossHairScale = 1
|
||
|
local matGrad = Material("VGUI/gradient-r")
|
||
|
local function DrawLine(x, y, rot)
|
||
|
local thickness = GAMEMODE.CrosshairThickness
|
||
|
|
||
|
rot = 270 - rot
|
||
|
surface.SetMaterial(matGrad)
|
||
|
surface.SetDrawColor(0, 0, 0, GAMEMODE.CrosshairColor.a)
|
||
|
surface.DrawTexturedRectRotated(x, y, 14, math.max(4 * thickness, 2 + 2 * thickness), rot)
|
||
|
surface.SetDrawColor(GAMEMODE.CrosshairColor)
|
||
|
surface.DrawTexturedRectRotated(x, y, 12, 2 * thickness, rot)
|
||
|
end
|
||
|
|
||
|
local baserot = 0
|
||
|
function meta:DrawCrosshairCross()
|
||
|
local x = ScrW() * 0.5
|
||
|
local y = ScrH() * 0.5
|
||
|
|
||
|
local ironsights = self.GetIronsights and self:GetIronsights()
|
||
|
|
||
|
local cone = self:GetCone()
|
||
|
|
||
|
if cone <= 0 or ironsights and not ironsightscrosshair then return end
|
||
|
|
||
|
--cone = ScrH() / 76.8 * cone
|
||
|
cone = ScrH() * 0.0003125 * cone
|
||
|
cone = cone * 90 / MySelf:GetFOV()
|
||
|
|
||
|
--CrossHairScale = cone --math.Approach(CrossHairScale, cone, FrameTime() * math.max(5, math.abs(CrossHairScale - cone) * 0.02))
|
||
|
|
||
|
local midarea = 40 * cone --CrossHairScale
|
||
|
|
||
|
local vel = MySelf:GetVelocity()
|
||
|
local len = vel:LengthSqr()
|
||
|
vel:Normalize()
|
||
|
if GAMEMODE.NoCrosshairRotate then
|
||
|
baserot = GAMEMODE.CrosshairOffset
|
||
|
else
|
||
|
baserot = math.NormalizeAngle(baserot + vel:Dot(EyeAngles():Right()) * math.min(10, len / 40000))
|
||
|
end
|
||
|
|
||
|
local ang = Angle(0, 0, baserot)
|
||
|
for i=0, 359, 360 / GAMEMODE.CrosshairLines do
|
||
|
ang.roll = baserot + i
|
||
|
local p = ang:Up() * midarea
|
||
|
DrawLine(math.Round(x + p.y), math.Round(y + p.z), ang.roll)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function meta:DrawCrosshairDot()
|
||
|
local x = ScrW() * 0.5
|
||
|
local y = ScrH() * 0.5
|
||
|
local thickness = GAMEMODE.CrosshairThickness
|
||
|
local size = 4 * thickness
|
||
|
local hsize = size/2
|
||
|
|
||
|
surface.SetDrawColor(GAMEMODE.CrosshairColor2)
|
||
|
surface.DrawRect(x - hsize, y - hsize, size, size)
|
||
|
surface.SetDrawColor(0, 0, 0, GAMEMODE.CrosshairColor2.a)
|
||
|
surface.DrawOutlinedRect(x - hsize, y - hsize, size, size)
|
||
|
|
||
|
if GAMEMODE.LastOTSBlocked and MySelf:Team() == TEAM_HUMAN and GAMEMODE:UseOverTheShoulder() then
|
||
|
GAMEMODE:DrawCircle(x, y, 8, COLOR_RED)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local matScope = Material("zombiesurvival/scope")
|
||
|
function meta:DrawRegularScope()
|
||
|
local scrw, scrh = ScrW(), ScrH()
|
||
|
local size = math.min(scrw, scrh)
|
||
|
surface.SetMaterial(matScope)
|
||
|
surface.SetDrawColor(255, 255, 255, 255)
|
||
|
surface.DrawTexturedRect((scrw - size) * 0.5, (scrh - size) * 0.5, size, size)
|
||
|
surface.SetDrawColor(0, 0, 0, 255)
|
||
|
if scrw > size then
|
||
|
local extra = (scrw - size) * 0.5
|
||
|
surface.DrawRect(0, 0, extra, scrh)
|
||
|
surface.DrawRect(scrw - extra, 0, extra, scrh)
|
||
|
end
|
||
|
if scrh > size then
|
||
|
local extra = (scrh - size) * 0.5
|
||
|
surface.DrawRect(0, 0, scrw, extra)
|
||
|
surface.DrawRect(0, scrh - extra, scrw, extra)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local texGradientU = Material("vgui/gradient-u")
|
||
|
local texGradientD = Material("vgui/gradient-d")
|
||
|
local texGradientR = Material("vgui/gradient-r")
|
||
|
function meta:DrawFuturisticScope()
|
||
|
local scrw, scrh = ScrW(), ScrH()
|
||
|
local size = math.min(scrw, scrh)
|
||
|
local hw,hh = scrw * 0.5, scrh * 0.5
|
||
|
local screenscale = BetterScreenScale()
|
||
|
local gradsize = math.ceil(size * 0.14)
|
||
|
local line = 38 * screenscale
|
||
|
|
||
|
for i=0,6 do
|
||
|
local rectsize = math.floor(screenscale * 44) + i * math.floor(130 * screenscale)
|
||
|
local hrectsize = rectsize * 0.5
|
||
|
surface.SetDrawColor(0,145,255,math.max(35,25 + i * 30)/2)
|
||
|
surface.DrawOutlinedRect(hw-hrectsize,hh-hrectsize,rectsize,rectsize)
|
||
|
end
|
||
|
if scrw > size then
|
||
|
local extra = (scrw - size) * 0.5
|
||
|
for i=0,12 do
|
||
|
surface.SetDrawColor(0,145,255, math.max(10,255 - i * 21.25)/2)
|
||
|
surface.DrawLine(hw,i*line,hw,i*line+line)
|
||
|
surface.DrawLine(hw,scrh-i*line,hw,scrh-i*line-line)
|
||
|
surface.DrawLine(i*line+extra,hh,i*line+line+extra,hh)
|
||
|
surface.DrawLine(scrw-i*line-extra,hh,scrw-i*line-line-extra,hh)
|
||
|
end
|
||
|
surface.SetDrawColor(0, 0, 0, 255)
|
||
|
surface.DrawRect(0, 0, extra, scrh)
|
||
|
surface.DrawRect(scrw - extra, 0, extra, scrh)
|
||
|
end
|
||
|
if scrh > size then
|
||
|
local extra = (scrh - size) * 0.5
|
||
|
for i=0,12 do
|
||
|
surface.SetDrawColor(0,145,255, math.max(10,255 - i * 21.25)/2)
|
||
|
surface.DrawLine(hw,i*line+extra,hw,i*line+line+extra)
|
||
|
surface.DrawLine(hw,scrh-i*line-extra,hw,scrh-i*line-line-extra)
|
||
|
surface.DrawLine(i*line,hh,i*line+line,hh)
|
||
|
surface.DrawLine(scrw-i*line,hh,scrw-i*line-line,hh)
|
||
|
end
|
||
|
surface.SetDrawColor(0, 0, 0, 255)
|
||
|
surface.DrawRect(0, 0, scrw, extra)
|
||
|
surface.DrawRect(0, scrh - extra, scrw, extra)
|
||
|
end
|
||
|
|
||
|
surface.SetMaterial(texGradientU)
|
||
|
surface.SetDrawColor(0,0,0,255)
|
||
|
surface.DrawTexturedRect((scrw - size) * 0.5, (scrh - size) * 0.5, size, gradsize)
|
||
|
surface.SetMaterial(texGradientD)
|
||
|
surface.DrawTexturedRect((scrw - size) * 0.5, scrh - (scrh - size) * 0.5 - gradsize, size, gradsize)
|
||
|
surface.SetMaterial(texGradientR)
|
||
|
surface.DrawTexturedRect(scrw - (scrw - size) * 0.5 - gradsize, (scrh - size) * 0.5, gradsize, size)
|
||
|
surface.DrawTexturedRectRotated((scrw - size) * 0.5 + gradsize / 2, (scrh - size) * 0.5 + size / 2, gradsize, size, 180)
|
||
|
end
|
||
|
|
||
|
function meta:BaseDrawWeaponSelection(x, y, wide, tall, alpha)
|
||
|
local ammotype1 = self:ValidPrimaryAmmo()
|
||
|
local ammotype2 = self:ValidSecondaryAmmo()
|
||
|
|
||
|
--killicon.Draw(x + wide * 0.5, y + tall * 0.5, self:GetClass(), 255)
|
||
|
-- Doesn't work with pngs...
|
||
|
local ki = killicon.Get(self:GetClass())
|
||
|
local cols = ki and ki[#ki] or ""
|
||
|
|
||
|
if ki and #ki == 3 then
|
||
|
draw.SimpleText(ki[2], ki[1] .. "ws", x + wide * 0.5, y + tall * 0.5 + 18 * BetterScreenScale(), Color(cols.r, cols.g, cols.b, alpha), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||
|
elseif ki then
|
||
|
local material = Material(ki[1])
|
||
|
local wid, hei = material:Width(), material:Height()
|
||
|
|
||
|
surface.SetMaterial(material)
|
||
|
surface.SetDrawColor(cols.r, cols.g, cols.b, alpha )
|
||
|
surface.DrawTexturedRect(x + wide * 0.5 - wid * 0.5, y + tall * 0.5 - hei * 0.5, wid, hei)
|
||
|
end
|
||
|
|
||
|
draw.SimpleTextBlur(self:GetPrintName(), "ZSHUDFontSmaller", x + wide * 0.5, y + tall * 0.15, COLOR_RED, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||
|
|
||
|
if ammotype1 then
|
||
|
local total = self:GetPrimaryAmmoCount()
|
||
|
local inclip = self:Clip1()
|
||
|
if inclip >= 0 then
|
||
|
if self.Primary and self.Primary.ClipSize and self.Primary.ClipSize == 1 then
|
||
|
draw.SimpleTextBlur("["..total.."]", "ZSHUDFontSmaller", x + wide * 0.05, y + tall * 0.8, total == 0 and COLOR_RED or color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_BOTTOM_REAL)
|
||
|
else
|
||
|
draw.SimpleTextBlur("["..inclip.." / ".. total - inclip .."]", "ZSHUDFontSmaller", x + wide * 0.05, y + tall * 0.8, total == 0 and COLOR_RED or inclip == 0 and COLOR_YELLOW or color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_BOTTOM_REAL)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if ammotype2 then
|
||
|
local total = self:GetSecondaryAmmoCount()
|
||
|
local inclip = self:Clip2()
|
||
|
if inclip >= 0 then
|
||
|
if self.Secondary and self.Secondary.ClipSize and self.Secondary.ClipSize == 1 then
|
||
|
draw.SimpleTextBlur("["..total.."]", "ZSHUDFontSmaller", x + wide * 0.95, y + tall * 0.8, total == 0 and COLOR_RED or color_white, TEXT_ALIGN_RIGHT, TEXT_ALIGN_BOTTOM_REAL)
|
||
|
else
|
||
|
draw.SimpleTextBlur("["..inclip.." / ".. total - inclip .."]", "ZSHUDFontSmaller", x + wide * 0.95, y + tall * 0.8, total == 0 and COLOR_RED or inclip == 0 and COLOR_YELLOW or color_white, TEXT_ALIGN_RIGHT, TEXT_ALIGN_BOTTOM_REAL)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local function empty() end
|
||
|
function meta:HideWorldModel()
|
||
|
self:DrawShadow(false)
|
||
|
self.DrawWorldModel = empty
|
||
|
self.DrawWorldModelTranslucent = empty
|
||
|
end
|
||
|
|
||
|
local function HiddenViewModel(self, pos, ang)
|
||
|
return pos + ang:Forward() * -256, ang
|
||
|
end
|
||
|
function meta:HideViewModel()
|
||
|
self.GetViewModelPosition = HiddenViewModel
|
||
|
end
|