Stack System Cleanup (#38872)
* eye on the prize * OnStackInteractUsing, TryMergeStacks, TryMergeToHands, TryMergeToContacts * namespace * Use, get count, getMaxCount * component access * add regions, mark TODO * obsolete TryAdd, public TryMergeStacks * GetMaxCount * event handlers * event handlers * SetCount * client server event handlers * move to shared * Revert "move to shared" This reverts commit 45540a2d6b8e1e6d2a8f83a584267776c7edcd73. * misc changes to shared * split * spawn and SpawnNextToOrDrop * SpawnMultipleAtPosition, SpawnMultipleNextToOrDrop, CalculateSpawns, general server cleanup * Rename Use to TryUse. * Small misc changes * Remove obsolete functions * Remove some SetCount calls * Partialize * small misc change * don't nuke the git dif with the namespace block * Comments and reordering * touchup to UpdateLingering * Summary comment for StackStatusControl * Last pass * Actual last pass (for now) * I know myself too well * fixup * goodbye lingering * fixes * review * fix test * second look * fix test * forgot * remove early comp getting --------- Co-authored-by: iaada <iaada@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System.Linq;
|
||||
using Content.Client.Items;
|
||||
using Content.Client.Storage.Systems;
|
||||
using Content.Shared.Stacks;
|
||||
@@ -7,6 +6,7 @@ using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Stack
|
||||
{
|
||||
/// <inheritdoc />
|
||||
[UsedImplicitly]
|
||||
public sealed class StackSystem : SharedStackSystem
|
||||
{
|
||||
@@ -16,33 +16,21 @@ namespace Content.Client.Stack
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<StackComponent, AppearanceChangeEvent>(OnAppearanceChange);
|
||||
Subs.ItemStatus<StackComponent>(ent => new StackStatusControl(ent));
|
||||
}
|
||||
|
||||
public override void SetCount(EntityUid uid, int amount, StackComponent? component = null)
|
||||
#region Appearance
|
||||
|
||||
private void OnAppearanceChange(Entity<StackComponent> ent, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (!Resolve(uid, ref component))
|
||||
return;
|
||||
var (uid, comp) = ent;
|
||||
|
||||
base.SetCount(uid, amount, component);
|
||||
|
||||
// TODO PREDICT ENTITY DELETION: This should really just be a normal entity deletion call.
|
||||
if (component.Count <= 0)
|
||||
{
|
||||
Xform.DetachEntity(uid, Transform(uid));
|
||||
return;
|
||||
}
|
||||
|
||||
component.UiUpdateNeeded = true;
|
||||
}
|
||||
|
||||
private void OnAppearanceChange(EntityUid uid, StackComponent comp, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (args.Sprite == null || comp.LayerStates.Count < 1)
|
||||
return;
|
||||
|
||||
// Skip processing if no actual
|
||||
// Skip processing if no elements in the stack
|
||||
if (!_appearanceSystem.TryGetData<int>(uid, StackVisuals.Actual, out var actual, args.Component))
|
||||
return;
|
||||
|
||||
@@ -56,9 +44,24 @@ namespace Content.Client.Stack
|
||||
ApplyLayerFunction((uid, comp), ref actual, ref maxCount);
|
||||
|
||||
if (comp.IsComposite)
|
||||
_counterSystem.ProcessCompositeSprite(uid, actual, maxCount, comp.LayerStates, hidden, sprite: args.Sprite);
|
||||
{
|
||||
_counterSystem.ProcessCompositeSprite(uid,
|
||||
actual,
|
||||
maxCount,
|
||||
comp.LayerStates,
|
||||
hidden,
|
||||
sprite: args.Sprite);
|
||||
}
|
||||
else
|
||||
_counterSystem.ProcessOpaqueSprite(uid, comp.BaseLayer, actual, maxCount, comp.LayerStates, hidden, sprite: args.Sprite);
|
||||
{
|
||||
_counterSystem.ProcessOpaqueSprite(uid,
|
||||
comp.BaseLayer,
|
||||
actual,
|
||||
maxCount,
|
||||
comp.LayerStates,
|
||||
hidden,
|
||||
sprite: args.Sprite);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -67,7 +70,7 @@ namespace Content.Client.Stack
|
||||
/// <param name="ent">The entity considered.</param>
|
||||
/// <param name="actual">The actual number of items in the stack. Altered depending on the function to run.</param>
|
||||
/// <param name="maxCount">The maximum number of items in the stack. Altered depending on the function to run.</param>
|
||||
/// <returns>Whether or not a function was applied.</returns>
|
||||
/// <returns>True if a function was applied.</returns>
|
||||
private bool ApplyLayerFunction(Entity<StackComponent> ent, ref int actual, ref int maxCount)
|
||||
{
|
||||
switch (ent.Comp.LayerFunction)
|
||||
@@ -78,8 +81,10 @@ namespace Content.Client.Stack
|
||||
ApplyThreshold(threshold, ref actual, ref maxCount);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// No function applied.
|
||||
return false;
|
||||
}
|
||||
@@ -105,7 +110,10 @@ namespace Content.Client.Stack
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
actual = newActual;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user