Remove instant cryobed insertion (#34619)
* added optional delay to DragInsertContainerComponent * comments * Change EntryDelay on DragInsertContainerComponent to use TimeSpan + cleanup * changed drag insert container comp to match naming conventions
This commit is contained in:
@@ -2,24 +2,28 @@ using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.Climbing.Systems;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.DragDrop;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Containers;
|
||||
|
||||
public sealed class DragInsertContainerSystem : EntitySystem
|
||||
public sealed partial class DragInsertContainerSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly ISharedAdminLogManager _adminLog = default!;
|
||||
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
|
||||
[Dependency] private readonly ClimbSystem _climb = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<DragInsertContainerComponent, DragDropTargetEvent>(OnDragDropOn, before: new []{ typeof(ClimbSystem)});
|
||||
SubscribeLocalEvent<DragInsertContainerComponent, DragInsertContainerDoAfterEvent>(OnDragFinished);
|
||||
SubscribeLocalEvent<DragInsertContainerComponent, CanDropTargetEvent>(OnCanDragDropOn);
|
||||
SubscribeLocalEvent<DragInsertContainerComponent, GetVerbsEvent<AlternativeVerb>>(OnGetAlternativeVerb);
|
||||
}
|
||||
@@ -33,7 +37,34 @@ public sealed class DragInsertContainerSystem : EntitySystem
|
||||
if (!_container.TryGetContainer(ent, comp.ContainerId, out var container))
|
||||
return;
|
||||
|
||||
args.Handled = Insert(args.Dragged, args.User, ent, container);
|
||||
if (comp.EntryDelay <= TimeSpan.Zero ||
|
||||
!comp.DelaySelfEntry && args.User == args.Dragged)
|
||||
{
|
||||
//instant insertion
|
||||
args.Handled = Insert(args.Dragged, args.User, ent, container);
|
||||
return;
|
||||
}
|
||||
|
||||
//delayed insertion
|
||||
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, comp.EntryDelay, new DragInsertContainerDoAfterEvent(), ent, args.Dragged, ent)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnMove = true,
|
||||
NeedHand = false,
|
||||
};
|
||||
_doAfter.TryStartDoAfter(doAfterArgs);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnDragFinished(Entity<DragInsertContainerComponent> ent, ref DragInsertContainerDoAfterEvent args)
|
||||
{
|
||||
if (args.Handled || args.Cancelled || args.Args.Target == null)
|
||||
return;
|
||||
|
||||
if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container))
|
||||
return;
|
||||
|
||||
Insert(args.Args.Target.Value, args.User, ent, container);
|
||||
}
|
||||
|
||||
private void OnCanDragDropOn(Entity<DragInsertContainerComponent> ent, ref CanDropTargetEvent args)
|
||||
@@ -117,4 +148,9 @@ public sealed class DragInsertContainerSystem : EntitySystem
|
||||
_adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):player} inserted {ToPrettyString(target):player} into container {ToPrettyString(containerEntity)}");
|
||||
return true;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class DragInsertContainerDoAfterEvent : SimpleDoAfterEvent
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user