#nullable enable using System.Collections.Generic; using Content.Server.GameObjects.Components.Stack; using Content.Server.GameObjects.EntitySystems; using Content.Shared.Utility; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; namespace Content.Server.GameObjects.Components.Destructible.Thresholds.Behavior { public class SpawnEntitiesBehavior : IThresholdBehavior { /// /// Entities spawned on reaching this threshold, from a min to a max. /// public Dictionary Spawn { get; set; } = new(); void IExposeData.ExposeData(ObjectSerializer serializer) { serializer.DataField(this, x => x.Spawn, "spawn", new Dictionary()); } public void Trigger(IEntity owner, DestructibleSystem system) { foreach (var (entityId, minMax) in Spawn) { var count = minMax.Min >= minMax.Max ? minMax.Min : system.Random.Next(minMax.Min, minMax.Max + 1); if (count == 0) continue; if (EntityPrototypeHelpers.HasComponent(entityId)) { var spawned = owner.EntityManager.SpawnEntity(entityId, owner.Transform.Coordinates); var stack = spawned.GetComponent(); stack.Count = count; spawned.RandomOffset(0.5f); } else { for (var i = 0; i < count; i++) { var spawned = owner.EntityManager.SpawnEntity(entityId, owner.Transform.Coordinates); spawned.RandomOffset(0.5f); } } } } } }