Rotate and Offset station CCVar nuke (#26175)
* no content * add noRot to Europa * bruh. and this * yay * fix
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
using Content.Server.Station.Systems;
|
||||||
|
|
||||||
|
namespace Content.Server.Station.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stores station parameters that can be randomized by the roundstart
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent, Access(typeof(StationSystem))]
|
||||||
|
public sealed partial class StationRandomTransformComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public float? MaxStationOffset = 100.0f;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public bool EnableStationRotation = true;
|
||||||
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Numerics;
|
||||||
using Content.Server.Chat.Systems;
|
using Content.Server.Chat.Systems;
|
||||||
using Content.Server.GameTicking;
|
using Content.Server.GameTicking;
|
||||||
using Content.Server.Station.Components;
|
using Content.Server.Station.Components;
|
||||||
using Content.Server.Station.Events;
|
using Content.Server.Station.Events;
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.Fax;
|
||||||
using Content.Shared.Station;
|
using Content.Shared.Station;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
@@ -49,17 +50,12 @@ public sealed class StationSystem : EntitySystem
|
|||||||
_sawmill = _logManager.GetSawmill("station");
|
_sawmill = _logManager.GetSawmill("station");
|
||||||
|
|
||||||
SubscribeLocalEvent<GameRunLevelChangedEvent>(OnRoundEnd);
|
SubscribeLocalEvent<GameRunLevelChangedEvent>(OnRoundEnd);
|
||||||
SubscribeLocalEvent<PreGameMapLoad>(OnPreGameMapLoad);
|
|
||||||
SubscribeLocalEvent<PostGameMapLoad>(OnPostGameMapLoad);
|
SubscribeLocalEvent<PostGameMapLoad>(OnPostGameMapLoad);
|
||||||
SubscribeLocalEvent<StationDataComponent, ComponentStartup>(OnStationAdd);
|
SubscribeLocalEvent<StationDataComponent, ComponentStartup>(OnStationAdd);
|
||||||
SubscribeLocalEvent<StationDataComponent, ComponentShutdown>(OnStationDeleted);
|
SubscribeLocalEvent<StationDataComponent, ComponentShutdown>(OnStationDeleted);
|
||||||
SubscribeLocalEvent<StationMemberComponent, ComponentShutdown>(OnStationGridDeleted);
|
SubscribeLocalEvent<StationMemberComponent, ComponentShutdown>(OnStationGridDeleted);
|
||||||
SubscribeLocalEvent<StationMemberComponent, PostGridSplitEvent>(OnStationSplitEvent);
|
SubscribeLocalEvent<StationMemberComponent, PostGridSplitEvent>(OnStationSplitEvent);
|
||||||
|
|
||||||
Subs.CVar(_configurationManager, CCVars.StationOffset, x => _randomStationOffset = x, true);
|
|
||||||
Subs.CVar(_configurationManager, CCVars.MaxStationOffset, x => _maxRandomStationOffset = x, true);
|
|
||||||
Subs.CVar(_configurationManager, CCVars.StationRotation, x => _randomStationRotation = x, true);
|
|
||||||
|
|
||||||
_player.PlayerStatusChanged += OnPlayerStatusChanged;
|
_player.PlayerStatusChanged += OnPlayerStatusChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,19 +108,6 @@ public sealed class StationSystem : EntitySystem
|
|||||||
RaiseNetworkEvent(new StationsUpdatedEvent(GetStationNames()), Filter.Broadcast());
|
RaiseNetworkEvent(new StationsUpdatedEvent(GetStationNames()), Filter.Broadcast());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnPreGameMapLoad(PreGameMapLoad ev)
|
|
||||||
{
|
|
||||||
// this is only for maps loaded during round setup!
|
|
||||||
if (_gameTicker.RunLevel == GameRunLevel.InRound)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_randomStationOffset)
|
|
||||||
ev.Options.Offset += _random.NextVector2(_maxRandomStationOffset);
|
|
||||||
|
|
||||||
if (_randomStationRotation)
|
|
||||||
ev.Options.Rotation = _random.NextAngle();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnPostGameMapLoad(PostGameMapLoad ev)
|
private void OnPostGameMapLoad(PostGameMapLoad ev)
|
||||||
{
|
{
|
||||||
var dict = new Dictionary<string, List<EntityUid>>();
|
var dict = new Dictionary<string, List<EntityUid>>();
|
||||||
@@ -311,6 +294,8 @@ public sealed class StationSystem : EntitySystem
|
|||||||
// Use overrides for setup.
|
// Use overrides for setup.
|
||||||
var station = EntityManager.SpawnEntity(stationConfig.StationPrototype, MapCoordinates.Nullspace, stationConfig.StationComponentOverrides);
|
var station = EntityManager.SpawnEntity(stationConfig.StationPrototype, MapCoordinates.Nullspace, stationConfig.StationComponentOverrides);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (name is not null)
|
if (name is not null)
|
||||||
RenameStation(station, name, false);
|
RenameStation(station, name, false);
|
||||||
|
|
||||||
@@ -319,11 +304,48 @@ public sealed class StationSystem : EntitySystem
|
|||||||
var data = Comp<StationDataComponent>(station);
|
var data = Comp<StationDataComponent>(station);
|
||||||
name ??= MetaData(station).EntityName;
|
name ??= MetaData(station).EntityName;
|
||||||
|
|
||||||
foreach (var grid in gridIds ?? Array.Empty<EntityUid>())
|
var entry = gridIds ?? Array.Empty<EntityUid>();
|
||||||
|
|
||||||
|
foreach (var grid in entry)
|
||||||
{
|
{
|
||||||
AddGridToStation(station, grid, null, data, name);
|
AddGridToStation(station, grid, null, data, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TryComp<StationRandomTransformComponent>(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var ev = new StationPostInitEvent((station, data));
|
var ev = new StationPostInitEvent((station, data));
|
||||||
RaiseLocalEvent(station, ref ev, true);
|
RaiseLocalEvent(station, ref ev, true);
|
||||||
|
|
||||||
|
|||||||
@@ -229,25 +229,6 @@ namespace Content.Shared.CCVar
|
|||||||
public static readonly CVarDef<bool>
|
public static readonly CVarDef<bool>
|
||||||
GameCryoSleepRejoining = CVarDef.Create("game.cryo_sleep_rejoining", false, CVar.SERVER | CVar.REPLICATED);
|
GameCryoSleepRejoining = CVarDef.Create("game.cryo_sleep_rejoining", false, CVar.SERVER | CVar.REPLICATED);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether a random position offset will be applied to the station on roundstart.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly CVarDef<bool> StationOffset =
|
|
||||||
CVarDef.Create("game.station_offset", true);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// When the default blueprint is loaded what is the maximum amount it can be offset from 0,0.
|
|
||||||
/// Does nothing without <see cref="StationOffset"/> as true.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly CVarDef<float> MaxStationOffset =
|
|
||||||
CVarDef.Create("game.maxstationoffset", 1000.0f);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether a random rotation will be applied to the station on roundstart.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly CVarDef<bool> StationRotation =
|
|
||||||
CVarDef.Create("game.station_rotation", true);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// When enabled, guests will be assigned permanent UIDs and will have their preferences stored.
|
/// When enabled, guests will be assigned permanent UIDs and will have their preferences stored.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
components:
|
components:
|
||||||
- type: StationData
|
- type: StationData
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseRandomStation
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: StationRandomTransform
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseStationCargo
|
id: BaseStationCargo
|
||||||
abstract: true
|
abstract: true
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
- BaseStationSiliconLawCrewsimov
|
- BaseStationSiliconLawCrewsimov
|
||||||
- BaseStationAllEventsEligible
|
- BaseStationAllEventsEligible
|
||||||
- BaseStationNanotrasen
|
- BaseStationNanotrasen
|
||||||
|
- BaseRandomStation
|
||||||
noSpawn: true
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Transform
|
- type: Transform
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
Europa:
|
Europa:
|
||||||
stationProto: StandardNanotrasenStation
|
stationProto: StandardNanotrasenStation
|
||||||
components:
|
components:
|
||||||
|
- type: StationRandomTransform
|
||||||
|
enableStationRotation: false
|
||||||
|
maxStationOffset: null
|
||||||
- type: StationNameSetup
|
- type: StationNameSetup
|
||||||
mapNameTemplate: '{0} Europa {1}'
|
mapNameTemplate: '{0} Europa {1}'
|
||||||
nameGenerator:
|
nameGenerator:
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
Train:
|
Train:
|
||||||
stationProto: StandardNanotrasenStation
|
stationProto: StandardNanotrasenStation
|
||||||
components:
|
components:
|
||||||
|
- type: StationRandomTransform
|
||||||
|
enableStationRotation: false
|
||||||
- type: StationNameSetup
|
- type: StationNameSetup
|
||||||
mapNameTemplate: 'Train "Sentipode" {0}-{1}'
|
mapNameTemplate: 'Train "Sentipode" {0}-{1}'
|
||||||
nameGenerator:
|
nameGenerator:
|
||||||
|
|||||||
Reference in New Issue
Block a user