diff --git a/Content.Server/_White/WeaponModules/Components/AcceleratorModuleComponent.cs b/Content.Server/_White/WeaponModules/Components/AcceleratorModuleComponent.cs
new file mode 100644
index 0000000000..2ba3bc4c7e
--- /dev/null
+++ b/Content.Server/_White/WeaponModules/Components/AcceleratorModuleComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server._White.WeaponModules;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class AcceleratorModuleComponent : Component
+{
+
+}
diff --git a/Content.Server/_White/WeaponModules/Components/FlameHiderModuleComponent.cs b/Content.Server/_White/WeaponModules/Components/FlameHiderModuleComponent.cs
new file mode 100644
index 0000000000..d504b700c3
--- /dev/null
+++ b/Content.Server/_White/WeaponModules/Components/FlameHiderModuleComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server._White.WeaponModules;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class FlameHiderModuleComponent : Component
+{
+
+}
diff --git a/Content.Server/_White/WeaponModules/Components/LaserModuleComponent.cs b/Content.Server/_White/WeaponModules/Components/LaserModuleComponent.cs
new file mode 100644
index 0000000000..5ab6004543
--- /dev/null
+++ b/Content.Server/_White/WeaponModules/Components/LaserModuleComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server._White.WeaponModules;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class LaserModuleComponent : Component
+{
+
+}
diff --git a/Content.Server/_White/WeaponModules/WeaponModulesComponent.cs b/Content.Server/_White/WeaponModules/Components/LightModuleComponent.cs
similarity index 52%
rename from Content.Server/_White/WeaponModules/WeaponModulesComponent.cs
rename to Content.Server/_White/WeaponModules/Components/LightModuleComponent.cs
index 479e8a858d..43081881ab 100644
--- a/Content.Server/_White/WeaponModules/WeaponModulesComponent.cs
+++ b/Content.Server/_White/WeaponModules/Components/LightModuleComponent.cs
@@ -1,11 +1,11 @@
namespace Content.Server._White.WeaponModules;
///
-/// This is used for...
+/// LightModuleComponent
///
[RegisterComponent]
-public sealed partial class WeaponModulesComponent : Component
+public sealed partial class LightModuleComponent : WeaponModulesComponent
{
[ViewVariables(VVAccess.ReadWrite)]
- public List Modules = new();
+ public bool Enabled;
}
diff --git a/Content.Server/_White/WeaponModules/Components/SilencerModuleComponent.cs b/Content.Server/_White/WeaponModules/Components/SilencerModuleComponent.cs
new file mode 100644
index 0000000000..1c1f9c6a8d
--- /dev/null
+++ b/Content.Server/_White/WeaponModules/Components/SilencerModuleComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server._White.WeaponModules;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class SilencerModuleComponent : Component
+{
+
+}
diff --git a/Content.Server/_White/WeaponModules/Components/WeaponModulesComponent.cs b/Content.Server/_White/WeaponModules/Components/WeaponModulesComponent.cs
new file mode 100644
index 0000000000..53cc288e5f
--- /dev/null
+++ b/Content.Server/_White/WeaponModules/Components/WeaponModulesComponent.cs
@@ -0,0 +1,11 @@
+namespace Content.Server._White.WeaponModules;
+
+///
+/// Base Module Component
+///
+[RegisterComponent]
+public partial class WeaponModulesComponent : Component
+{
+ [ViewVariables(VVAccess.ReadWrite), DataField]
+ public List Modules = new();
+}
diff --git a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs
index 7396072335..70bd9a8de5 100644
--- a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs
+++ b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs
@@ -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 Appearance = default!;
+ [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = 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(weapon, out var gunComp);
- oldSoundGunshot = gunComp!.SoundGunshot;
- oldFireRate = gunComp.FireRate;
+ if (TryComp(weapon, out var gunComp))
+ {
+ oldSoundGunshot = gunComp.SoundGunshot;
+ oldFireRate = gunComp.FireRate;
+ }
- insertModules(module, comp);
- moduleEffect(module, weapon);
+ InsertModules(module, comp);
+ ModuleEffect(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;
- removeModules(module, comp);
- removeModuleEffect(module, weapon);
+ RemoveModules(module, comp);
+ RemoveModuleEffect(module, weapon);
}
- private void insertModules(string module, WeaponModulesComponent comp)
+ private void InsertModules(EntityUid module, WeaponModulesComponent comp)
{
+ if(!comp.Modules.Contains(module))
+ comp.Modules.Add(module);
+ }
+
+ private void ModuleEffect(EntityUid module, EntityUid weapon)
+ {
+ if(!TryComp(weapon, out var appearanceComponent)) return;
switch (module)
{
case "LightModule":
- if(comp.Modules.Contains("LightModule")) 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(weapon, out var appearanceComponent);
- switch (module)
- {
- case "LightModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "light", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "light", appearanceComponent);
_lightSystem.EnsureLight(weapon);
_lightSystem.TryGetLight(weapon, out var light);
- Appearance.SetData(weapon, Modules.Light, "none", appearanceComponent);
+ _appearanceSystem.SetData(weapon, Modules.Light, "none", appearanceComponent);
_lightSystem.SetRadius(weapon, 4F, light);
_lightSystem.SetEnabled(weapon, true, light);
break;
case "LaserModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "laser", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "laser", appearanceComponent);
_gunSystem.setProjectileSpeed(weapon, 35.5F);
break;
case "FlameHiderModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "flamehider", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "flamehider", appearanceComponent);
_gunSystem.setUseEffect(weapon, true);
break;
case "SilencerModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "silencer", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "silencer", appearanceComponent);
_gunSystem.setUseEffect(weapon, true);
_gunSystem.setSound(weapon, new SoundPathSpecifier("/Audio/White/Weapons/Modules/silence.ogg"));
break;
case "AcceleratorModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "accelerator", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "accelerator", appearanceComponent);
_gunSystem.setFireRate(weapon, 7.5F);
break;
}
}
- private void removeModules(string module, WeaponModulesComponent comp)
+ private void RemoveModules(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 removeModuleEffect(string module, EntityUid weapon)
+ private void RemoveModuleEffect(EntityUid module, EntityUid weapon)
{
- TryComp(weapon, out var appearanceComponent);
+ if(!TryComp(weapon, out var appearanceComponent)) return;
switch (module)
{
case "LightModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_lightSystem.TryGetLight(weapon, out var light);
_lightSystem.SetEnabled(weapon, false, light);
break;
case "LaserModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
- if (!HasComp(weapon))
- break;
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setProjectileSpeed(weapon, 25F);
break;
case "FlameHiderModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setUseEffect(weapon, false);
break;
case "SilencerModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setUseEffect(weapon, false);
_gunSystem.setSound(weapon, oldSoundGunshot!);
break;
case "AcceleratorModule":
- Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
+ _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setFireRate(weapon, oldFireRate);
break;
}