mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
129
lua/entities/lvs_base/cl_effects.lua
Normal file
129
lua/entities/lvs_base/cl_effects.lua
Normal file
@@ -0,0 +1,129 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
function ENT:StartWindSounds()
|
||||
if not LVS.ShowEffects then return end
|
||||
|
||||
self:StopWindSounds()
|
||||
|
||||
if LocalPlayer():lvsGetVehicle() ~= self then return end
|
||||
|
||||
local EntTable = self:GetTable()
|
||||
|
||||
EntTable._WindSFX = CreateSound( self, "LVS.Physics.Wind" )
|
||||
EntTable._WindSFX:PlayEx(0,100)
|
||||
|
||||
EntTable._WaterSFX = CreateSound( self, "LVS.Physics.Water" )
|
||||
EntTable._WaterSFX:PlayEx(0,100)
|
||||
end
|
||||
|
||||
function ENT:StopWindSounds()
|
||||
local EntTable = self:GetTable()
|
||||
|
||||
if EntTable._WindSFX then
|
||||
EntTable._WindSFX:Stop()
|
||||
EntTable._WindSFX = nil
|
||||
end
|
||||
|
||||
if EntTable._WaterSFX then
|
||||
EntTable._WaterSFX:Stop()
|
||||
EntTable._WaterSFX = nil
|
||||
end
|
||||
end
|
||||
|
||||
ENT.DustEffectSurfaces = {
|
||||
["sand"] = true,
|
||||
["dirt"] = true,
|
||||
["grass"] = true,
|
||||
}
|
||||
|
||||
ENT.GroundEffectsMultiplier = 1
|
||||
|
||||
function ENT:DoVehicleFX()
|
||||
local EntTable = self:GetTable()
|
||||
|
||||
if EntTable.GroundEffectsMultiplier <= 0 or not LVS.ShowEffects then self:StopWindSounds() return end
|
||||
|
||||
local Vel = self:GetVelocity():Length() * EntTable.GroundEffectsMultiplier
|
||||
|
||||
if EntTable._WindSFX then EntTable._WindSFX:ChangeVolume( math.Clamp( (Vel - 1200) / 2800,0,1 ), 0.25 ) end
|
||||
|
||||
if Vel < 1500 then
|
||||
if EntTable._WaterSFX then EntTable._WaterSFX:ChangeVolume( 0, 0.25 ) end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (EntTable.nextFX or 0) < CurTime() then
|
||||
EntTable.nextFX = CurTime() + 0.05
|
||||
|
||||
local LCenter = self:OBBCenter()
|
||||
LCenter.z = self:OBBMins().z
|
||||
|
||||
local CenterPos = self:LocalToWorld( LCenter )
|
||||
|
||||
local trace = util.TraceLine( {
|
||||
start = CenterPos + Vector(0,0,25),
|
||||
endpos = CenterPos - Vector(0,0,450),
|
||||
filter = self:GetCrosshairFilterEnts(),
|
||||
} )
|
||||
|
||||
local traceWater = util.TraceLine( {
|
||||
start = CenterPos + Vector(0,0,25),
|
||||
endpos = CenterPos - Vector(0,0,450),
|
||||
filter = self:GetCrosshairFilterEnts(),
|
||||
mask = MASK_WATER,
|
||||
} )
|
||||
|
||||
if EntTable._WaterSFX then EntTable._WaterSFX:ChangePitch( math.Clamp((Vel / 1000) * 50,80,150), 0.5 ) end
|
||||
|
||||
if traceWater.Hit and trace.HitPos.z < traceWater.HitPos.z then
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( traceWater.HitPos )
|
||||
effectdata:SetEntity( self )
|
||||
util.Effect( "lvs_physics_water", effectdata )
|
||||
|
||||
if EntTable._WaterSFX then EntTable._WaterSFX:ChangeVolume( 1 - math.Clamp(traceWater.Fraction,0,1), 0.5 ) end
|
||||
else
|
||||
if EntTable._WaterSFX then EntTable._WaterSFX:ChangeVolume( 0, 0.25 ) end
|
||||
end
|
||||
|
||||
if trace.Hit and EntTable.DustEffectSurfaces[ util.GetSurfacePropName( trace.SurfaceProps ) ] then
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( trace.HitPos )
|
||||
effectdata:SetEntity( self )
|
||||
util.Effect( "lvs_physics_dust", effectdata )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:GetParticleEmitter( Pos )
|
||||
local EntTable = self:GetTable()
|
||||
|
||||
local T = CurTime()
|
||||
|
||||
if IsValid( EntTable.Emitter ) and (EntTable.EmitterTime or 0) > T then
|
||||
return EntTable.Emitter
|
||||
end
|
||||
|
||||
self:StopEmitter()
|
||||
|
||||
EntTable.Emitter = ParticleEmitter( Pos, false )
|
||||
EntTable.EmitterTime = T + 2
|
||||
|
||||
return EntTable.Emitter
|
||||
end
|
||||
|
||||
function ENT:StopEmitter()
|
||||
if IsValid( self.Emitter ) then
|
||||
self.Emitter:Finish()
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user