Removes solution transfer verbs (#4048)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Content.Server.Administration;
|
using Content.Server.Administration;
|
||||||
using Content.Server.Eui;
|
using Content.Server.Eui;
|
||||||
using Content.Server.GameObjects.Components.GUI;
|
using Content.Server.GameObjects.Components.GUI;
|
||||||
@@ -18,132 +18,6 @@ using Robust.Shared.Localization;
|
|||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Chemistry
|
namespace Content.Server.GameObjects.Components.Chemistry
|
||||||
{
|
{
|
||||||
internal abstract class SolutionTransferVerbBase : GlobalVerb
|
|
||||||
{
|
|
||||||
protected static bool GetHeldSolution(
|
|
||||||
IEntity holder,
|
|
||||||
[NotNullWhen(true)]
|
|
||||||
out IEntity? held,
|
|
||||||
[NotNullWhen(true)]
|
|
||||||
out ISolutionInteractionsComponent? heldSolution)
|
|
||||||
{
|
|
||||||
if (!holder.TryGetComponent(out HandsComponent? hands)
|
|
||||||
|| hands.GetActiveHand == null
|
|
||||||
|| !hands.GetActiveHand.Owner.TryGetComponent(out heldSolution))
|
|
||||||
{
|
|
||||||
held = null;
|
|
||||||
heldSolution = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
held = heldSolution.Owner;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Transfers solution from the held container to the target container.
|
|
||||||
/// </summary>
|
|
||||||
[GlobalVerb]
|
|
||||||
internal sealed class SolutionFillTargetVerb : SolutionTransferVerbBase
|
|
||||||
{
|
|
||||||
public override void GetData(IEntity user, IEntity target, VerbData data)
|
|
||||||
{
|
|
||||||
if (!target.TryGetComponent(out ISolutionInteractionsComponent? targetSolution) ||
|
|
||||||
!ActionBlockerSystem.CanInteract(user) ||
|
|
||||||
!GetHeldSolution(user, out var source, out var sourceSolution) ||
|
|
||||||
source != target ||
|
|
||||||
!sourceSolution.CanDrain ||
|
|
||||||
!targetSolution.CanRefill)
|
|
||||||
{
|
|
||||||
data.Visibility = VerbVisibility.Invisible;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
data.Visibility = VerbVisibility.Visible;
|
|
||||||
data.Text = Loc.GetString("Transfer liquid from [{0}] to [{1}].", source.Name, target.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Activate(IEntity user, IEntity target)
|
|
||||||
{
|
|
||||||
if (!GetHeldSolution(user, out _, out var handSolutionComp))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!handSolutionComp.CanDrain ||
|
|
||||||
!target.TryGetComponent(out ISolutionInteractionsComponent? targetComp) ||
|
|
||||||
!targetComp.CanRefill)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var transferQuantity = ReagentUnit.Min(
|
|
||||||
targetComp.RefillSpaceAvailable,
|
|
||||||
handSolutionComp.DrainAvailable,
|
|
||||||
ReagentUnit.New(10));
|
|
||||||
|
|
||||||
if (transferQuantity <= 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var transferSolution = handSolutionComp.Drain(transferQuantity);
|
|
||||||
targetComp.Refill(transferSolution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Transfers solution from a target container to the held container.
|
|
||||||
/// </summary>
|
|
||||||
[GlobalVerb]
|
|
||||||
internal sealed class SolutionDrainTargetVerb : SolutionTransferVerbBase
|
|
||||||
{
|
|
||||||
public override void GetData(IEntity user, IEntity target, VerbData data)
|
|
||||||
{
|
|
||||||
if (!target.TryGetComponent(out ISolutionInteractionsComponent? sourceSolution) ||
|
|
||||||
!ActionBlockerSystem.CanInteract(user) ||
|
|
||||||
!GetHeldSolution(user, out var held, out var targetSolution) ||
|
|
||||||
!sourceSolution.CanDrain ||
|
|
||||||
!targetSolution.CanRefill)
|
|
||||||
{
|
|
||||||
data.Visibility = VerbVisibility.Invisible;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
data.Visibility = VerbVisibility.Visible;
|
|
||||||
data.Text = Loc.GetString("Transfer liquid from [{0}] to [{1}].", held.Name, target.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Activate(IEntity user, IEntity target)
|
|
||||||
{
|
|
||||||
if (!GetHeldSolution(user, out _, out var targetComp))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!targetComp.CanRefill ||
|
|
||||||
!target.TryGetComponent(out ISolutionInteractionsComponent? sourceComp) ||
|
|
||||||
!sourceComp.CanDrain)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var transferQuantity = ReagentUnit.Min(
|
|
||||||
targetComp.RefillSpaceAvailable,
|
|
||||||
sourceComp.DrainAvailable,
|
|
||||||
ReagentUnit.New(10));
|
|
||||||
|
|
||||||
if (transferQuantity <= 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var transferSolution = sourceComp.Drain(transferQuantity);
|
|
||||||
targetComp.Refill(transferSolution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[GlobalVerb]
|
[GlobalVerb]
|
||||||
internal sealed class AdminAddReagentVerb : GlobalVerb
|
internal sealed class AdminAddReagentVerb : GlobalVerb
|
||||||
{
|
{
|
||||||
Reference in New Issue
Block a user