Skip to content
This repository has been archived by the owner on Apr 27, 2024. It is now read-only.

Commit

Permalink
Weight based AreaInsert and Dumpable delay, a janitor qol tweak (spac…
Browse files Browse the repository at this point in the history
…e-wizards#24899)

Weight based delay, retuned average, fixed comments
  • Loading branch information
Krunklehorn authored Mar 2, 2024
1 parent aaf5d0d commit c775410
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 6 deletions.
3 changes: 2 additions & 1 deletion Content.Shared/Storage/Components/DumpableComponent.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Shared.DoAfter;
using Content.Shared.Storage.EntitySystems;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
Expand All @@ -24,7 +25,7 @@ public sealed partial class DumpableComponent : Component
/// How long each item adds to the doafter.
/// </summary>
[DataField("delayPerItem"), AutoNetworkedField]
public TimeSpan DelayPerItem = TimeSpan.FromSeconds(0.2);
public TimeSpan DelayPerItem = TimeSpan.FromSeconds(SharedStorageSystem.AreaInsertDelayPerItem);

/// <summary>
/// The multiplier modifier
Expand Down
18 changes: 17 additions & 1 deletion Content.Shared/Storage/EntitySystems/DumpableSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@
using Content.Shared.Disposal;
using Content.Shared.DoAfter;
using Content.Shared.Interaction;
using Content.Shared.Item;
using Content.Shared.Placeable;
using Content.Shared.Storage.Components;
using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;

namespace Content.Shared.Storage.EntitySystems;

public sealed class DumpableSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
Expand Down Expand Up @@ -113,7 +116,20 @@ private void StartDoAfter(EntityUid storageUid, EntityUid? targetUid, EntityUid
if (!TryComp<StorageComponent>(storageUid, out var storage))
return;

var delay = storage.Container.ContainedEntities.Count * (float) dumpable.DelayPerItem.TotalSeconds * dumpable.Multiplier;
var delay = 0f;

foreach (var entity in storage.Container.ContainedEntities)
{
if (!TryComp<ItemComponent>(entity, out var itemComp) ||
!_prototypeManager.TryIndex(itemComp.Size, out var itemSize))
{
continue;
}

delay += itemSize.Weight;
}

delay *= (float) dumpable.DelayPerItem.TotalSeconds * dumpable.Multiplier;

_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, userUid, delay, new DumpableDoAfterEvent(), storageUid, target: targetUid, used: storageUid)
{
Expand Down
10 changes: 8 additions & 2 deletions Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public abstract class SharedStorageSystem : EntitySystem
[ValidatePrototypeId<ItemSizePrototype>]
public const string DefaultStorageMaxItemSize = "Normal";

public const float AreaInsertDelayPerItem = 0.075f;

private ItemSizePrototype _defaultStorageMaxItemSize = default!;

public bool CheckingCanInsert;
Expand Down Expand Up @@ -258,24 +260,28 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt
if (storageComp.AreaInsert && (args.Target == null || !HasComp<ItemComponent>(args.Target.Value)))
{
var validStorables = new List<EntityUid>();
var delay = 0f;

foreach (var entity in _entityLookupSystem.GetEntitiesInRange(args.ClickLocation, storageComp.AreaInsertRadius, LookupFlags.Dynamic | LookupFlags.Sundries))
{
if (entity == args.User
|| !_itemQuery.HasComponent(entity)
// || !_itemQuery.HasComponent(entity)
|| !TryComp<ItemComponent>(entity, out var itemComp) // Need comp to get item size to get weight
|| !_prototype.TryIndex(itemComp.Size, out var itemSize)
|| !CanInsert(uid, entity, out _, storageComp)
|| !_interactionSystem.InRangeUnobstructed(args.User, entity))
{
continue;
}

validStorables.Add(entity);
delay += itemSize.Weight * AreaInsertDelayPerItem;
}

//If there's only one then let's be generous
if (validStorables.Count > 1)
{
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, 0.2f * validStorables.Count, new AreaPickupDoAfterEvent(GetNetEntityList(validStorables)), uid, target: uid)
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, delay, new AreaPickupDoAfterEvent(GetNetEntityList(validStorables)), uid, target: uid)
{
BreakOnDamage = true,
BreakOnUserMove = true,
Expand Down
4 changes: 2 additions & 2 deletions Content.Shared/Storage/StorageComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ public sealed partial class StorageComponent : Component

// TODO: Make area insert its own component.
[DataField]
public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity
public bool QuickInsert; // Can insert storables by clicking them with the storage entity

[DataField]
public bool ClickInsert = true; // Can insert stuff by clicking the storage entity with it

[DataField]
public bool AreaInsert; // "Attacking" with the storage entity causes it to insert all nearby storables after a delay
public bool AreaInsert; // Clicking with the storage entity causes it to insert all nearby storables after a delay

[DataField]
public int AreaInsertRadius = 1;
Expand Down

0 comments on commit c775410

Please sign in to comment.