From b0b76a113319f73297f3736f3e4d958d2a073abf Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Tue, 18 Jun 2024 23:27:34 +1000 Subject: [PATCH] Replace StationRandomTransform (#29149) * Revert "Rotate and Offset station CCVar nuke (#26175)" This reverts commit 44b20f60ff178813ebbc5b449229b0bbba81f649. # Conflicts: # Content.Server/Station/Systems/StationSystem.cs # Resources/Prototypes/Maps/europa.yml * Fix * Review --- .../GameTicking/GameTicker.RoundFlow.cs | 6 +++ Content.Server/Maps/GameMapPrototype.cs | 11 ++++- .../StationRandomTransformComponent.cs | 16 ------- .../Station/Systems/StationSystem.cs | 47 ++----------------- .../Prototypes/Entities/Stations/base.yml | 6 --- .../Entities/Stations/nanotrasen.yml | 1 - Resources/Prototypes/Maps/europa.yml | 5 +- Resources/Prototypes/Maps/train.yml | 4 +- 8 files changed, 23 insertions(+), 73 deletions(-) delete mode 100644 Content.Server/Station/Components/StationRandomTransformComponent.cs diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index eed120dc4e..d67b8d96e3 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -160,6 +160,12 @@ namespace Content.Server.GameTicking // 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 bd15194495..5942a9930e 100644 --- a/Content.Server/Maps/GameMapPrototype.cs +++ b/Content.Server/Maps/GameMapPrototype.cs @@ -3,6 +3,7 @@ using JetBrains.Annotations; 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 ea0fc5f269..0000000000 --- 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 88e419ae39..84e44b6469 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 sealed class StationSystem : EntitySystem var data = Comp(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 6a1abdfbe3..8a0d6c4003 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 7e650d536f..ab885b03e5 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 412e1b4656..7197165ce1 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 7f24fcdd67..a93c455888 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: -- 2.51.2