mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
229 lines
5.0 KiB
Lua
229 lines
5.0 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/
|
|
--]]
|
|
|
|
AddCSLuaFile()
|
|
|
|
ENT.Type = "anim"
|
|
|
|
ENT.Spawnable = false
|
|
ENT.AdminSpawnable = false
|
|
ENT.DoNotDuplicate = true
|
|
|
|
ENT._LVS = true
|
|
|
|
function ENT:SetupDataTables()
|
|
self:NetworkVar( "Entity",0, "Base" )
|
|
|
|
self:NetworkVar( "Bool",0, "Active" )
|
|
self:NetworkVar( "Bool",1, "ActiveVisible" )
|
|
self:NetworkVar( "Bool",2, "Doppler" )
|
|
|
|
self:NetworkVar( "String",1, "Sound")
|
|
self:NetworkVar( "String",2, "SoundInterior")
|
|
|
|
self:NetworkVar( "Int",0, "SoundLevel" )
|
|
|
|
if SERVER then
|
|
self:SetSoundLevel( 110 )
|
|
self:SetActiveVisible( true )
|
|
end
|
|
end
|
|
|
|
if SERVER then
|
|
util.AddNetworkString( "lvs_soundemitter_playonce" )
|
|
|
|
function ENT:Initialize()
|
|
self:SetMoveType( MOVETYPE_NONE )
|
|
self:SetSolid( SOLID_NONE )
|
|
self:DrawShadow( false )
|
|
debugoverlay.Cross( self:GetPos(), 50, 5, Color( 150, 150, 150 ) )
|
|
end
|
|
|
|
function ENT:Think()
|
|
return false
|
|
end
|
|
|
|
function ENT:UpdateTransmitState()
|
|
return TRANSMIT_ALWAYS
|
|
end
|
|
|
|
function ENT:PlayOnce( pitch, volume )
|
|
net.Start( "lvs_soundemitter_playonce", true )
|
|
net.WriteEntity( self )
|
|
net.WriteInt( pitch or 100, 9 )
|
|
net.WriteFloat( volume or 1 )
|
|
net.SendPVS( self:GetPos() )
|
|
end
|
|
|
|
function ENT:Play()
|
|
self:SetActive( true )
|
|
end
|
|
|
|
function ENT:Stop()
|
|
self:SetActive( false )
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
net.Receive( "lvs_soundemitter_playonce", function( len )
|
|
local ent = net.ReadEntity()
|
|
|
|
if not IsValid( ent ) or not ent.PlayOnce then return end
|
|
|
|
ent:PlayOnce( net.ReadInt( 9 ), net.ReadFloat() )
|
|
end )
|
|
|
|
function ENT:PlayOnce( pitch, volume )
|
|
local ply = LocalPlayer()
|
|
local veh = ply:lvsGetVehicle()
|
|
|
|
local snd = self:GetSound()
|
|
local snd_int = self:GetSoundInterior()
|
|
|
|
if snd == snd_int then self:EmitSound( snd, self:GetSoundLevel(), pitch, volume, CHAN_WEAPON ) return end
|
|
|
|
if IsValid( veh ) and veh == self:GetBase() and ply:GetViewEntity() == ply then
|
|
local pod = ply:GetVehicle()
|
|
|
|
if IsValid( pod ) then
|
|
if pod:GetThirdPersonMode() then
|
|
self:EmitSound( snd, self:GetSoundLevel(), pitch, volume, CHAN_WEAPON )
|
|
else
|
|
self:EmitSound( snd_int, self:GetSoundLevel(), pitch, volume, CHAN_WEAPON )
|
|
end
|
|
else
|
|
self:EmitSound( snd, self:GetSoundLevel(), pitch, volume, CHAN_WEAPON )
|
|
end
|
|
else
|
|
self:EmitSound( snd, self:GetSoundLevel(), pitch, volume, CHAN_WEAPON )
|
|
end
|
|
end
|
|
|
|
function ENT:Initialize()
|
|
end
|
|
|
|
function ENT:RemoveSounds()
|
|
if self.snd then
|
|
self.snd:Stop()
|
|
self.snd = nil
|
|
end
|
|
|
|
if self.snd_int then
|
|
self.snd_int:Stop()
|
|
self.snd_int = nil
|
|
end
|
|
end
|
|
|
|
function ENT:HandleSounds()
|
|
local ply = LocalPlayer()
|
|
local veh = ply:lvsGetVehicle()
|
|
local base = self:GetBase()
|
|
|
|
if self:GetDoppler() and IsValid( base ) then
|
|
local Doppler = base:CalcDoppler( ply )
|
|
|
|
if self.snd then self.snd:ChangePitch( 100 * Doppler, 0.5 ) end
|
|
if self.snd_int then self.snd_int:ChangePitch( 100 * Doppler, 0.5 ) end
|
|
end
|
|
|
|
if not self.snd_int then return end
|
|
|
|
if IsValid( veh ) and veh == base and ply:GetViewEntity() == ply then
|
|
local pod = ply:GetVehicle()
|
|
|
|
if IsValid( pod ) then
|
|
if pod:GetThirdPersonMode() then
|
|
if self.snd then self.snd:ChangeVolume( 1 ) end
|
|
if self.snd_int then self.snd_int:ChangeVolume( 0 ) end
|
|
else
|
|
if self.snd then self.snd:ChangeVolume( 0 ) end
|
|
if self.snd_int then self.snd_int:ChangeVolume( 1 ) end
|
|
end
|
|
else
|
|
if self.snd then self.snd:ChangeVolume( 1 ) end
|
|
if self.snd_int then self.snd_int:ChangeVolume( 0 ) end
|
|
end
|
|
else
|
|
if self.snd then self.snd:ChangeVolume( 1 ) end
|
|
if self.snd_int then self.snd_int:ChangeVolume( 0 ) end
|
|
end
|
|
end
|
|
|
|
function ENT:StartSounds()
|
|
local snd = self:GetSound()
|
|
local snd_int = self:GetSoundInterior()
|
|
|
|
if snd ~= "" then
|
|
self.snd = CreateSound( self, snd )
|
|
self.snd:SetSoundLevel( self:GetSoundLevel() )
|
|
self.snd:PlayEx(0,100)
|
|
end
|
|
|
|
if snd == snd_int or snd_int == "" or LocalPlayer():lvsGetVehicle() ~= self:GetBase() then
|
|
if self.snd then self.snd:ChangeVolume( 1, 0 ) end
|
|
|
|
return
|
|
end
|
|
|
|
self.snd_int = CreateSound( self, snd_int )
|
|
self.snd_int:SetSoundLevel( self:GetSoundLevel() )
|
|
self.snd_int:PlayEx(0,100)
|
|
end
|
|
|
|
function ENT:StopSounds()
|
|
self.NextActive = CurTime() + 0.12
|
|
|
|
if self.snd then
|
|
self.snd:ChangeVolume( 0, 0.1 )
|
|
end
|
|
|
|
if self.snd_int then
|
|
self.snd_int:ChangeVolume( 0, 0.1 )
|
|
end
|
|
|
|
timer.Simple(0.11, function()
|
|
if not IsValid( self ) then return end
|
|
self:RemoveSounds()
|
|
end)
|
|
end
|
|
|
|
function ENT:OnActiveChanged( Active )
|
|
if Active then
|
|
self:StartSounds()
|
|
else
|
|
self:StopSounds()
|
|
end
|
|
end
|
|
|
|
ENT._oldActive = false
|
|
function ENT:Think()
|
|
local Active = self:GetActive() and (self.NextActive or 0) < CurTime()
|
|
|
|
if self._oldActive ~= Active then
|
|
self._oldActive = Active
|
|
self:OnActiveChanged( Active )
|
|
end
|
|
|
|
if Active then
|
|
self:HandleSounds()
|
|
end
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
self:RemoveSounds()
|
|
end
|
|
|
|
function ENT:Draw()
|
|
end
|
|
|
|
function ENT:DrawTranslucent()
|
|
end
|