[Feat] Modules Update (#268)

* add new module slot

* update priority

* sprites + changes in system

* sprites on SMGs + fix examine

* sprite fix
This commit is contained in:
CaypenNow
2024-04-04 18:44:55 +05:00
committed by GitHub
parent 543bbe0c94
commit 4938553945
23 changed files with 275 additions and 74 deletions

View File

@@ -1,9 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared._White.WeaponModules;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Weapons.Ranged.Systems;
using Linguini.Syntax.Ast;
using Robust.Server.GameObjects;
using Robust.Shared.Containers;
@@ -11,7 +9,11 @@ namespace Content.Server._White.WeaponModules;
public sealed class WeaponModulesSystem : EntitySystem
{
protected const string ModulesSlot = "gun_modules";
protected static readonly Dictionary<string, Enum> Slots = new()
{
{ "handguard_module", ModuleVisualState.HandGuardModule }, { "barrel_module", ModuleVisualState.BarrelModule }
};
[Dependency] private readonly PointLightSystem _lightSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
[Dependency] private readonly SharedGunSystem _gunSystem = default!;
@@ -40,7 +42,7 @@ public sealed class WeaponModulesSystem : EntitySystem
string containerId, [NotNullWhen(true)] out WeaponModulesComponent? weaponModulesComponent)
{
if (!TryComp(weapon, out weaponModulesComponent) || !TryComp<AppearanceComponent>(weapon, out var appearanceComponent) ||
containerId != ModulesSlot)
!Slots.ContainsKey(containerId))
{
weaponModulesComponent = null;
appearanceComponent = null;
@@ -49,23 +51,32 @@ public sealed class WeaponModulesSystem : EntitySystem
if(!weaponModulesComponent.Modules.Contains(module))
weaponModulesComponent.Modules.Add(module);
_appearanceSystem.SetData(weapon, ModuleVisualState.Module, component.AppearanceValue, appearanceComponent);
if (!Slots.TryGetValue(containerId, out var value))
return false;
_appearanceSystem.SetData(weapon, value, component.AppearanceValue, appearanceComponent);
return true;
}
private bool TryEjectModule(EntityUid module, EntityUid weapon, string containerId, [NotNullWhen(true)] out WeaponModulesComponent? weaponModulesComponent)
{
if (!TryComp(weapon, out weaponModulesComponent) || !TryComp<AppearanceComponent>(weapon, out var appearanceComponent) || containerId != ModulesSlot)
if (!TryComp(weapon, out weaponModulesComponent) || !TryComp<AppearanceComponent>(weapon, out var appearanceComponent) || !Slots.ContainsKey(containerId))
{
weaponModulesComponent = null;
appearanceComponent = null;
return false;
}
if(weaponModulesComponent.Modules.Contains(module))
weaponModulesComponent.Modules.Remove(module);
_appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent);
if (!Slots.TryGetValue(containerId, out var value))
return false;
_appearanceSystem.SetData(weapon, value, "none", appearanceComponent);
return true;
}