add: new modules, sprite visuals, client and shared logic

This commit is contained in:
CaYpeN1
2024-03-20 21:07:17 +05:00
parent ff681c54d8
commit 796a1f3d5d
18 changed files with 187 additions and 46 deletions

View File

@@ -1,4 +1,4 @@
using System.Numerics;
using Content.Client._White.WeaponsModules;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Systems;
using Robust.Server.GameObjects;
@@ -15,6 +15,7 @@ public sealed class WeaponModulesSystem : EntitySystem
[Dependency] private readonly SharedGunSystem _gunSystem = default!;
SoundSpecifier? oldSoundGunshot;
private float oldFireRate;
public override void Initialize()
{
@@ -34,6 +35,7 @@ public sealed class WeaponModulesSystem : EntitySystem
TryComp<GunComponent>(weapon, out var gunComp);
oldSoundGunshot = gunComp!.SoundGunshot;
oldFireRate = gunComp.FireRate;
insertModules(module, comp);
moduleEffect(module, weapon);
@@ -74,38 +76,51 @@ public sealed class WeaponModulesSystem : EntitySystem
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" when HasComp<PointLightComponent>(weapon):
{
_lightSystem.SetEnabled(weapon, true);
break;
}
case "LightModule":
Appearance.SetData(weapon, ModuleVisualState.Module, "light", appearanceComponent);
_lightSystem.EnsureLight(weapon);
_lightSystem.TryGetLight(weapon, out var light);
_lightSystem.EnsureLight(weapon).Offset = new Vector2(0, -1);
_lightSystem.SetRadius(weapon, 2F, light);
Appearance.SetData(weapon, Modules.Light, "none", appearanceComponent);
_lightSystem.SetRadius(weapon, 4F, light);
_lightSystem.SetEnabled(weapon, true, light);
break;
case "LaserModule":
_gunSystem.setProjectileSpeed(weapon, 40F);
Appearance.SetData(weapon, ModuleVisualState.Module, "laser", appearanceComponent);
_gunSystem.setProjectileSpeed(weapon, 35.5F);
break;
case "FlameHiderModule":
Appearance.SetData(weapon, ModuleVisualState.Module, "flamehider", appearanceComponent);
_gunSystem.setUseEffect(weapon, true);
break;
case "SilencerModule":
Appearance.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);
_gunSystem.setFireRate(weapon, 7.5F);
break;
}
}
@@ -128,35 +143,46 @@ public sealed class WeaponModulesSystem : EntitySystem
case "SilencerModule":
comp.Modules.Remove("SilencerModule");
break;
case "AcceleratorModule":
comp.Modules.Remove("AcceleratorModule");
break;
}
}
private void removeModuleEffect(string module, EntityUid weapon)
{
TryComp<AppearanceComponent>(weapon, out var appearanceComponent);
switch (module)
{
case "LightModule":
if (!HasComp<PointLightComponent>(weapon))
break;
Appearance.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<GunComponent>(weapon))
break;
_gunSystem.setProjectileSpeed(weapon, 25F);
break;
case "FlameHiderModule":
Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setUseEffect(weapon, false);
break;
case "SilencerModule":
Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setUseEffect(weapon, false);
_gunSystem.setSound(weapon, oldSoundGunshot!);
break;
case "AcceleratorModule":
Appearance.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
_gunSystem.setFireRate(weapon, oldFireRate);
break;
}
}
}