Fix pulling mispredicts (#22941)
* Fix pulling mispredicts * Make behaviour consistent * Good ol terminating entities
This commit is contained in:
@@ -25,6 +25,9 @@ public abstract partial class SharedHandsSystem
|
||||
|
||||
var didUnequip = new DidUnequipHandEvent(uid, args.Entity, hand);
|
||||
RaiseLocalEvent(uid, didUnequip);
|
||||
|
||||
if (TryComp(args.Entity, out HandVirtualItemComponent? @virtual))
|
||||
_virtualSystem.Delete((args.Entity, @virtual), uid);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -100,8 +103,14 @@ public abstract partial class SharedHandsSystem
|
||||
var entity = hand.HeldEntity!.Value;
|
||||
DoDrop(uid, hand, doDropInteraction: doDropInteraction, handsComp);
|
||||
|
||||
var userXform = Transform(uid);
|
||||
if (TerminatingOrDeleted(entity))
|
||||
return true;
|
||||
|
||||
var itemXform = Transform(entity);
|
||||
if (itemXform.MapUid == null)
|
||||
return true;
|
||||
|
||||
var userXform = Transform(uid);
|
||||
var isInContainer = ContainerSystem.IsEntityInContainer(uid);
|
||||
|
||||
if (targetDropLocation == null || isInContainer)
|
||||
|
||||
@@ -20,6 +20,7 @@ public abstract partial class SharedHandsSystem
|
||||
[Dependency] private readonly SharedItemSystem _items = default!;
|
||||
[Dependency] private readonly SharedStorageSystem _storage = default!;
|
||||
[Dependency] protected readonly SharedTransformSystem TransformSystem = default!;
|
||||
[Dependency] private readonly SharedHandVirtualItemSystem _virtualSystem = default!;
|
||||
|
||||
protected event Action<Entity<HandsComponent>?>? OnHandSetActive;
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ public abstract class SharedHandVirtualItemSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly INetManager _net = default!;
|
||||
[Dependency] private readonly SharedHandsSystem _hands = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -82,14 +83,16 @@ public abstract class SharedHandVirtualItemSystem : EntitySystem
|
||||
/// </summary>
|
||||
public void Delete(Entity<HandVirtualItemComponent> item, EntityUid user)
|
||||
{
|
||||
if (_net.IsClient)
|
||||
return;
|
||||
|
||||
var userEv = new VirtualItemDeletedEvent(item.Comp.BlockingEntity, user);
|
||||
RaiseLocalEvent(user, userEv);
|
||||
var targEv = new VirtualItemDeletedEvent(item.Comp.BlockingEntity, user);
|
||||
RaiseLocalEvent(item.Comp.BlockingEntity, targEv);
|
||||
|
||||
QueueDel(item);
|
||||
if (TerminatingOrDeleted(item))
|
||||
return;
|
||||
|
||||
_transform.DetachParentToNull(item, Transform(item));
|
||||
if (_net.IsServer)
|
||||
QueueDel(item);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user