using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.DragDrop; using Content.Shared.Fluids.Components; using Content.Shared.Movement.Events; using Robust.Shared.Prototypes; namespace Content.Shared.Fluids; public abstract class SharedPuddleSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; /// /// The lowest threshold to be considered for puddle sprite states as well as slipperiness of a puddle. /// public const float LowThreshold = 0.3f; public const float MediumThreshold = 0.6f; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnRefillableCanDrag); SubscribeLocalEvent(OnDumpCanDropTarget); SubscribeLocalEvent(OnDrainCanDropTarget); SubscribeLocalEvent(OnRefillableCanDropDragged); SubscribeLocalEvent(OnGetFootstepSound); } private void OnRefillableCanDrag(Entity entity, ref CanDragEvent args) { args.Handled = true; } private void OnDumpCanDropTarget(Entity entity, ref CanDropTargetEvent args) { if (HasComp(args.Dragged)) { args.CanDrop = true; args.Handled = true; } } private void OnDrainCanDropTarget(Entity entity, ref CanDropTargetEvent args) { if (HasComp(args.Dragged)) { args.CanDrop = true; args.Handled = true; } } private void OnRefillableCanDropDragged(Entity entity, ref CanDropDraggedEvent args) { if (!HasComp(args.Target) && !HasComp(args.Target)) return; args.CanDrop = true; args.Handled = true; } private void OnGetFootstepSound(Entity entity, ref GetFootstepSoundEvent args) { if (!_solutionContainerSystem.ResolveSolution(entity.Owner, entity.Comp.SolutionName, ref entity.Comp.Solution, out var solution)) return; var reagentId = solution.GetPrimaryReagentId(); if (!string.IsNullOrWhiteSpace(reagentId?.Prototype) && _prototypeManager.TryIndex(reagentId.Value.Prototype, out ReagentPrototype? proto)) { args.Sound = proto.FootstepSound; } } }