+using Content.Shared.Lock;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
namespace Content.Shared.Trigger.Components.Effects;
+/// <summary>
+/// Will lock, unlock or toggle an entity with the <see cref="LockComponent"/>.
+/// If TargetUser is true then they will be (un)locked instead.
+/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class LockOnTriggerComponent : BaseXOnTriggerComponent
{
+ /// <summary>
+ /// If the trigger will lock, unlock or toggle the lock.
+ /// </summary>
[DataField, AutoNetworkedField]
- public LockAction LockOnTrigger = LockAction.Toggle;
+ public LockAction LockMode = LockAction.Toggle;
}
[Serializable, NetSerializable]
public enum LockAction
{
- Lock = 0,
+ Lock = 0,
Unlock = 1,
Toggle = 2,
}
if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
return;
- switch (ent.Comp.LockOnTrigger)
+ var target = ent.Comp.TargetUser ? args.User : ent.Owner;
+
+ if (!TryComp<LockComponent>(target, out var lockComp))
+ return; // prevent the Resolve in Lock/Unlock/ToggleLock from logging errors in case the user does not have the component
+
+ switch (ent.Comp.LockMode)
{
case LockAction.Lock:
- _lock.Lock(ent.Owner, args.User);
+ _lock.Lock(target.Value, args.User, lockComp);
break;
case LockAction.Unlock:
- _lock.Unlock(ent, args.User);
+ _lock.Unlock(target.Value, args.User, lockComp);
break;
case LockAction.Toggle:
- _lock.ToggleLock(ent, args.User);
+ _lock.ToggleLock(target.Value, args.User, lockComp);
break;
}
}