From fbe05977d503f89e85c0164a78af55a7c51de973 Mon Sep 17 00:00:00 2001 From: Samuka-C <47865393+Samuka-C@users.noreply.github.com> Date: Fri, 9 May 2025 15:00:58 -0300 Subject: [PATCH] Fix the component toggler (#37309) * Make the ComponentToggle remember what entity it gave components to * fix the null problem by just ignoring the null problem * Add documentation to the new datafield + removing the "= null" that is not necessary * small fixes and cleaning the code * whitespace my beloved * wait, I dont need those lines, why did I add them? --- .../Item/ItemToggle/ComponentTogglerSystem.cs | 23 +++++++++++++++---- .../Components/ComponentTogglerComponent.cs | 6 +++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs b/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs index 59a04201a3..168b32713c 100644 --- a/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs +++ b/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs @@ -16,13 +16,26 @@ public sealed class ComponentTogglerSystem : EntitySystem private void OnToggled(Entity ent, ref ItemToggledEvent args) { - var target = ent.Comp.Parent ? Transform(ent).ParentUid : ent.Owner; - if (TerminatingOrDeleted(target)) - return; - if (args.Activated) + { + var target = ent.Comp.Parent ? Transform(ent).ParentUid : ent.Owner; + + if (TerminatingOrDeleted(target)) + return; + + ent.Comp.Target = target; + EntityManager.AddComponents(target, ent.Comp.Components); + } else - EntityManager.RemoveComponents(target, ent.Comp.RemoveComponents ?? ent.Comp.Components); + { + if (ent.Comp.Target == null) + return; + + if (TerminatingOrDeleted(ent.Comp.Target.Value)) + return; + + EntityManager.RemoveComponents(ent.Comp.Target.Value, ent.Comp.RemoveComponents ?? ent.Comp.Components); + } } } diff --git a/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs b/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs index 20ef0a0231..cecdb4dc77 100644 --- a/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs +++ b/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs @@ -29,4 +29,10 @@ public sealed partial class ComponentTogglerComponent : Component /// [DataField] public bool Parent; + + // + // It holds the entity that the component gave the component to, so it can remove from it even if it changes parent. + // + [DataField] + public EntityUid? Target; }