zombiesurvival-evolved/gamemodes/zombiesurvival/entities/weapons/weapon_zs_base/cl_init.lua

292 lines
7.9 KiB
Lua
Raw Permalink Normal View History

INC_CLIENT()
2014-10-02 08:49:54 +08:00
include("animations.lua")
SWEP.DrawAmmo = true
SWEP.DrawCrosshair = false
SWEP.ViewModelFOV = 60
SWEP.ViewModelFlip = true
SWEP.BobScale = 1
SWEP.SwayScale = 1
SWEP.Slot = 0
SWEP.IronsightsMultiplier = 0.6
SWEP.HUD3DScale = 0.01
SWEP.HUD3DBone = "base"
SWEP.HUD3DAng = Angle(180, 0, 0)
function SWEP:Deploy()
return true
end
function SWEP:TranslateFOV(fov)
return (GAMEMODE.FOVLerp + (self.IsScoped and not GAMEMODE.DisableScopes and 0 or (1 - GAMEMODE.FOVLerp) * (1 - GAMEMODE.IronsightZoomScale))) * fov
2014-10-02 08:49:54 +08:00
end
function SWEP:AdjustMouseSensitivity()
if self:GetIronsights() then return GAMEMODE.FOVLerp + (self.IsScoped and not GAMEMODE.DisableScopes and 0 or (1 - GAMEMODE.FOVLerp) * (1 - GAMEMODE.IronsightZoomScale)) end
2014-10-02 08:49:54 +08:00
end
function SWEP:PreDrawViewModel(vm)
if self.ShowViewModel == false then
render.SetBlend(0)
end
end
function SWEP:PostDrawViewModel(vm)
if self.ShowViewModel == false then
render.SetBlend(1)
end
if self.HUD3DPos and GAMEMODE:ShouldDraw3DWeaponHUD() then
local pos, ang = self:GetHUD3DPos(vm)
if pos then
self:Draw3DHUD(vm, pos, ang)
end
2014-10-02 08:49:54 +08:00
end
end
function SWEP:GetHUD3DPos(vm)
local bone = vm:LookupBone(self.HUD3DBone)
if not bone then return end
local m = vm:GetBoneMatrix(bone)
if not m then return end
local pos, ang = m:GetTranslation(), m:GetAngles()
if self.ViewModelFlip then
ang.r = -ang.r
end
local offset = self.HUD3DPos
local aoffset = self.HUD3DAng
pos = pos + ang:Forward() * offset.x + ang:Right() * offset.y + ang:Up() * offset.z
if aoffset.yaw ~= 0 then ang:RotateAroundAxis(ang:Up(), aoffset.yaw) end
if aoffset.pitch ~= 0 then ang:RotateAroundAxis(ang:Right(), aoffset.pitch) end
if aoffset.roll ~= 0 then ang:RotateAroundAxis(ang:Forward(), aoffset.roll) end
return pos, ang
end
local colBG = Color(16, 16, 16, 90)
local colRed = Color(220, 0, 0, 230)
local colYellow = Color(220, 220, 0, 230)
local colWhite = Color(220, 220, 220, 230)
local colAmmo = Color(255, 255, 255, 230)
local function GetAmmoColor(clip, maxclip)
if clip == 0 then
colAmmo.r = 255 colAmmo.g = 0 colAmmo.b = 0
else
local sat = clip / maxclip
colAmmo.r = 255
colAmmo.g = sat ^ 0.3 * 255
colAmmo.b = sat * 255
end
end
function SWEP:GetDisplayAmmo(clip, spare, maxclip)
if self.RequiredClip ~= 1 then
clip = math.floor(clip / self.RequiredClip)
spare = math.floor(spare / self.RequiredClip)
maxclip = math.ceil(maxclip / self.RequiredClip)
end
if self.AmmoUse then
clip = math.floor(clip / self.AmmoUse)
spare = math.floor(spare / self.AmmoUse)
maxclip = math.ceil(maxclip / self.AmmoUse)
end
return clip, spare, maxclip
end
2014-10-02 08:49:54 +08:00
function SWEP:Draw3DHUD(vm, pos, ang)
local wid, hei = 180, 200
local x, y = wid * -0.6, hei * -0.5
local clip = self:Clip1()
local spare = self:GetOwner():GetAmmoCount(self:GetPrimaryAmmoType())
2014-10-02 08:49:54 +08:00
local maxclip = self.Primary.ClipSize
local dclip, dspare, dmaxclip = self:GetDisplayAmmo(clip, spare, maxclip)
2014-10-02 08:49:54 +08:00
cam.Start3D2D(pos, ang, self.HUD3DScale / 2)
draw.RoundedBoxEx(32, x, y, wid, hei, colBG, true, false, true, false)
local displayspare = dmaxclip > 0 and self.Primary.DefaultClip ~= 99999
2014-10-02 08:49:54 +08:00
if displayspare then
draw.SimpleTextBlurry(dspare, dspare >= 1000 and "ZS3D2DFontSmall" or "ZS3D2DFont", x + wid * 0.5, y + hei * 0.75, dspare == 0 and colRed or dspare <= dmaxclip and colYellow or colWhite, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
2014-10-02 08:49:54 +08:00
end
GetAmmoColor(dclip, dmaxclip)
draw.SimpleTextBlurry(dclip, dclip >= 100 and "ZS3D2DFont" or "ZS3D2DFontBig", x + wid * 0.5, y + hei * (displayspare and 0.3 or 0.5), colAmmo, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
2014-10-02 08:49:54 +08:00
cam.End3D2D()
end
function SWEP:Draw2DHUD()
local screenscale = BetterScreenScale()
local wid, hei = 180 * screenscale, 64 * screenscale
local x, y = ScrW() - wid - screenscale * 128, ScrH() - hei - screenscale * 72
local clip = self:Clip1()
local spare = self:GetOwner():GetAmmoCount(self:GetPrimaryAmmoType())
2014-10-02 08:49:54 +08:00
local maxclip = self.Primary.ClipSize
local dclip, dspare, dmaxclip = self:GetDisplayAmmo(clip, spare, maxclip)
2014-10-02 08:49:54 +08:00
draw.RoundedBox(16, x, y, wid, hei, colBG)
local displayspare = dmaxclip > 0 and self.Primary.DefaultClip ~= 99999
2014-10-02 08:49:54 +08:00
if displayspare then
draw.SimpleTextBlurry(dspare, dspare >= 1000 and "ZSHUDFontSmall" or "ZSHUDFont", x + wid * 0.75, y + hei * 0.5, dspare == 0 and colRed or dspare <= dmaxclip and colYellow or colWhite, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
2014-10-02 08:49:54 +08:00
end
GetAmmoColor(dclip, dmaxclip)
draw.SimpleTextBlurry(dclip, dclip >= 100 and "ZSHUDFont" or "ZSHUDFontBig", x + wid * (displayspare and 0.25 or 0.5), y + hei * 0.5, colAmmo, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
2014-10-02 08:49:54 +08:00
end
function SWEP:Think()
if self:GetIronsights() and not self:GetOwner():KeyDown(IN_ATTACK2) then
2014-10-02 08:49:54 +08:00
self:SetIronsights(false)
end
if self:GetReloadFinish() > 0 then
if CurTime() >= self:GetReloadFinish() then
self:FinishReload()
end
return
elseif self.IdleAnimation and self.IdleAnimation <= CurTime() then
self.IdleAnimation = nil
self:SendWeaponAnim(self.IdleActivity)
end
2014-10-02 08:49:54 +08:00
end
function SWEP:GetIronsightsDeltaMultiplier()
local bIron = self:GetIronsights()
local fIronTime = self.fIronTime or 0
if not bIron and fIronTime < CurTime() - 0.25 then
2014-10-02 08:49:54 +08:00
return 0
end
local Mul = 1
if fIronTime > CurTime() - 0.25 then
Mul = math.Clamp((CurTime() - fIronTime) * 4, 0, 1)
if not bIron then Mul = 1 - Mul end
end
return Mul
end
local ghostlerp = 0
function SWEP:CalcViewModelView(vm, oldpos, oldang, pos, ang)
local bIron = self:GetIronsights() and not GAMEMODE.NoIronsights
2014-10-02 08:49:54 +08:00
if bIron ~= self.bLastIron then
self.bLastIron = bIron
self.fIronTime = CurTime()
if bIron then
2014-10-02 08:49:54 +08:00
self.SwayScale = 0.3
self.BobScale = 0.1
else
2014-10-02 08:49:54 +08:00
self.SwayScale = 2.0
self.BobScale = 1.5
end
end
local Mul = math.Clamp((CurTime() - (self.fIronTime or 0)) * 4, 0, 1)
if not bIron then Mul = 1 - Mul end
if Mul > 0 then
local Offset = self.IronSightsPos
if self.IronSightsAng then
ang = Angle(ang.p, ang.y, ang.r)
ang:RotateAroundAxis(ang:Right(), self.IronSightsAng.x * Mul)
ang:RotateAroundAxis(ang:Up(), self.IronSightsAng.y * Mul)
ang:RotateAroundAxis(ang:Forward(), self.IronSightsAng.z * Mul)
end
pos = pos + Offset.x * Mul * ang:Right() + Offset.y * Mul * ang:Forward() + Offset.z * Mul * ang:Up()
end
if self:GetOwner():GetBarricadeGhosting() then
2014-10-02 08:49:54 +08:00
ghostlerp = math.min(1, ghostlerp + FrameTime() * 4)
elseif ghostlerp > 0 then
ghostlerp = math.max(0, ghostlerp - FrameTime() * 5)
end
if ghostlerp > 0 then
pos = pos + 3.5 * ghostlerp * ang:Up()
ang:RotateAroundAxis(ang:Right(), -30 * ghostlerp)
end
return pos, ang
end
function SWEP:DrawWeaponSelection(x, y, w, h, alpha)
self:BaseDrawWeaponSelection(x, y, w, h, alpha)
2014-10-02 08:49:54 +08:00
end
function SWEP:DrawHUD()
self:DrawWeaponCrosshair()
2014-10-02 08:49:54 +08:00
if GAMEMODE:ShouldDraw2DWeaponHUD() then
2014-10-02 08:49:54 +08:00
self:Draw2DHUD()
end
end
local OverrideIronSights = {}
function SWEP:CheckCustomIronSights()
local class = self:GetClass()
if OverrideIronSights[class] then
if type(OverrideIronSights[class]) == "table" then
self.IronSightsPos = OverrideIronSights[class].Pos
self.IronSightsAng = OverrideIronSights[class].Ang
end
return
end
local filename = "ironsights/"..class..".txt"
if file.Exists(filename, "MOD") then
local pos = Vector(0, 0, 0)
local ang = Vector(0, 0, 0)
local tab = string.Explode(" ", file.Read(filename, "MOD"))
pos.x = tonumber(tab[1]) or 0
pos.y = tonumber(tab[2]) or 0
pos.z = tonumber(tab[3]) or 0
ang.x = tonumber(tab[4]) or 0
ang.y = tonumber(tab[5]) or 0
ang.z = tonumber(tab[6]) or 0
OverrideIronSights[class] = {Pos = pos, Ang = ang}
self.IronSightsPos = pos
self.IronSightsAng = ang
else
OverrideIronSights[class] = true
end
end
function SWEP:OnRemove()
self:Anim_OnRemove()
end
function SWEP:ViewModelDrawn()
self:Anim_ViewModelDrawn()
end
function SWEP:DrawWorldModel()
local owner = self:GetOwner()
if owner:IsValid() and (owner.ShadowMan or owner.SpawnProtection) then return end
2014-10-02 08:49:54 +08:00
self:Anim_DrawWorldModel()
end