From 2b8d88d707dd0b9a64638ca07b12a7ab81967d1d Mon Sep 17 00:00:00 2001 From: CaYpeN1 Date: Fri, 22 Mar 2024 13:06:36 +0500 Subject: [PATCH] add: module components --- .../Components/AcceleratorModuleComponent.cs | 10 ++ .../Components/FlameHiderModuleComponent.cs | 10 ++ .../Components/LaserModuleComponent.cs | 10 ++ .../LightModuleComponent.cs} | 6 +- .../Components/SilencerModuleComponent.cs | 10 ++ .../Components/WeaponModulesComponent.cs | 11 ++ .../WeaponModules/WeaponModulesSystem.cs | 120 ++++++------------ 7 files changed, 92 insertions(+), 85 deletions(-) create mode 100644 Content.Server/_White/WeaponModules/Components/AcceleratorModuleComponent.cs create mode 100644 Content.Server/_White/WeaponModules/Components/FlameHiderModuleComponent.cs create mode 100644 Content.Server/_White/WeaponModules/Components/LaserModuleComponent.cs rename Content.Server/_White/WeaponModules/{WeaponModulesComponent.cs => Components/LightModuleComponent.cs} (52%) create mode 100644 Content.Server/_White/WeaponModules/Components/SilencerModuleComponent.cs create mode 100644 Content.Server/_White/WeaponModules/Components/WeaponModulesComponent.cs 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; }