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