mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
91 lines
2.5 KiB
Lua
91 lines
2.5 KiB
Lua
--[[
|
|
| 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/
|
|
--]]
|
|
|
|
|
|
ENT.TireSoundFade = 0.15
|
|
ENT.TireSoundTypes = {
|
|
["roll"] = "simulated_vehicles/sfx/wheel_roll.wav",
|
|
["roll_dirt"] = "simulated_vehicles/sfx/wheel_roll_dirt.wav",
|
|
["roll_wet"] = "simulated_vehicles/sfx/wheel_roll_wet.wav",
|
|
["roll_damaged"] = "simulated_vehicles/sfx/tire_damaged.wav",
|
|
["skid"] = "simulated_vehicles/sfx/wheel_skid.wav",
|
|
["skid_dirt"] = "simulated_vehicles/sfx/wheel_skid_dirt.wav",
|
|
["skid_wet"] = "simulated_vehicles/sfx/wheel_skid_wet.wav",
|
|
}
|
|
ENT.TireSoundLevelSkid = 85
|
|
ENT.TireSoundLevelRoll = 75
|
|
|
|
function ENT:TireSoundRemove()
|
|
for snd, _ in pairs( self.TireSoundTypes ) do
|
|
self:StopTireSound( snd )
|
|
end
|
|
end
|
|
|
|
function ENT:TireSoundThink()
|
|
for snd, _ in pairs( self.TireSoundTypes ) do
|
|
local T = self:GetTireSoundTime( snd )
|
|
|
|
if T > 0 then
|
|
local speed = self:GetVelocity():Length()
|
|
|
|
local sound = self:StartTireSound( snd )
|
|
|
|
if string.StartsWith( snd, "skid" ) then
|
|
local vel = speed
|
|
speed = math.max( math.abs( self:GetWheelVelocity() ) - vel, 0 ) * 5 + vel
|
|
end
|
|
|
|
local volume = math.min(speed / 1000,1) ^ 2 * T
|
|
local pitch = 100 + math.Clamp((speed - 400) / 200,0,155)
|
|
|
|
sound:ChangeVolume( volume, 0 )
|
|
sound:ChangePitch( pitch, 0.5 )
|
|
else
|
|
self:StopTireSound( snd )
|
|
end
|
|
end
|
|
end
|
|
|
|
function ENT:DoTireSound( snd )
|
|
if not istable( self._TireSounds ) then
|
|
self._TireSounds = {}
|
|
end
|
|
|
|
self._TireSounds[ snd ] = CurTime() + self.TireSoundFade
|
|
end
|
|
|
|
function ENT:GetTireSoundTime( snd )
|
|
if not istable( self._TireSounds ) or not self._TireSounds[ snd ] then return 0 end
|
|
|
|
return math.max(self._TireSounds[ snd ] - CurTime(),0) / self.TireSoundFade
|
|
end
|
|
|
|
function ENT:StartTireSound( snd )
|
|
if not self.TireSoundTypes[ snd ] or not istable( self._ActiveTireSounds ) then
|
|
self._ActiveTireSounds = {}
|
|
end
|
|
|
|
if self._ActiveTireSounds[ snd ] then return self._ActiveTireSounds[ snd ] end
|
|
|
|
local sound = CreateSound( self, self.TireSoundTypes[ snd ] )
|
|
sound:SetSoundLevel( string.StartsWith( snd, "skid" ) and self.TireSoundLevelSkid or self.TireSoundLevelRoll )
|
|
sound:PlayEx(0,100)
|
|
|
|
self._ActiveTireSounds[ snd ] = sound
|
|
|
|
return sound
|
|
end
|
|
|
|
function ENT:StopTireSound( snd )
|
|
if not istable( self._ActiveTireSounds ) or not self._ActiveTireSounds[ snd ] then return end
|
|
|
|
self._ActiveTireSounds[ snd ]:Stop()
|
|
self._ActiveTireSounds[ snd ] = nil
|
|
end |