diff --git a/lua/entities/base_glide_car/cl_init.lua b/lua/entities/base_glide_car/cl_init.lua index 1ced5b31..b578e832 100644 --- a/lua/entities/base_glide_car/cl_init.lua +++ b/lua/entities/base_glide_car/cl_init.lua @@ -146,7 +146,9 @@ function ENT:OnUpdateSounds() if sounds.siren then sounds.siren:ChangeVolume( self.SirenVolume * GetVolume( "hornVolume" ) ) else - local snd = self:CreateLoopingSound( "siren", Glide.GetRandomSound( self.SirenLoopSound ), 90, self ) + local siren = self:GetSirenState() + local snd = self:CreateLoopingSound( "siren", self.SirenVehicle and self.SirenVehicle[siren] or Glide.GetRandomSound( self.SirenLoopSound ), 90, self ) + snd:PlayEx( self.SirenVolume * GetVolume( "hornVolume" ), 100 ) end @@ -301,13 +303,13 @@ function ENT:OnUpdateMisc() -- Siren lights/bodygroups local siren = self:GetSirenState() + local flashing = self:GetFlashingState() - if self.lastSirenState ~= siren then + if self.lastSirenState ~= siren or self.lastFlashingState ~= flashing then self.lastSirenState = siren - if siren > 1 then + if siren > 0 then self.lastSirenEnableTime = CurTime() - elseif self.lastSirenEnableTime then if CurTime() - self.lastSirenEnableTime < 0.25 then Glide.PlaySoundSet( self.SirenInterruptSound, self, self.SirenVolume ) @@ -317,14 +319,17 @@ function ENT:OnUpdateMisc() end -- Set bodygroups to default - for _, v in ipairs( self.SirenLights ) do + local SirenLights = self.NumberFlashingLights and self.SirenLights[self.lastFlashingState] or self.SirenLights + for _, v in ipairs( SirenLights ) do if v.bodygroup then self:SetBodygroup( v.bodygroup, 0 ) end end + + self.lastFlashingState = flashing end - if siren < 1 then return end + if flashing < 1 then return end local myPos = self:GetPos() local t = ( CurTime() % self.SirenCycle ) / self.SirenCycle @@ -332,7 +337,9 @@ function ENT:OnUpdateMisc() local bodygroupState = {} - for _, v in ipairs( self.SirenLights ) do + local SirenLights = self.NumberFlashingLights and self.SirenLights[flashing] or self.SirenLights + + for _, v in ipairs( SirenLights ) do on = t > v.time and t < v.time + ( v.duration or 0.125 ) -- Check for optional bodygroup requirement diff --git a/lua/entities/base_glide_car/init.lua b/lua/entities/base_glide_car/init.lua index 248dbecf..6ab7ff70 100644 --- a/lua/entities/base_glide_car/init.lua +++ b/lua/entities/base_glide_car/init.lua @@ -242,7 +242,8 @@ function ENT:OnSeatInput( seatIndex, action, pressed ) if action == "siren" then self:ChangeSirenState( self:GetSirenState() + 1 ) - + elseif action == "flashinglights" then + self:ChangeFlashingState( self:GetFlashingState() + 1 ) elseif action == "accelerate" and self:GetEngineState() == 0 and self:GetEngineRPM() < 1 then self:TurnOn() end @@ -297,8 +298,8 @@ function ENT:ChangeSirenState( state ) state = math.floor( state ) - if state < 0 then state = 2 end - if state > 2 then state = 0 end + if state < 0 then state = self.SirenVehicle and #self.SirenVehicle or 1 end + if state > ( self.SirenVehicle and #self.SirenVehicle or 1 ) then state = 0 end self:SetSirenState( state ) @@ -307,6 +308,15 @@ function ENT:ChangeSirenState( state ) end end +function ENT:ChangeFlashingState( state ) + state = math.floor( state ) + + if state < 0 then state = 1 end + if state > ( self.NumberFlashingLights or 1 ) then state = 0 end + + self:SetFlashingState( state ) +end + --- Override this base class function. function ENT:SetupWiremodPorts( inputs, outputs ) BaseClass.SetupWiremodPorts( self, inputs, outputs ) diff --git a/lua/entities/base_glide_car/shared.lua b/lua/entities/base_glide_car/shared.lua index 951e867a..3f41db58 100644 --- a/lua/entities/base_glide_car/shared.lua +++ b/lua/entities/base_glide_car/shared.lua @@ -35,6 +35,7 @@ function ENT:SetupDataTables() self:NetworkVar( "Bool", "IsRedlining" ) self:NetworkVar( "Bool", "IsHonking" ) self:NetworkVar( "Int", "SirenState" ) + self:NetworkVar( "Int", "FlashingState" ) self:NetworkVar( "Int", "Gear" ) self:NetworkVar( "Float", "Steering" ) diff --git a/lua/glide/sh_input.lua b/lua/glide/sh_input.lua index aedad742..bcf1e2ba 100644 --- a/lua/glide/sh_input.lua +++ b/lua/glide/sh_input.lua @@ -94,6 +94,7 @@ Glide.AddInputAction( "land_controls", "throttle_modifier", KEY_LSHIFT ) Glide.AddInputAction( "land_controls", "horn", KEY_R ) Glide.AddInputAction( "land_controls", "siren", KEY_L ) +Glide.AddInputAction( "land_controls", "flashinglights", KEY_M ) Glide.AddInputAction( "land_controls", "detach_trailer", KEY_K ) Glide.AddInputAction( "land_controls", "lean_forward", KEY_UP ) diff --git a/resource/localization/en/glide_vehicles.properties b/resource/localization/en/glide_vehicles.properties index a59dac4e..10c256a1 100644 --- a/resource/localization/en/glide_vehicles.properties +++ b/resource/localization/en/glide_vehicles.properties @@ -77,6 +77,7 @@ glide.input.brake=Brake/Reverse glide.input.handbrake=Handbrake glide.input.horn=Horn glide.input.siren=Siren +glide.input.flashinglights=Flashing lights glide.input.headlights=Toggle headlights glide.input.toggle_engine=Toggle engine glide.input.detach_trailer=Detach trailer diff --git a/resource/localization/fr/glide_vehicles.properties b/resource/localization/fr/glide_vehicles.properties index 87b900ea..8a666244 100644 --- a/resource/localization/fr/glide_vehicles.properties +++ b/resource/localization/fr/glide_vehicles.properties @@ -77,6 +77,7 @@ glide.input.brake=Freiner/Reculer glide.input.handbrake=Frein à main glide.input.horn=Klaxon glide.input.siren=Sirène +glide.input.flashinglights=Gyrophare glide.input.headlights=Activer/désactiver les phares glide.input.toggle_engine=Allumer/éteindre le moteur glide.input.detach_trailer=Détacher la remorque