More DoAfter Changes (#14609)
* DoAfters * Compact Clone() * Fix mice and cuffables * Try generalize attempt events * moves climbabledoafter event to shared, fixes issue with climbable target * Fix merge (cuffing) * Make all events netserializable * handful of doafter events moved * moves the rest of the events to their respective shared folders * Changes all mentions of server doafter to shared * stop stripping cancellation * fix merge errors * draw paused doafters * handle unpausing * missing netserializable ref * removes break on stun reference * removes cuffing state reference * Fix tools * Fix door prying. * Fix construction * Fix dumping * Fix wielding assert * fix rev * Fix test * more test fixes --------- Co-authored-by: keronshb <keronshb@live.com>
This commit is contained in:
@@ -12,6 +12,7 @@ using Content.Shared.Verbs;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Clothing.EntitySystems;
|
||||
@@ -47,7 +48,7 @@ public sealed class ToggleableClothingSystem : EntitySystem
|
||||
SubscribeLocalEvent<ToggleableClothingComponent, InventoryRelayedEvent<GetVerbsEvent<EquipmentVerb>>>(GetRelayedVerbs);
|
||||
SubscribeLocalEvent<ToggleableClothingComponent, GetVerbsEvent<EquipmentVerb>>(OnGetVerbs);
|
||||
SubscribeLocalEvent<AttachedClothingComponent, GetVerbsEvent<EquipmentVerb>>(OnGetAttachedStripVerbsEvent);
|
||||
SubscribeLocalEvent<ToggleableClothingComponent, DoAfterEvent<ToggleClothingEvent>>(OnDoAfterComplete);
|
||||
SubscribeLocalEvent<ToggleableClothingComponent, ToggleClothingDoAfterEvent>(OnDoAfterComplete);
|
||||
}
|
||||
|
||||
private void GetRelayedVerbs(EntityUid uid, ToggleableClothingComponent component, InventoryRelayedEvent<GetVerbsEvent<EquipmentVerb>> args)
|
||||
@@ -92,37 +93,29 @@ public sealed class ToggleableClothingSystem : EntitySystem
|
||||
|
||||
private void StartDoAfter(EntityUid user, EntityUid item, EntityUid wearer, ToggleableClothingComponent component)
|
||||
{
|
||||
// TODO predict do afters & networked clothing toggle.
|
||||
if (_net.IsClient)
|
||||
return;
|
||||
|
||||
if (component.DoAfterId != null || component.StripDelay == null)
|
||||
if (component.StripDelay == null)
|
||||
return;
|
||||
|
||||
var (time, stealth) = _strippable.GetStripTimeModifiers(user, wearer, (float) component.StripDelay.Value.TotalSeconds);
|
||||
|
||||
if (!stealth)
|
||||
{
|
||||
var popup = Loc.GetString("strippable-component-alert-owner-interact", ("user", Identity.Entity(user, EntityManager)), ("item", item));
|
||||
_popupSystem.PopupEntity(popup, wearer, wearer, PopupType.Large);
|
||||
}
|
||||
|
||||
var args = new DoAfterEventArgs(user, time, default, wearer, item)
|
||||
var args = new DoAfterArgs(user, time, new ToggleClothingDoAfterEvent(), item, wearer, item)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnStun = true,
|
||||
BreakOnTargetMove = true,
|
||||
RaiseOnTarget = false,
|
||||
RaiseOnUsed = true,
|
||||
RaiseOnUser = false,
|
||||
// This should just re-use the BUI range checks & cancel the do after if the BUI closes. But that is all
|
||||
// server-side at the moment.
|
||||
// TODO BUI REFACTOR.
|
||||
DistanceThreshold = 2,
|
||||
};
|
||||
|
||||
var doAfter = _doAfter.DoAfter(args, new ToggleClothingEvent() { Performer = user });
|
||||
component.DoAfterId = doAfter.ID;
|
||||
if (!_doAfter.TryStartDoAfter(args))
|
||||
return;
|
||||
|
||||
if (!stealth)
|
||||
{
|
||||
var popup = Loc.GetString("strippable-component-alert-owner-interact", ("user", Identity.Entity(user, EntityManager)), ("item", item));
|
||||
_popupSystem.PopupEntity(popup, wearer, wearer, PopupType.Large);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGetAttachedStripVerbsEvent(EntityUid uid, AttachedClothingComponent component, GetVerbsEvent<EquipmentVerb> args)
|
||||
@@ -131,15 +124,12 @@ public sealed class ToggleableClothingSystem : EntitySystem
|
||||
OnGetVerbs(component.AttachedUid, Comp<ToggleableClothingComponent>(component.AttachedUid), args);
|
||||
}
|
||||
|
||||
private void OnDoAfterComplete(EntityUid uid, ToggleableClothingComponent component, DoAfterEvent<ToggleClothingEvent> args)
|
||||
private void OnDoAfterComplete(EntityUid uid, ToggleableClothingComponent component, ToggleClothingDoAfterEvent args)
|
||||
{
|
||||
DebugTools.Assert(component.DoAfterId == args.Id);
|
||||
component.DoAfterId = null;
|
||||
|
||||
if (args.Cancelled)
|
||||
return;
|
||||
|
||||
OnToggleClothing(uid, component, args.AdditionalData);
|
||||
ToggleClothing(args.User, uid, component);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
@@ -241,21 +231,28 @@ public sealed class ToggleableClothingSystem : EntitySystem
|
||||
/// </summary>
|
||||
private void OnToggleClothing(EntityUid uid, ToggleableClothingComponent component, ToggleClothingEvent args)
|
||||
{
|
||||
if (args.Handled || component.Container == null || component.ClothingUid == null)
|
||||
if (args.Handled)
|
||||
return;
|
||||
|
||||
var parent = Transform(uid).ParentUid;
|
||||
args.Handled = true;
|
||||
ToggleClothing(args.Performer, uid, component);
|
||||
}
|
||||
|
||||
private void ToggleClothing(EntityUid user, EntityUid target, ToggleableClothingComponent component)
|
||||
{
|
||||
if (component.Container == null || component.ClothingUid == null)
|
||||
return;
|
||||
|
||||
var parent = Transform(target).ParentUid;
|
||||
if (component.Container.ContainedEntity == null)
|
||||
_inventorySystem.TryUnequip(parent, component.Slot);
|
||||
else if (_inventorySystem.TryGetSlotEntity(parent, component.Slot, out var existing))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("toggleable-clothing-remove-first", ("entity", existing)),
|
||||
args.Performer, args.Performer);
|
||||
user, user);
|
||||
}
|
||||
else
|
||||
_inventorySystem.TryEquip(parent, component.ClothingUid.Value, component.Slot);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnGetActions(EntityUid uid, ToggleableClothingComponent component, GetItemActionsEvent args)
|
||||
@@ -312,4 +309,11 @@ public sealed class ToggleableClothingSystem : EntitySystem
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ToggleClothingEvent : InstantActionEvent { }
|
||||
public sealed class ToggleClothingEvent : InstantActionEvent
|
||||
{
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class ToggleClothingDoAfterEvent : SimpleDoAfterEvent
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user