@@ -1,4 +1,5 @@
using Content.Client._White.WeaponsModules ;
using System.Linq ;
using Content.Client._White.WeaponsModules ;
using Content.Shared.Weapons.Ranged.Components ;
using Content.Shared.Weapons.Ranged.Systems ;
using Robust.Server.GameObjects ;
@@ -11,7 +12,7 @@ public sealed class WeaponModulesSystem : EntitySystem
{
protected const string ModulesSlot = "gun_modules" ;
[Dependency] private readonly PointLightSystem _lightSystem = default ! ;
[Dependency] private readonly SharedAppearanceSystem A ppearance = default ! ;
[Dependency] private readonly SharedAppearanceSystem _a ppearanceSystem = default ! ;
[Dependency] private readonly SharedGunSystem _gunSystem = default ! ;
SoundSpecifier ? oldSoundGunshot ;
@@ -30,15 +31,17 @@ public sealed class WeaponModulesSystem : EntitySystem
if ( ModulesSlot ! = args . Container . ID )
return ;
string module = Prototype ( args. Entity ) ! . ID ;
EntityUid module = args . Entity ;
EntityUid weapon = args . Container . Owner ;
TryComp < GunComponent > ( weapon , out var gunComp ) ;
oldSoundGunshot = gunComp ! . SoundGunshot ;
oldFireRate = gunComp . FireRate ;
if ( TryComp < GunComponent > ( weapon , out var gunComp ) )
{
oldSoundGunshot = gunComp . SoundGunshot ;
oldFireRate = gunComp . FireRate ;
}
i nsertModules( module , comp ) ;
m oduleEffect( module , weapon ) ;
I nsertModules( module , comp ) ;
M oduleEffect( module , weapon ) ;
}
private void OnEject ( EntityUid uid , WeaponModulesComponent comp , EntRemovedFromContainerMessage args )
@@ -46,141 +49,94 @@ public sealed class WeaponModulesSystem : EntitySystem
if ( ModulesSlot ! = args . Container . ID )
return ;
string module = Prototype ( args. Entity ) ! . ID ;
EntityUid module = args . Entity ;
EntityUid weapon = args . Container . Owner ;
r emoveModules( module , comp ) ;
r emoveModuleEffect( module , weapon ) ;
R emoveModules( module , comp ) ;
R emoveModuleEffect( module , weapon ) ;
}
private void i nsertModules( string module , WeaponModulesComponent comp )
private void I nsertModules( EntityUid module , WeaponModulesComponent comp )
{
if ( ! comp . Modules . Contains ( module ) )
comp . Modules . Add ( module ) ;
}
private void ModuleEffect ( EntityUid module , EntityUid weapon )
{
if ( ! TryComp < AppearanceComponent > ( weapon , out var appearanceComponent ) ) return ;
switch ( module )
{
case "LightModule" :
if ( comp . Modules . Contains ( "L ightModule" ) ) break ;
comp . Modules . Add ( "LightModule" ) ;
break ;
case "LaserModule" :
if ( comp . Modules . Contains ( "LaserModule" ) ) break ;
comp . Modules . Add ( "LaserModule" ) ;
break ;
case "FlameHiderModule" :
if ( comp . Modules . Contains ( "FlameHiderModule" ) ) break ;
comp . Modules . Add ( "FlameHiderModule" ) ;
break ;
case "SilencerModule" :
if ( comp . Modules . Contains ( "SilencerModule" ) ) break ;
comp . Modules . Add ( "SilencerModule" ) ;
break ;
case "AcceleratorModule" :
if ( comp . Modules . Contains ( "AcceleratorModule" ) ) break ;
comp . Modules . Add ( "AcceleratorModule" ) ;
break ;
}
}
private void moduleEffect ( string module , EntityUid weapon )
{
TryComp < AppearanceComponent > ( weapon , out var appearanceComponent ) ;
switch ( module )
{
case "LightModule" :
Appearance . SetData ( weapon , ModuleVisualState . Module , "light" , appearanceComponent ) ;
_appearanceSystem . SetData ( weapon , ModuleVisualState . Module , "l ight" , appearanceComponent ) ;
_lightSystem . EnsureLight ( weapon ) ;
_lightSystem . TryGetLight ( weapon , out var light ) ;
A ppearance. SetData ( weapon , Modules . Light , "none" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , Modules . Light , "none" , appearanceComponent ) ;
_lightSystem . SetRadius ( weapon , 4F , light ) ;
_lightSystem . SetEnabled ( weapon , true , light ) ;
break ;
case "LaserModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "laser" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "laser" , appearanceComponent ) ;
_gunSystem . setProjectileSpeed ( weapon , 35.5F ) ;
break ;
case "FlameHiderModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "flamehider" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "flamehider" , appearanceComponent ) ;
_gunSystem . setUseEffect ( weapon , true ) ;
break ;
case "SilencerModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "silencer" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "silencer" , appearanceComponent ) ;
_gunSystem . setUseEffect ( weapon , true ) ;
_gunSystem . setSound ( weapon , new SoundPathSpecifier ( "/Audio/White/Weapons/Modules/silence.ogg" ) ) ;
break ;
case "AcceleratorModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "accelerator" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "accelerator" , appearanceComponent ) ;
_gunSystem . setFireRate ( weapon , 7.5F ) ;
break ;
}
}
private void r emoveModules( string module , WeaponModulesComponent comp )
private void R emoveModules( EntityUid module , WeaponModulesComponent comp )
{
switch ( module )
{
case "LightModule" :
comp . Modules . Remove ( "LightModule" ) ;
break ;
case "LaserModule" :
comp . Modules . Remove ( "LaserModule" ) ;
break ;
case "FlameHiderModule" :
comp . Modules . Remove ( "FlameHiderModule" ) ;
break ;
case "SilencerModule" :
comp . Modules . Remove ( "SilencerModule" ) ;
break ;
case "AcceleratorModule" :
comp . Modules . Remove ( "AcceleratorModule" ) ;
break ;
}
if ( comp . Modules . Contains ( module ) )
comp . Modules . Remove ( module ) ;
}
private void r emoveModuleEffect( string module , EntityUid weapon )
private void R emoveModuleEffect( EntityUid module , EntityUid weapon )
{
TryComp < AppearanceComponent > ( weapon , out var appearanceComponent ) ;
if ( ! TryComp < AppearanceComponent > ( weapon , out var appearanceComponent ) ) return ;
switch ( module )
{
case "LightModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_lightSystem . TryGetLight ( weapon , out var light ) ;
_lightSystem . SetEnabled ( weapon , false , light ) ;
break ;
case "LaserModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
if ( ! HasComp < GunComponent > ( weapon ) )
break ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_gunSystem . setProjectileSpeed ( weapon , 25F ) ;
break ;
case "FlameHiderModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_gunSystem . setUseEffect ( weapon , false ) ;
break ;
case "SilencerModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_gunSystem . setUseEffect ( weapon , false ) ;
_gunSystem . setSound ( weapon , oldSoundGunshot ! ) ;
break ;
case "AcceleratorModule" :
A ppearance. SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_a ppearanceSystem . SetData ( weapon , ModuleVisualState . Module , "none" , appearanceComponent ) ;
_gunSystem . setFireRate ( weapon , oldFireRate ) ;
break ;
}