From 56d7fe4f62fb827c79db3f7d6214d0513d35a92b Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 24 Mar 2023 13:19:29 +1100 Subject: [PATCH] Add space dungeon support (#14619) --- Content.Server/Procedural/DungeonJob.cs | 4 ++++ .../Procedural/DungeonSystem.Commands.cs | 18 ++++++++++-------- Resources/Locale/en-US/procedural/command.ftl | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Content.Server/Procedural/DungeonJob.cs b/Content.Server/Procedural/DungeonJob.cs index 001f0aee25..e294757036 100644 --- a/Content.Server/Procedural/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob.cs @@ -6,6 +6,7 @@ using Content.Server.Decals; using Content.Shared.Procedural; using Content.Shared.Procedural.DungeonGenerators; using Content.Shared.Procedural.PostGeneration; +using Robust.Server.Physics; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; @@ -76,6 +77,7 @@ public sealed partial class DungeonJob : Job { Dungeon dungeon; _sawmill.Info($"Generating dungeon {_gen.ID} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}"); + _grid.CanSplit = false; switch (_gen.Generator) { @@ -126,6 +128,8 @@ public sealed partial class DungeonJob : Job ValidateResume(); } + _grid.CanSplit = true; + _entManager.System().CheckSplits(_gridUid); return dungeon; } diff --git a/Content.Server/Procedural/DungeonSystem.Commands.cs b/Content.Server/Procedural/DungeonSystem.Commands.cs index 59fc864336..aa8a92fa57 100644 --- a/Content.Server/Procedural/DungeonSystem.Commands.cs +++ b/Content.Server/Procedural/DungeonSystem.Commands.cs @@ -30,13 +30,6 @@ public sealed partial class DungeonSystem } var mapId = new MapId(mapInt); - var mapUid = _mapManager.GetMapEntityId(mapId); - - if (!TryComp(mapUid, out var mapGrid)) - { - shell.WriteError(Loc.GetString("cmd-dungen-mapgrid")); - return; - } if (!_prototype.TryIndex(args[1], out var dungeon)) { @@ -51,6 +44,15 @@ public sealed partial class DungeonSystem } var position = new Vector2(posX, posY); + var dungeonUid = _mapManager.GetMapEntityId(mapId); + + if (!TryComp(dungeonUid, out var dungeonGrid)) + { + dungeonUid = EntityManager.CreateEntityUninitialized(null, new EntityCoordinates(dungeonUid, position)); + dungeonGrid = EntityManager.AddComponent(dungeonUid); + EntityManager.InitializeAndStartEntity(dungeonUid, mapId); + } + int seed; if (args.Length >= 5) @@ -67,7 +69,7 @@ public sealed partial class DungeonSystem } shell.WriteLine(Loc.GetString("cmd-dungen-start", ("seed", seed))); - GenerateDungeon(dungeon, mapUid, mapGrid, position, seed); + GenerateDungeon(dungeon, dungeonUid, dungeonGrid, position, seed); } private CompletionResult CompletionCallback(IConsoleShell shell, string[] args) diff --git a/Resources/Locale/en-US/procedural/command.ftl b/Resources/Locale/en-US/procedural/command.ftl index 27ad1a180c..77b6476c9c 100644 --- a/Resources/Locale/en-US/procedural/command.ftl +++ b/Resources/Locale/en-US/procedural/command.ftl @@ -1,4 +1,4 @@ -cmd-dungen-desc = Generates a procedural dungeon with the specified preset, position, and seed. +cmd-dungen-desc = Generates a procedural dungeon with the specified preset, position, and seed. Will spawn in space if the MapId doesn't have MapGridComponent. cmd-dungen-help = dungen [seed] cmd-dungen-arg-count = Require 4 args. cmd-dungen-map-parse = Unable to parse MapId.