DoAfter Refactor (#13225)
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
@@ -4,11 +4,11 @@ using Content.Server.Chemistry.EntitySystems;
|
||||
using Content.Server.DoAfter;
|
||||
using Content.Server.Nutrition.Components;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Nutrition.Components;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Shared.Player;
|
||||
|
||||
namespace Content.Server.Animals.Systems
|
||||
{
|
||||
@@ -26,10 +26,8 @@ namespace Content.Server.Animals.Systems
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<UdderComponent, GetVerbsEvent<AlternativeVerb>>(AddMilkVerb);
|
||||
SubscribeLocalEvent<UdderComponent, MilkingFinishedEvent>(OnMilkingFinished);
|
||||
SubscribeLocalEvent<UdderComponent, MilkingFailEvent>(OnMilkingFailed);
|
||||
SubscribeLocalEvent<UdderComponent, DoAfterEvent>(OnDoAfter);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
foreach (var udder in EntityManager.EntityQuery<UdderComponent>(false))
|
||||
@@ -74,34 +72,41 @@ namespace Content.Server.Animals.Systems
|
||||
|
||||
udder.BeingMilked = true;
|
||||
|
||||
var doargs = new DoAfterEventArgs(userUid, 5, default, uid)
|
||||
var doargs = new DoAfterEventArgs(userUid, 5, target:uid, used:containerUid)
|
||||
{
|
||||
BreakOnUserMove = true,
|
||||
BreakOnDamage = true,
|
||||
BreakOnStun = true,
|
||||
BreakOnTargetMove = true,
|
||||
MovementThreshold = 1.0f,
|
||||
TargetFinishedEvent = new MilkingFinishedEvent(userUid, containerUid),
|
||||
TargetCancelledEvent = new MilkingFailEvent()
|
||||
MovementThreshold = 1.0f
|
||||
};
|
||||
|
||||
_doAfterSystem.DoAfter(doargs);
|
||||
}
|
||||
|
||||
private void OnMilkingFinished(EntityUid uid, UdderComponent udder, MilkingFinishedEvent ev)
|
||||
private void OnDoAfter(EntityUid uid, UdderComponent component, DoAfterEvent args)
|
||||
{
|
||||
udder.BeingMilked = false;
|
||||
if (args.Cancelled)
|
||||
{
|
||||
component.BeingMilked = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_solutionContainerSystem.TryGetSolution(uid, udder.TargetSolutionName, out var solution))
|
||||
if (args.Handled || args.Args.Used == null)
|
||||
return;
|
||||
|
||||
if (!_solutionContainerSystem.TryGetRefillableSolution(ev.ContainerUid, out var targetSolution))
|
||||
component.BeingMilked = false;
|
||||
|
||||
if (!_solutionContainerSystem.TryGetSolution(uid, component.TargetSolutionName, out var solution))
|
||||
return;
|
||||
|
||||
if (!_solutionContainerSystem.TryGetRefillableSolution(args.Args.Used.Value, out var targetSolution))
|
||||
return;
|
||||
|
||||
var quantity = solution.Volume;
|
||||
if(quantity == 0)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("udder-system-dry"), uid, ev.UserUid);
|
||||
_popupSystem.PopupEntity(Loc.GetString("udder-system-dry"), uid, args.Args.User);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -109,15 +114,12 @@ namespace Content.Server.Animals.Systems
|
||||
quantity = targetSolution.AvailableVolume;
|
||||
|
||||
var split = _solutionContainerSystem.SplitSolution(uid, solution, quantity);
|
||||
_solutionContainerSystem.TryAddSolution(ev.ContainerUid, targetSolution, split);
|
||||
_solutionContainerSystem.TryAddSolution(args.Args.Used.Value, targetSolution, split);
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("udder-system-success", ("amount", quantity), ("target", Identity.Entity(ev.ContainerUid, EntityManager))), uid,
|
||||
ev.UserUid, PopupType.Medium);
|
||||
}
|
||||
_popupSystem.PopupEntity(Loc.GetString("udder-system-success", ("amount", quantity), ("target", Identity.Entity(args.Args.Used.Value, EntityManager))), uid,
|
||||
args.Args.User, PopupType.Medium);
|
||||
|
||||
private void OnMilkingFailed(EntityUid uid, UdderComponent component, MilkingFailEvent ev)
|
||||
{
|
||||
component.BeingMilked = false;
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void AddMilkVerb(EntityUid uid, UdderComponent component, GetVerbsEvent<AlternativeVerb> args)
|
||||
@@ -138,20 +140,5 @@ namespace Content.Server.Animals.Systems
|
||||
};
|
||||
args.Verbs.Add(verb);
|
||||
}
|
||||
|
||||
private sealed class MilkingFinishedEvent : EntityEventArgs
|
||||
{
|
||||
public EntityUid UserUid;
|
||||
public EntityUid ContainerUid;
|
||||
|
||||
public MilkingFinishedEvent(EntityUid userUid, EntityUid containerUid)
|
||||
{
|
||||
UserUid = userUid;
|
||||
ContainerUid = containerUid;
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class MilkingFailEvent : EntityEventArgs
|
||||
{ }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user