From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Sun, 1 Sep 2024 02:46:18 +0000 (-0700) Subject: Update StackSystem and add SpawnMultiple targeting EntityUid (#29686) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=2f4c3dd6fda636e681bbb3b7b89dec80093c0fc8;p=space-station-14.git Update StackSystem and add SpawnMultiple targeting EntityUid (#29686) * Update StackSystem and add SpawnMultiple targeting EntityUid * Update Content.Server/Stack/StackSystem.cs * Update Content.Server/Stack/StackSystem.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- diff --git a/Content.Server/Stack/StackSystem.cs b/Content.Server/Stack/StackSystem.cs index bac789716c..b9553a6b84 100644 --- a/Content.Server/Stack/StackSystem.cs +++ b/Content.Server/Stack/StackSystem.cs @@ -99,20 +99,56 @@ namespace Content.Server.Stack /// This would spawn 3 stacks of 30 and 1 stack of 7. /// public List SpawnMultiple(string entityPrototype, int amount, EntityCoordinates spawnPosition) + { + var spawns = CalculateSpawns(entityPrototype, amount); + + var spawnedEnts = new List(); + foreach (var count in spawns) + { + var entity = SpawnAtPosition(entityPrototype, spawnPosition); + spawnedEnts.Add(entity); + SetCount(entity, count); + } + + return spawnedEnts; + } + + /// + public List SpawnMultiple(string entityPrototype, int amount, EntityUid target) + { + var spawns = CalculateSpawns(entityPrototype, amount); + + var spawnedEnts = new List(); + foreach (var count in spawns) + { + var entity = SpawnNextToOrDrop(entityPrototype, target); + spawnedEnts.Add(entity); + SetCount(entity, count); + } + + return spawnedEnts; + } + + /// + /// Calculates how many stacks to spawn that total up to . + /// + /// The stack to spawn. + /// The amount of pieces across all stacks. + /// The list of stack counts per entity. + private List CalculateSpawns(string entityPrototype, int amount) { var proto = _prototypeManager.Index(entityPrototype); - proto.TryGetComponent(out var stack); + proto.TryGetComponent(out var stack, EntityManager.ComponentFactory); var maxCountPerStack = GetMaxCount(stack); - var spawnedEnts = new List(); + var amounts = new List(); while (amount > 0) { - var entity = Spawn(entityPrototype, spawnPosition); - spawnedEnts.Add(entity); var countAmount = Math.Min(maxCountPerStack, amount); - SetCount(entity, countAmount); amount -= countAmount; + amounts.Add(countAmount); } - return spawnedEnts; + + return amounts; } private void OnStackAlternativeInteract(EntityUid uid, StackComponent stack, GetVerbsEvent args)