mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
202
lua/weapons/tfa_gun_base/client/effects.lua
Normal file
202
lua/weapons/tfa_gun_base/client/effects.lua
Normal file
@@ -0,0 +1,202 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
-- Copyright (c) 2018-2020 TFA Base Devs
|
||||
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
-- of this software and associated documentation files (the "Software"), to deal
|
||||
-- in the Software without restriction, including without limitation the rights
|
||||
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
-- copies of the Software, and to permit persons to whom the Software is
|
||||
-- furnished to do so, subject to the following conditions:
|
||||
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
|
||||
local vector_up = Vector(0, 0, 1)
|
||||
local math = math
|
||||
local render = render
|
||||
local LerpVector = LerpVector
|
||||
|
||||
--[[
|
||||
Function Name: ComputeSmokeLighting
|
||||
Syntax: self:ComputeSmokeLighting(pos, nrm, pcf).
|
||||
Returns: Nothing.
|
||||
Notes: Used to light the muzzle smoke trail, by setting its PCF Control Point 1
|
||||
Purpose: FX
|
||||
]]--
|
||||
function SWEP:ComputeSmokeLighting( pos, nrm, pcf )
|
||||
if not IsValid(pcf) then return end
|
||||
local licht = render.ComputeLighting(pos, nrm)
|
||||
local lichtFloat = math.Clamp((licht.r + licht.g + licht.b) / 3, 0, TFA.Particles.SmokeLightingClamp) / TFA.Particles.SmokeLightingClamp
|
||||
local lichtFinal = LerpVector(lichtFloat, TFA.Particles.SmokeLightingMin, TFA.Particles.SmokeLightingMax)
|
||||
pcf:SetControlPoint(1, lichtFinal)
|
||||
end
|
||||
|
||||
--[[
|
||||
Function Name: SmokePCFLighting
|
||||
Syntax: self:SmokePCFLighting().
|
||||
Returns: Nothing.
|
||||
Notes: Used to loop through all of our SmokePCF tables and call ComputeSmokeLighting on them
|
||||
Purpose: FX
|
||||
]]--
|
||||
function SWEP:SmokePCFLighting()
|
||||
local mzPos = self:GetMuzzlePos()
|
||||
if not mzPos or not mzPos.Pos then return end
|
||||
local pos = mzPos.Pos
|
||||
if self.SmokePCF then
|
||||
for _, v in pairs(self.SmokePCF) do
|
||||
self:ComputeSmokeLighting(pos, vector_up, v)
|
||||
end
|
||||
end
|
||||
if not self:VMIV() then return end
|
||||
local vm = self.OwnerViewModel
|
||||
if vm.SmokePCF then
|
||||
for _, v in pairs(vm.SmokePCF) do
|
||||
self:ComputeSmokeLighting(pos, vector_up, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
Function Name: FireAnimationEvent
|
||||
Syntax: self:FireAnimationEvent( position, angle, event id, options).
|
||||
Returns: Nothing.
|
||||
Notes: Used to capture and disable viewmodel animation events, unless you disable that feature.
|
||||
Purpose: FX
|
||||
]]--
|
||||
function SWEP:FireAnimationEvent(pos, ang, event, options)
|
||||
if self.CustomMuzzleFlash or not self.MuzzleFlashEnabled then
|
||||
-- Disables animation based muzzle event
|
||||
if (event == 21) then return true end
|
||||
-- Disable thirdperson muzzle flash
|
||||
if (event == 5003) then return true end
|
||||
|
||||
-- Disable CS-style muzzle flashes, but chance our muzzle flash attachment if one is given.
|
||||
if (event == 5001 or event == 5011 or event == 5021 or event == 5031) then
|
||||
if self.AutoDetectMuzzleAttachment then
|
||||
self.MuzzleAttachmentRaw = math.Clamp(math.floor((event - 4991) / 10), 1, 4)
|
||||
self:ShootEffectsCustom(true)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
if (self.LuaShellEject and event ~= 5004) then return true end
|
||||
end
|
||||
|
||||
--[[
|
||||
Function Name: MakeMuzzleSmoke
|
||||
Syntax: self:MakeMuzzleSmoke( entity, attachment).
|
||||
Returns: Nothing.
|
||||
Notes: Deprecated. Used to make the muzzle smoke effect, clientside.
|
||||
Purpose: FX
|
||||
]]--
|
||||
|
||||
local limit_particle_cv = GetConVar("cl_tfa_fx_muzzlesmoke_limited")
|
||||
|
||||
function SWEP:MakeMuzzleSmoke(entity, attachment)
|
||||
if ( not limit_particle_cv ) or limit_particle_cv:GetBool() then
|
||||
self:CleanParticles()
|
||||
end
|
||||
local ht = self.DefaultHoldType and self.DefaultHoldType or self.HoldType
|
||||
|
||||
if (CLIENT and TFA.GetMZSmokeEnabled() and IsValid(entity) and attachment and attachment ~= 0) then
|
||||
ParticleEffectAttach(self.SmokeParticles[ht], PATTACH_POINT_FOLLOW, entity, attachment)
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
Function Name: ImpactEffect
|
||||
Syntax: self:ImpactEffect( position, normal (ang:Up()), materialt ype).
|
||||
Returns: Nothing.
|
||||
Notes: Used to make the impact effect. See utilities code for CanDustEffect.
|
||||
Purpose: FX
|
||||
]]--
|
||||
|
||||
function SWEP:DoImpactEffect(tr, dmgtype)
|
||||
if tr.HitSky then return true end
|
||||
local ib = self.BashBase and IsValid(self) and self:GetBashing()
|
||||
local dmginfo = DamageInfo()
|
||||
dmginfo:SetDamageType(dmgtype)
|
||||
|
||||
if dmginfo:IsDamageType(DMG_SLASH) or (ib and self.Secondary_TFA.BashDamageType == DMG_SLASH and tr.MatType ~= MAT_FLESH and tr.MatType ~= MAT_ALIENFLESH) or (self and self.DamageType and self.DamageType == DMG_SLASH) then
|
||||
util.Decal("ManhackCut", tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
if ib and self.Secondary_TFA.BashDamageType == DMG_GENERIC then return true end
|
||||
if ib then return end
|
||||
|
||||
if IsValid(self) then
|
||||
self:ImpactEffectFunc(tr.HitPos, tr.HitNormal, tr.MatType)
|
||||
end
|
||||
|
||||
if self.ImpactDecal and self.ImpactDecal ~= "" then
|
||||
util.Decal(self.ImpactDecal, tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal)
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local impact_cl_enabled = GetConVar("cl_tfa_fx_impact_enabled")
|
||||
local impact_sv_enabled = GetConVar("sv_tfa_fx_impact_override")
|
||||
|
||||
function SWEP:ImpactEffectFunc(pos, normal, mattype)
|
||||
local enabled
|
||||
|
||||
if impact_cl_enabled then
|
||||
enabled = impact_cl_enabled:GetBool()
|
||||
else
|
||||
enabled = true
|
||||
end
|
||||
|
||||
if impact_sv_enabled and impact_sv_enabled:GetInt() >= 0 then
|
||||
enabled = impact_sv_enabled:GetBool()
|
||||
end
|
||||
|
||||
if enabled then
|
||||
local fx = EffectData()
|
||||
fx:SetOrigin(pos)
|
||||
fx:SetNormal(normal)
|
||||
|
||||
if self:CanDustEffect(mattype) then
|
||||
TFA.Effects.Create("tfa_dust_impact", fx)
|
||||
end
|
||||
|
||||
if self:CanSparkEffect(mattype) then
|
||||
TFA.Effects.Create("tfa_metal_impact", fx)
|
||||
end
|
||||
|
||||
local scal = math.sqrt(self:GetStatL("Primary.Damage") / 30)
|
||||
if mattype == MAT_FLESH then
|
||||
scal = scal * 0.25
|
||||
end
|
||||
fx:SetEntity(self:GetOwner())
|
||||
fx:SetMagnitude(mattype or 0)
|
||||
fx:SetScale( scal )
|
||||
TFA.Effects.Create("tfa_bullet_impact", fx)
|
||||
|
||||
if self.ImpactEffect then
|
||||
TFA.Effects.Create(self.ImpactEffect, fx)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user