Hyposprays Draw from Jugs (#25544)
* Hyposprays Draw from Jugs * Fix last onlyMobs usage in yml * Some Suggested Changes * Remove unnecessary datafield name declarations * Remove unnecessary dirtying of component * Same line parentheses * Added client-side HypospraySystem * Cache UI values and only updates if values change * empty line * Update label * Label change * Reimplement ReactionMixerSystem * Remove DataField from Hypospray Toggle Mode * Change ToggleMode from enum to Bool OnlyAffectsMobs * Add DataField required back since it's required for replays...? * update EligibleEntity and uses of it * Add user argument back * Adds newline Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Guard for dirty entity * Adds summary tag --------- Co-authored-by: Plykiya <plykiya@protonmail.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Content.Shared.Timing;
|
||||
using Content.Shared.Verbs;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Player;
|
||||
using Content.Shared.Administration.Logs;
|
||||
|
||||
namespace Content.Shared.Chemistry.EntitySystems;
|
||||
|
||||
public abstract class SharedHypospraySystem : EntitySystem
|
||||
{
|
||||
[Dependency] protected readonly UseDelaySystem _useDelay = default!;
|
||||
[Dependency] protected readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] protected readonly SharedSolutionContainerSystem _solutionContainers = default!;
|
||||
[Dependency] protected readonly ISharedAdminLogManager _adminLogger = default!;
|
||||
[Dependency] protected readonly ReactiveSystem _reactiveSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<HyposprayComponent, GetVerbsEvent<AlternativeVerb>>(AddToggleModeVerb);
|
||||
}
|
||||
|
||||
// <summary>
|
||||
// Uses the OnlyMobs field as a check to implement the ability
|
||||
// to draw from jugs and containers with the hypospray
|
||||
// Toggleable to allow people to inject containers if they prefer it over drawing
|
||||
// </summary>
|
||||
private void AddToggleModeVerb(Entity<HyposprayComponent> entity, ref GetVerbsEvent<AlternativeVerb> args)
|
||||
{
|
||||
if (!args.CanAccess || !args.CanInteract || args.Hands == null)
|
||||
return;
|
||||
|
||||
var (_, component) = entity;
|
||||
var user = args.User;
|
||||
var verb = new AlternativeVerb
|
||||
{
|
||||
Text = Loc.GetString("hypospray-verb-mode-label"),
|
||||
Act = () =>
|
||||
{
|
||||
ToggleMode(entity, user);
|
||||
}
|
||||
};
|
||||
args.Verbs.Add(verb);
|
||||
}
|
||||
|
||||
private void ToggleMode(Entity<HyposprayComponent> entity, EntityUid user)
|
||||
{
|
||||
SetMode(entity, !entity.Comp.OnlyAffectsMobs);
|
||||
string msg = entity.Comp.OnlyAffectsMobs ? "hypospray-verb-mode-inject-mobs-only" : "hypospray-verb-mode-inject-all";
|
||||
_popup.PopupClient(Loc.GetString(msg), entity, user);
|
||||
}
|
||||
|
||||
public void SetMode(Entity<HyposprayComponent> entity, bool onlyAffectsMobs)
|
||||
{
|
||||
if (entity.Comp.OnlyAffectsMobs == onlyAffectsMobs)
|
||||
return;
|
||||
|
||||
entity.Comp.OnlyAffectsMobs = onlyAffectsMobs;
|
||||
Dirty(entity);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user