Skip to content

Commit

Permalink
Фикс следов (#59)
Browse files Browse the repository at this point in the history
* fixes

* // Corvax-Next-Footprints

* Apply suggestions from code review

* next

* Fixes

* Wo don't need this

* Improvements

* const

* // Corvax-Next-Something

Co-authored-by: FN <[email protected]>

---------

Co-authored-by: AwareFoxy <[email protected]>
Co-authored-by: FN <[email protected]>
Co-authored-by: FN <[email protected]>
  • Loading branch information
4 people authored Nov 18, 2024
1 parent 3af71ea commit cdba530
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 6 deletions.
88 changes: 82 additions & 6 deletions Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Content.Shared._CorvaxNext.Footprints.Components;

namespace Content.Server.Fluids.EntitySystems;

Expand All @@ -28,6 +29,9 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
[Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly MapSystem _mapSystem = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;

public const float FootprintAbsorptionRange = 0.25f; // Corvax-Next-Footprints

public override void Initialize()
{
Expand Down Expand Up @@ -111,13 +115,18 @@ public void Mop(EntityUid user, EntityUid target, EntityUid used, AbsorbentCompo
&& _useDelay.IsDelayed((used, useDelay)))
return;

// Corvax-Next-Footprints-Start
// Footsteps cleaning logic, try to grab from
if (TryFootprintInteract(user, used, target, component, useDelay, absorberSoln.Value))
return;

// If it's a puddle try to grab from
if (!TryPuddleInteract(user, used, target, component, useDelay, absorberSoln.Value))
{
// If it's refillable try to transfer
if (!TryRefillableInteract(user, used, target, component, useDelay, absorberSoln.Value))
return;
}
if (TryPuddleInteract(user, used, target, component, useDelay, absorberSoln.Value))
return;

// If it's refillable try to transfer
TryRefillableInteract(user, used, target, component, useDelay, absorberSoln.Value);
// Corvax-Next-Footprints-End
}

/// <summary>
Expand Down Expand Up @@ -324,4 +333,71 @@ private bool TryPuddleInteract(EntityUid user, EntityUid used, EntityUid target,

return true;
}

// Corvax-Next-Footprints-Start
private bool TryFootprintInteract(EntityUid user, EntityUid used, EntityUid target, AbsorbentComponent absorber, UseDelayComponent? useDelay, Entity<SolutionComponent> absorberSoln)
{
if (!HasComp<FootprintComponent>(target)) // Perform a check if it was a footprint that was clicked on
return false;

var soundPlayed = false;

var footPrints = new HashSet<Entity<FootprintComponent>>();
_lookup.GetEntitiesInRange(Transform(target).Coordinates, FootprintAbsorptionRange, footPrints, LookupFlags.Dynamic | LookupFlags.Uncontained);

foreach (var (footstepUid, comp) in footPrints)
{
if (!_solutionContainerSystem.ResolveSolution(footstepUid, comp.SolutionName, ref comp.Solution, out var targetStepSolution) || targetStepSolution.Volume <= 0)
continue;

if (_puddleSystem.CanFullyEvaporate(targetStepSolution))
continue; // no spam

var absorberSolution = absorberSoln.Comp.Solution;
var available = absorberSolution.GetTotalPrototypeQuantity(SharedPuddleSystem.EvaporationReagents);

// No material
if (available == FixedPoint2.Zero)
{
_popups.PopupEntity(Loc.GetString("mopping-system-no-water", ("used", used)), user, user);
return true;
}

var transferMax = absorber.PickupAmount;
var transferAmount = FixedPoint2.Min(transferMax, available);

var puddleSplit = targetStepSolution.SplitSolutionWithout(transferAmount, SharedPuddleSystem.EvaporationReagents);
var absorberSplit = absorberSolution.SplitSolutionWithOnly(puddleSplit.Volume, SharedPuddleSystem.EvaporationReagents);

var transform = Transform(target);
var gridUid = transform.GridUid;
if (TryComp<MapGridComponent>(gridUid, out var mapGrid))
{
var tileRef = _mapSystem.GetTileRef(gridUid.Value, mapGrid, transform.Coordinates);
_puddleSystem.DoTileReactions(tileRef, absorberSplit);
}

_solutionContainerSystem.AddSolution(comp.Solution.Value, absorberSplit);
_solutionContainerSystem.AddSolution(absorberSoln, puddleSplit);

if (!soundPlayed)
{
soundPlayed = true; // to prevent sound spam
_audio.PlayPvs(absorber.PickupSound, target);
}

if (useDelay is not null)
_useDelay.TryResetDelay((used, useDelay));
}

var userXform = Transform(user);
var targetPos = _transform.GetWorldPosition(target);
var localPos = Vector2.Transform(targetPos, _transform.GetInvWorldMatrix(userXform));
localPos = userXform.LocalRotation.RotateVec(localPos);

_melee.DoLunge(user, used, Angle.Zero, localPos, null, false);

return true;
}
// Corvax-Next-Footprints-End
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ent-Footstep = след
.desc = След из жидкости.

0 comments on commit cdba530

Please sign in to comment.