mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 13:37:47 +03:00
* Initial radial menu prototyping for the RCD * Radial UI buttons can send messages to the server * Beginning to update RCDSystem * RCD building system in progress * Further updates * Added extra effects, RCDSystem now reads RCD prototype data * Replacing tiles is instant, multiple constructions are allowed, deconstruction is broken * Added extra functionality to RadialContainers plus documentation * Fixed localization of RCD UI strings * Menu opens near cursor, added basic RCD * Avoiding merge conflict * Implemented atomized construction / deconstruction rules * Increased RCD ammo base charges * Moved input context definition to content * Removed obsoleted code * Updates to system * Switch machine and computer frames for electrical cabling * Added construction ghosts * Fixed issue with keybind detection code * Fixed RCD construction ghost mispredications * Code clean up * Updated deconstruction effects * RCDs effects don't rotate * Code clean up * Balancing for ammo counts * Code clean up * Added missing localized strings * More clean up * Made directional window handling more robust * Added documentation to radial menus and made them no longer dependent on Content * Made radial containers more robust * Further robustness to the radial menu * The RCD submenu buttons are only shown when the destination layer has at least one children * Expanded upon deconstructing plus construction balance * Fixed line endings * Updated list of RCD deconstructable entities. Now needs a component to deconstruct instead of a tag * Bug fixes * Revert unnecessary change * Updated RCD strings * Fixed bug * More fixes * Deconstructed tiles/subflooring convert to lattice instead * Fixed failed tests (Linux doesn't like invalid spritespecifer paths) * Fixing merge conflict * Updated airlock assembly * Fixing merge conflict * Fixing merge conflict * More fixing... * Removed erroneous project file change * Fixed string handling issue * Trying to fix merge conflict * Still fixing merge conflicts * Balancing * Hidden RCD construction ghosts when in 'build' mode * Fixing merge conflict * Implemented requested changes (Part 1) * Added more requested changes * Fix for failed test. Removed sussy null suppression * Made requested changes - custom construction ghost system was replaced * Fixing merge conflict * Fixed merge conflict * Fixed bug in RCD construction ghost validation * Fixing merge conflict * Merge conflict fixed * Made required update * Removed lingering RCD deconstruct tag * Fixing merge conflict * Merge conflict fixed * Made requested changes * Bug fixes and balancing * Made string names more consistent * Can no longer stack catwalks
85 lines
2.7 KiB
C#
85 lines
2.7 KiB
C#
using Content.Shared.Database;
|
|
using Content.Shared.DoAfter;
|
|
using Content.Shared.Examine;
|
|
using Content.Shared.FixedPoint;
|
|
using Content.Shared.Fluids.Components;
|
|
using Content.Shared.Nutrition.EntitySystems;
|
|
using Content.Shared.Spillable;
|
|
using Content.Shared.Verbs;
|
|
using Content.Shared.Weapons.Melee;
|
|
|
|
namespace Content.Shared.Fluids;
|
|
|
|
public abstract partial class SharedPuddleSystem
|
|
{
|
|
[Dependency] protected readonly SharedOpenableSystem Openable = default!;
|
|
|
|
protected virtual void InitializeSpillable()
|
|
{
|
|
SubscribeLocalEvent<SpillableComponent, ExaminedEvent>(OnExamined);
|
|
SubscribeLocalEvent<SpillableComponent, GetVerbsEvent<Verb>>(AddSpillVerb);
|
|
}
|
|
|
|
private void OnExamined(Entity<SpillableComponent> entity, ref ExaminedEvent args)
|
|
{
|
|
using (args.PushGroup(nameof(SpillableComponent)))
|
|
{
|
|
args.PushMarkup(Loc.GetString("spill-examine-is-spillable"));
|
|
|
|
if (HasComp<MeleeWeaponComponent>(entity))
|
|
args.PushMarkup(Loc.GetString("spill-examine-spillable-weapon"));
|
|
}
|
|
}
|
|
|
|
private void AddSpillVerb(Entity<SpillableComponent> entity, ref GetVerbsEvent<Verb> args)
|
|
{
|
|
if (!args.CanAccess || !args.CanInteract)
|
|
return;
|
|
|
|
if (!_solutionContainerSystem.TryGetSolution(args.Target, entity.Comp.SolutionName, out var soln, out var solution))
|
|
return;
|
|
|
|
if (Openable.IsClosed(args.Target))
|
|
return;
|
|
|
|
if (solution.Volume == FixedPoint2.Zero)
|
|
return;
|
|
|
|
if (HasComp<PreventSpillerComponent>(args.User))
|
|
return;
|
|
|
|
|
|
Verb verb = new()
|
|
{
|
|
Text = Loc.GetString("spill-target-verb-get-data-text")
|
|
};
|
|
|
|
// TODO VERB ICONS spill icon? pouring out a glass/beaker?
|
|
if (entity.Comp.SpillDelay == null)
|
|
{
|
|
var target = args.Target;
|
|
verb.Act = () =>
|
|
{
|
|
var puddleSolution = _solutionContainerSystem.SplitSolution(soln.Value, solution.Volume);
|
|
TrySpillAt(Transform(target).Coordinates, puddleSolution, out _);
|
|
};
|
|
}
|
|
else
|
|
{
|
|
var user = args.User;
|
|
verb.Act = () =>
|
|
{
|
|
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, entity.Comp.SpillDelay ?? 0, new SpillDoAfterEvent(), entity.Owner, target: entity.Owner)
|
|
{
|
|
BreakOnDamage = true,
|
|
BreakOnUserMove = true,
|
|
NeedHand = true,
|
|
});
|
|
};
|
|
}
|
|
verb.Impact = LogImpact.Medium; // dangerous reagent reaction are logged separately.
|
|
verb.DoContactInteraction = true;
|
|
args.Verbs.Add(verb);
|
|
}
|
|
}
|