using Robust.Shared.Map.Components; namespace Content.Server.Procedural; public sealed class RoomFillSystem : EntitySystem { [Dependency] private readonly DungeonSystem _dungeon = default!; [Dependency] private readonly SharedMapSystem _maps = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnRoomFillMapInit); } private void OnRoomFillMapInit(EntityUid uid, RoomFillComponent component, MapInitEvent args) { var xform = Transform(uid); if (xform.GridUid != null) { var random = new Random(); var room = _dungeon.GetRoomPrototype(random, component.RoomWhitelist, component.MinSize, component.MaxSize); if (room != null) { var mapGrid = Comp(xform.GridUid.Value); _dungeon.SpawnRoom( xform.GridUid.Value, mapGrid, _maps.LocalToTile(xform.GridUid.Value, mapGrid, xform.Coordinates) - new Vector2i(room.Size.X/2,room.Size.Y/2), room, random, null, clearExisting: component.ClearExisting, rotation: component.Rotation); } else { Log.Error($"Unable to find matching room prototype for {ToPrettyString(uid)}"); } } // Final cleanup QueueDel(uid); } }