Add CVar for random grid offset, disable it by default.

This commit is contained in:
Vera Aguilera Puerto
2021-08-04 09:25:30 +02:00
parent 28a7d5041a
commit b7d049a52c
5 changed files with 28 additions and 12 deletions

View File

@@ -21,14 +21,22 @@ namespace Content.Server.GameTicking
[ViewVariables] [ViewVariables]
public bool DisallowLateJoin { get; private set; } = false; public bool DisallowLateJoin { get; private set; } = false;
[ViewVariables]
public bool StationOffset { get; private set; } = false;
[ViewVariables]
public float MaxStationOffset { get; private set; } = 0f;
private void InitializeCVars() private void InitializeCVars()
{ {
_configurationManager.OnValueChanged(CCVars.GameLobbyEnabled, value => LobbyEnabled = value, true); _configurationManager.OnValueChanged(CCVars.GameLobbyEnabled, value => LobbyEnabled = value, true);
_configurationManager.OnValueChanged(CCVars.GameDummyTicker, value => DummyTicker = value, true); _configurationManager.OnValueChanged(CCVars.GameDummyTicker, value => DummyTicker = value, true);
_configurationManager.OnValueChanged(CCVars.GameMap, value => ChosenMap = value, true); _configurationManager.OnValueChanged(CCVars.GameMap, value => ChosenMap = value, true);
_configurationManager.OnValueChanged(CCVars.GameLobbyDuration, value => LobbyDuration = TimeSpan.FromSeconds(value), true); _configurationManager.OnValueChanged(CCVars.GameLobbyDuration, value => LobbyDuration = TimeSpan.FromSeconds(value), true);
_configurationManager.OnValueChanged(CCVars.GameDisallowLateJoins, invokeImmediately:true, _configurationManager.OnValueChanged(CCVars.GameDisallowLateJoins,
onValueChanged:value => { DisallowLateJoin = value; UpdateLateJoinStatus(); UpdateJobsAvailable(); }); value => { DisallowLateJoin = value; UpdateLateJoinStatus(); UpdateJobsAvailable(); }, true);
_configurationManager.OnValueChanged(CCVars.StationOffset, value => StationOffset = value, true);
_configurationManager.OnValueChanged(CCVars.MaxStationOffset, value => MaxStationOffset = value, true);
} }
} }
} }

View File

@@ -63,10 +63,13 @@ namespace Content.Server.GameTicking
throw new InvalidOperationException($"No grid found for map {map}"); throw new InvalidOperationException($"No grid found for map {map}");
} }
var maxStationOffset = _configurationManager.GetCVar(CCVars.MaxStationOffset); if (StationOffset)
var x = _robustRandom.NextFloat() * maxStationOffset * 2 - maxStationOffset; {
var y = _robustRandom.NextFloat() * maxStationOffset * 2 - maxStationOffset; // Apply a random offset to the station grid entity.
_entityManager.GetEntity(grid.GridEntityId).Transform.LocalPosition = new Vector2(x, y); var x = _robustRandom.NextFloat() * MaxStationOffset * 2 - MaxStationOffset;
var y = _robustRandom.NextFloat() * MaxStationOffset * 2 - MaxStationOffset;
EntityManager.GetEntity(grid.GridEntityId).Transform.LocalPosition = new Vector2(x, y);
}
DefaultGridId = grid.Index; DefaultGridId = grid.Index;
_spawnPoint = grid.ToCoordinates(); _spawnPoint = grid.ToCoordinates();
@@ -286,7 +289,7 @@ namespace Content.Server.GameTicking
} }
// Delete all entities. // Delete all entities.
foreach (var entity in _entityManager.GetEntities().ToList()) foreach (var entity in EntityManager.GetEntities().ToList())
{ {
// TODO: Maybe something less naive here? // TODO: Maybe something less naive here?
// FIXME: Actually, definitely. // FIXME: Actually, definitely.

View File

@@ -155,7 +155,7 @@ namespace Content.Server.GameTicking
private IEntity SpawnPlayerMob(Job job, HumanoidCharacterProfile? profile, bool lateJoin = true) private IEntity SpawnPlayerMob(Job job, HumanoidCharacterProfile? profile, bool lateJoin = true)
{ {
var coordinates = lateJoin ? GetLateJoinSpawnPoint() : GetJobSpawnPoint(job.Prototype.ID); var coordinates = lateJoin ? GetLateJoinSpawnPoint() : GetJobSpawnPoint(job.Prototype.ID);
var entity = _entityManager.SpawnEntity(PlayerPrototypeName, coordinates); var entity = EntityManager.SpawnEntity(PlayerPrototypeName, coordinates);
if (job.StartingGear != null) if (job.StartingGear != null)
{ {
@@ -175,7 +175,7 @@ namespace Content.Server.GameTicking
private IEntity SpawnObserverMob() private IEntity SpawnObserverMob()
{ {
var coordinates = GetObserverSpawnPoint(); var coordinates = GetObserverSpawnPoint();
return _entityManager.SpawnEntity(ObserverPrototypeName, coordinates); return EntityManager.SpawnEntity(ObserverPrototypeName, coordinates);
} }
#endregion #endregion
@@ -189,7 +189,7 @@ namespace Content.Server.GameTicking
var equipmentStr = startingGear.GetGear(slot, profile); var equipmentStr = startingGear.GetGear(slot, profile);
if (equipmentStr != string.Empty) if (equipmentStr != string.Empty)
{ {
var equipmentEntity = _entityManager.SpawnEntity(equipmentStr, entity.Transform.Coordinates); var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, entity.Transform.Coordinates);
inventory.Equip(slot, equipmentEntity.GetComponent<ItemComponent>()); inventory.Equip(slot, equipmentEntity.GetComponent<ItemComponent>());
} }
} }
@@ -200,7 +200,7 @@ namespace Content.Server.GameTicking
var inhand = startingGear.Inhand; var inhand = startingGear.Inhand;
foreach (var (hand, prototype) in inhand) foreach (var (hand, prototype) in inhand)
{ {
var inhandEntity = _entityManager.SpawnEntity(prototype, entity.Transform.Coordinates); var inhandEntity = EntityManager.SpawnEntity(prototype, entity.Transform.Coordinates);
handsComponent.TryPickupEntity(hand, inhandEntity, checkActionBlocker: false); handsComponent.TryPickupEntity(hand, inhandEntity, checkActionBlocker: false);
} }
} }

View File

@@ -72,7 +72,6 @@ namespace Content.Server.GameTicking
UpdateRoundFlow(frameTime); UpdateRoundFlow(frameTime);
} }
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IMapLoader _mapLoader = default!; [Dependency] private readonly IMapLoader _mapLoader = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;

View File

@@ -55,6 +55,12 @@ namespace Content.Shared.CCVar
public static readonly CVarDef<string> public static readonly CVarDef<string>
GameMap = CVarDef.Create("game.map", "Maps/saltern.yml", CVar.SERVERONLY); GameMap = CVarDef.Create("game.map", "Maps/saltern.yml", CVar.SERVERONLY);
/// <summary>
/// Whether a random position offset will be applied to the station on roundstart.
/// </summary>
public static readonly CVarDef<bool> StationOffset =
CVarDef.Create<bool>("game.station_offset", false);
/// <summary> /// <summary>
/// When the default blueprint is loaded what is the maximum amount it can be offset from 0,0. /// When the default blueprint is loaded what is the maximum amount it can be offset from 0,0.
/// </summary> /// </summary>