Item HeldPrefix and Clothing EquippedPrefix toggler (#33054)

* Item and clothes prefix toggler
Handles Item.HeldPrefix and ClothingComponent.EquippedPrefix respectively

* stunbaton and magboots sprites activations to Toggler yml

* review

---------

Co-authored-by: Milon <milonpl.git@proton.me>
This commit is contained in:
Token
2025-04-15 03:50:21 +05:00
committed by GitHub
parent fc12739df0
commit ace3682de3
8 changed files with 100 additions and 10 deletions

View File

@@ -28,7 +28,6 @@ namespace Content.Server.Stunnable.Systems
SubscribeLocalEvent<StunbatonComponent, SolutionContainerChangedEvent>(OnSolutionChange);
SubscribeLocalEvent<StunbatonComponent, StaminaDamageOnHitAttemptEvent>(OnStaminaHitAttempt);
SubscribeLocalEvent<StunbatonComponent, ItemToggleActivateAttemptEvent>(TryTurnOn);
SubscribeLocalEvent<StunbatonComponent, ItemToggledEvent>(ToggleDone);
SubscribeLocalEvent<StunbatonComponent, ChargeChangedEvent>(OnChargeChanged);
}
@@ -55,11 +54,6 @@ namespace Content.Server.Stunnable.Systems
}
}
private void ToggleDone(Entity<StunbatonComponent> entity, ref ItemToggledEvent args)
{
_item.SetHeldPrefix(entity.Owner, args.Activated ? "on" : "off");
}
private void TryTurnOn(Entity<StunbatonComponent> entity, ref ItemToggleActivateAttemptEvent args)
{
if (!TryComp<BatteryComponent>(entity, out var battery) || battery.CurrentCharge < entity.Comp.EnergyPerUse)

View File

@@ -0,0 +1,22 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Clothing.Components;
/// <summary>
/// Handles the changes to ClothingComponent.EquippedPrefix when toggled.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class ToggleClothingPrefixComponent : Component
{
/// <summary>
/// Clothing's EquippedPrefix when activated.
/// </summary>
[DataField]
public string? PrefixOn = "on";
/// <summary>
/// Clothing's EquippedPrefix when deactivated.
/// </summary>
[DataField]
public string? PrefixOff;
}

View File

@@ -0,0 +1,25 @@
using Content.Shared.Clothing.Components;
using Content.Shared.Item.ItemToggle.Components;
namespace Content.Shared.Clothing.EntitySystems;
/// <summary>
/// On toggle handles the changes to ItemComponent.HeldPrefix. <see cref="ToggleClothingPrefixComponent"/>.
/// </summary>
public sealed class ToggleClothingPrefixSystem : EntitySystem
{
[Dependency] private readonly ClothingSystem _clothing = default!;
/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ToggleClothingPrefixComponent, ItemToggledEvent>(OnToggled);
}
private void OnToggled(Entity<ToggleClothingPrefixComponent> ent, ref ItemToggledEvent args)
{
_clothing.SetEquippedPrefix(ent, args.Activated ? ent.Comp.PrefixOn : ent.Comp.PrefixOff);
}
}

View File

@@ -42,10 +42,6 @@ public sealed class SharedMagbootsSystem : EntitySystem
{
UpdateMagbootEffects(container.Owner, ent, args.Activated);
}
var prefix = args.Activated ? "on" : null;
_item.SetHeldPrefix(ent, prefix);
_clothing.SetEquippedPrefix(ent, prefix);
}
private void OnGotUnequipped(Entity<MagbootsComponent> ent, ref ClothingGotUnequippedEvent args)

View File

@@ -0,0 +1,22 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Item.ItemToggle.Components;
/// <summary>
/// Handles the changes to ItemComponent.HeldPrefix when toggled.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class ItemTogglePrefixComponent : Component
{
/// <summary>
/// Item's HeldPrefix when activated.
/// </summary>
[DataField]
public string? PrefixOn = "on";
/// <summary>
/// Item's HeldPrefix when deactivated.
/// </summary>
[DataField]
public string? PrefixOff;
}

View File

@@ -0,0 +1,24 @@
using Content.Shared.Item.ItemToggle.Components;
namespace Content.Shared.Item.ItemToggle;
/// <summary>
/// On toggle handles the changes to ItemComponent.HeldPrefix. <see cref="ItemTogglePrefixComponent"/>.
/// </summary>
public sealed class ItemTogglePrefixSystem : EntitySystem
{
[Dependency] private readonly SharedItemSystem _item = default!;
/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ItemTogglePrefixComponent, ItemToggledEvent>(OnToggled);
}
private void OnToggled(Entity<ItemTogglePrefixComponent> ent, ref ItemToggledEvent args)
{
_item.SetHeldPrefix(ent.Owner, args.Activated ? ent.Comp.PrefixOn : ent.Comp.PrefixOff);
}
}

View File

@@ -18,6 +18,10 @@
- type: ComponentToggler
components:
- type: NoSlip
- type: ItemTogglePrefix
prefixOn: on
- type: ToggleClothingPrefix
prefixOn: on
- type: Magboots
- type: ClothingSpeedModifier
walkModifier: 0.85

View File

@@ -25,6 +25,9 @@
path: /Audio/Machines/button.ogg
params:
variation: 0.250
- type: ItemTogglePrefix
prefixOn: on
prefixOff: off
- type: ItemToggleMeleeWeapon
activatedDamage:
types: