diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 98fcc6441045..2f770f938e74 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -160,6 +160,12 @@ public IReadOnlyList LoadGameMap(GameMapPrototype map, MapId targetMa // whereas the command can also be used on an existing map. var loadOpts = loadOptions ?? new MapLoadOptions(); + if (map.MaxRandomOffset != 0f) + loadOpts.Offset = _robustRandom.NextVector2(map.MaxRandomOffset); + + if (map.RandomRotation) + loadOpts.Rotation = _robustRandom.NextAngle(); + var ev = new PreGameMapLoad(targetMapId, map, loadOpts); RaiseLocalEvent(ev); diff --git a/Content.Server/Maps/GameMapPrototype.cs b/Content.Server/Maps/GameMapPrototype.cs index bd15194495ec..5942a9930eb0 100644 --- a/Content.Server/Maps/GameMapPrototype.cs +++ b/Content.Server/Maps/GameMapPrototype.cs @@ -3,6 +3,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Utility; using System.Diagnostics; +using System.Numerics; namespace Content.Server.Maps; @@ -21,16 +22,22 @@ public sealed partial class GameMapPrototype : IPrototype [IdDataField] public string ID { get; private set; } = default!; + [DataField] + public float MaxRandomOffset = 1000f; + + [DataField] + public bool RandomRotation = true; + /// /// Name of the map to use in generic messages, like the map vote. /// - [DataField("mapName", required: true)] + [DataField(required: true)] public string MapName { get; private set; } = default!; /// /// Relative directory path to the given map, i.e. `/Maps/saltern.yml` /// - [DataField("mapPath", required: true)] + [DataField(required: true)] public ResPath MapPath { get; private set; } = default!; [DataField("stations", required: true)] diff --git a/Content.Server/Station/Components/StationRandomTransformComponent.cs b/Content.Server/Station/Components/StationRandomTransformComponent.cs deleted file mode 100644 index ea0fc5f2696b..000000000000 --- a/Content.Server/Station/Components/StationRandomTransformComponent.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Content.Server.Station.Systems; - -namespace Content.Server.Station.Components; - -/// -/// Stores station parameters that can be randomized by the roundstart -/// -[RegisterComponent, Access(typeof(StationSystem))] -public sealed partial class StationRandomTransformComponent : Component -{ - [DataField] - public float? MaxStationOffset = 100.0f; - - [DataField] - public bool EnableStationRotation = true; -} diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index 88e419ae39af..84e44b6469cd 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -1,10 +1,9 @@ using System.Linq; -using System.Numerics; using Content.Server.Chat.Systems; using Content.Server.GameTicking; using Content.Server.Station.Components; using Content.Server.Station.Events; -using Content.Shared.Fax; +using Content.Shared.CCVar; using Content.Shared.Station; using JetBrains.Annotations; using Robust.Server.GameObjects; @@ -28,10 +27,12 @@ namespace Content.Server.Station.Systems; [PublicAPI] public sealed class StationSystem : EntitySystem { + [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MapSystem _map = default!; @@ -282,51 +283,11 @@ public EntityUid InitializeNewStation(StationConfig stationConfig, IEnumerable(station); name ??= MetaData(station).EntityName; - var entry = gridIds ?? Array.Empty(); - - foreach (var grid in entry) + foreach (var grid in gridIds ?? Array.Empty()) { AddGridToStation(station, grid, null, data, name); } - if (TryComp(station, out var random)) - { - Angle? rotation = null; - Vector2? offset = null; - - if (random.MaxStationOffset != null) - offset = _random.NextVector2(-random.MaxStationOffset.Value, random.MaxStationOffset.Value); - - if (random.EnableStationRotation) - rotation = _random.NextAngle(); - - foreach (var grid in entry) - { - //planetary maps give an error when trying to change from position or rotation. - //This is still the case, but it will be irrelevant after the https://github.com/space-wizards/space-station-14/pull/26510 - if (rotation != null && offset != null) - { - var pos = _transform.GetWorldPosition(grid); - _transform.SetWorldPositionRotation(grid, pos + offset.Value, rotation.Value); - continue; - } - if (rotation != null) - { - _transform.SetWorldRotation(grid, rotation.Value); - continue; - } - if (offset != null) - { - var pos = _transform.GetWorldPosition(grid); - _transform.SetWorldPosition(grid, pos + offset.Value); - continue; - } - } - } - - if (LifeStage(station) < EntityLifeStage.MapInitialized) - throw new Exception($"Station must be man-initialized"); - var ev = new StationPostInitEvent((station, data)); RaiseLocalEvent(station, ref ev, true); diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index 6a1abdfbe3dc..8a0d6c400304 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -4,12 +4,6 @@ components: - type: StationData -- type: entity - id: BaseRandomStation - abstract: true - components: - - type: StationRandomTransform - - type: entity id: BaseStationCargo abstract: true diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index 7e650d536f22..ab885b03e537 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -25,7 +25,6 @@ - BaseStationSiliconLawCrewsimov - BaseStationAllEventsEligible - BaseStationNanotrasen - - BaseRandomStation noSpawn: true components: - type: Transform diff --git a/Resources/Prototypes/Maps/europa.yml b/Resources/Prototypes/Maps/europa.yml index 412e1b46569f..7197165ce1fe 100644 --- a/Resources/Prototypes/Maps/europa.yml +++ b/Resources/Prototypes/Maps/europa.yml @@ -2,6 +2,8 @@ id: Europa mapName: 'Europa' mapPath: /Maps/europa.yml + maxRandomOffset: 0 + randomRotation: false minPlayers: 0 maxPlayers: 40 stations: @@ -10,9 +12,6 @@ components: - type: StationBiome biome: Snow - - type: StationRandomTransform - enableStationRotation: false - maxStationOffset: null - type: StationNameSetup mapNameTemplate: '{0} Europa {1}' nameGenerator: diff --git a/Resources/Prototypes/Maps/train.yml b/Resources/Prototypes/Maps/train.yml index 7f24fcdd6771..a93c4558885c 100644 --- a/Resources/Prototypes/Maps/train.yml +++ b/Resources/Prototypes/Maps/train.yml @@ -2,14 +2,14 @@ id: Train mapName: 'Train' mapPath: /Maps/train.yml + maxRandomOffset: 0 + randomRotation: false minPlayers: 10 maxPlayers: 50 stations: Train: stationProto: StandardNanotrasenStation components: - - type: StationRandomTransform - enableStationRotation: false - type: StationNameSetup mapNameTemplate: 'Train "Sentipode" {0}-{1}' nameGenerator: