Stack and storage enhancements (#16405)
This commit is contained in:
@@ -105,7 +105,7 @@ namespace Content.Shared.Stacks
|
||||
if (!Resolve(recipient, ref recipientStack, false) || !Resolve(donor, ref donorStack, false))
|
||||
return false;
|
||||
|
||||
if (recipientStack.StackTypeId == null || !recipientStack.StackTypeId.Equals(donorStack.StackTypeId))
|
||||
if (string.IsNullOrEmpty(recipientStack.StackTypeId) || !recipientStack.StackTypeId.Equals(donorStack.StackTypeId))
|
||||
return false;
|
||||
|
||||
transfered = Math.Min(donorStack.Count, GetAvailableSpace(recipientStack));
|
||||
@@ -270,7 +270,7 @@ namespace Content.Shared.Stacks
|
||||
if (component.MaxCountOverride != null)
|
||||
return component.MaxCountOverride.Value;
|
||||
|
||||
if (component.StackTypeId == null)
|
||||
if (string.IsNullOrEmpty(component.StackTypeId))
|
||||
return 1;
|
||||
|
||||
var stackProto = _prototype.Index<StackPrototype>(component.StackTypeId);
|
||||
@@ -289,6 +289,38 @@ namespace Content.Shared.Stacks
|
||||
return GetMaxCount(component) - component.Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to add one stack to another. May have some leftover count in the inserted entity.
|
||||
/// </summary>
|
||||
public bool TryAdd(EntityUid insertEnt, EntityUid targetEnt, StackComponent? insertStack = null, StackComponent? targetStack = null)
|
||||
{
|
||||
if (!Resolve(insertEnt, ref insertStack) || !Resolve(targetEnt, ref targetStack))
|
||||
return false;
|
||||
|
||||
var count = insertStack.Count;
|
||||
return TryAdd(insertEnt, targetEnt, count, insertStack, targetStack);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to add one stack to another. May have some leftover count in the inserted entity.
|
||||
/// </summary>
|
||||
public bool TryAdd(EntityUid insertEnt, EntityUid targetEnt, int count, StackComponent? insertStack = null, StackComponent? targetStack = null)
|
||||
{
|
||||
if (!Resolve(insertEnt, ref insertStack) || !Resolve(targetEnt, ref targetStack))
|
||||
return false;
|
||||
|
||||
var available = GetAvailableSpace(targetStack);
|
||||
|
||||
if (available <= 0)
|
||||
return false;
|
||||
|
||||
var change = Math.Min(available, count);
|
||||
|
||||
SetCount(targetEnt, targetStack.Count + change, targetStack);
|
||||
SetCount(insertEnt, insertStack.Count - change, insertStack);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnStackStarted(EntityUid uid, StackComponent component, ComponentStartup args)
|
||||
{
|
||||
if (!TryComp(uid, out AppearanceComponent? appearance))
|
||||
|
||||
Reference in New Issue
Block a user