Staff of Animation Fixes & Recharging (#37021)
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
using System.Linq;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Charges.Components;
|
||||
using Content.Shared.Charges.Systems;
|
||||
using Content.Shared.Interaction;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
@@ -15,6 +17,7 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private readonly SharedChargesSystem _charges = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -54,6 +57,9 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
if (options.Count == 0)
|
||||
return;
|
||||
|
||||
if (!TryUseCharge((uid, component)))
|
||||
return;
|
||||
|
||||
var (actId, act) = _random.Pick(options);
|
||||
_actions.PerformAction(args.User, null, actId, act, act.Event, _timing.CurTime, false);
|
||||
args.Handled = true;
|
||||
@@ -85,6 +91,9 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
|
||||
if (entOptions.Count > 0)
|
||||
{
|
||||
if (!TryUseCharge((uid, component)))
|
||||
return;
|
||||
|
||||
var (entActId, entAct) = _random.Pick(entOptions);
|
||||
if (entAct.Event != null)
|
||||
{
|
||||
@@ -108,6 +117,9 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
|
||||
if (entWorldOptions.Count > 0)
|
||||
{
|
||||
if (!TryUseCharge((uid, component)))
|
||||
return;
|
||||
|
||||
var (entActId, entAct) = _random.Pick(entWorldOptions);
|
||||
if (entAct.Event != null)
|
||||
{
|
||||
@@ -132,6 +144,9 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
if (options.Count == 0)
|
||||
return;
|
||||
|
||||
if (!TryUseCharge((uid, component)))
|
||||
return;
|
||||
|
||||
var (actId, act) = _random.Pick(options);
|
||||
if (act.Event != null)
|
||||
{
|
||||
@@ -163,4 +178,17 @@ public sealed class ActionOnInteractSystem : EntitySystem
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
private bool TryUseCharge(Entity<ActionOnInteractComponent> ent)
|
||||
{
|
||||
if (!ent.Comp.RequiresCharge)
|
||||
return true;
|
||||
|
||||
Entity<LimitedChargesComponent?> charges = ent.Owner;
|
||||
if (_charges.IsEmpty(charges))
|
||||
return false;
|
||||
|
||||
_charges.TryUseCharge(charges);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user