Removes obsolete uses of IMapManager events. (#7036)

This commit is contained in:
ScalyChimp
2022-03-09 07:39:03 +01:00
committed by GitHub
parent df858100af
commit d691161542
7 changed files with 45 additions and 68 deletions

View File

@@ -14,7 +14,6 @@ namespace Content.Client.Atmos.EntitySystems
[UsedImplicitly] [UsedImplicitly]
internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem
{ {
[Dependency] private readonly IMapManager _mapManager = default!;
private readonly Dictionary<GridId, AtmosDebugOverlayMessage> _tileData = private readonly Dictionary<GridId, AtmosDebugOverlayMessage> _tileData =
new(); new();
@@ -40,13 +39,21 @@ namespace Content.Client.Atmos.EntitySystems
SubscribeNetworkEvent<AtmosDebugOverlayMessage>(HandleAtmosDebugOverlayMessage); SubscribeNetworkEvent<AtmosDebugOverlayMessage>(HandleAtmosDebugOverlayMessage);
SubscribeNetworkEvent<AtmosDebugOverlayDisableMessage>(HandleAtmosDebugOverlayDisableMessage); SubscribeNetworkEvent<AtmosDebugOverlayDisableMessage>(HandleAtmosDebugOverlayDisableMessage);
_mapManager.OnGridRemoved += OnGridRemoved; SubscribeLocalEvent<GridRemovalEvent>(OnGridRemoved);
var overlayManager = IoCManager.Resolve<IOverlayManager>(); var overlayManager = IoCManager.Resolve<IOverlayManager>();
if(!overlayManager.HasOverlay<AtmosDebugOverlay>()) if(!overlayManager.HasOverlay<AtmosDebugOverlay>())
overlayManager.AddOverlay(new AtmosDebugOverlay()); overlayManager.AddOverlay(new AtmosDebugOverlay());
} }
private void OnGridRemoved(GridRemovalEvent ev)
{
if (_tileData.ContainsKey(ev.GridId))
{
_tileData.Remove(ev.GridId);
}
}
private void HandleAtmosDebugOverlayMessage(AtmosDebugOverlayMessage message) private void HandleAtmosDebugOverlayMessage(AtmosDebugOverlayMessage message)
{ {
_tileData[message.GridId] = message; _tileData[message.GridId] = message;
@@ -60,7 +67,6 @@ namespace Content.Client.Atmos.EntitySystems
public override void Shutdown() public override void Shutdown()
{ {
base.Shutdown(); base.Shutdown();
_mapManager.OnGridRemoved -= OnGridRemoved;
var overlayManager = IoCManager.Resolve<IOverlayManager>(); var overlayManager = IoCManager.Resolve<IOverlayManager>();
if (overlayManager.HasOverlay<AtmosDebugOverlay>()) if (overlayManager.HasOverlay<AtmosDebugOverlay>())
overlayManager.RemoveOverlay<AtmosDebugOverlay>(); overlayManager.RemoveOverlay<AtmosDebugOverlay>();
@@ -71,14 +77,6 @@ namespace Content.Client.Atmos.EntitySystems
_tileData.Clear(); _tileData.Clear();
} }
private void OnGridRemoved(MapId mapId, GridId gridId)
{
if (_tileData.ContainsKey(gridId))
{
_tileData.Remove(gridId);
}
}
public bool HasData(GridId gridId) public bool HasData(GridId gridId)
{ {
return _tileData.ContainsKey(gridId); return _tileData.ContainsKey(gridId);
@@ -93,7 +91,7 @@ namespace Content.Client.Atmos.EntitySystems
if (relative.X < 0 || relative.Y < 0 || relative.X >= LocalViewRange || relative.Y >= LocalViewRange) if (relative.X < 0 || relative.Y < 0 || relative.X >= LocalViewRange || relative.Y >= LocalViewRange)
return null; return null;
return srcMsg.OverlayData[relative.X + (relative.Y * LocalViewRange)]; return srcMsg.OverlayData[relative.X + relative.Y * LocalViewRange];
} }
} }

View File

@@ -13,7 +13,6 @@ namespace Content.Client.Atmos.EntitySystems
[UsedImplicitly] [UsedImplicitly]
internal sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem internal sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem
{ {
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!; [Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
@@ -41,7 +40,7 @@ namespace Content.Client.Atmos.EntitySystems
{ {
base.Initialize(); base.Initialize();
SubscribeNetworkEvent<GasOverlayMessage>(HandleGasOverlayMessage); SubscribeNetworkEvent<GasOverlayMessage>(HandleGasOverlayMessage);
_mapManager.OnGridRemoved += OnGridRemoved; SubscribeLocalEvent<GridRemovalEvent>(OnGridRemoved);
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
{ {
@@ -118,17 +117,16 @@ namespace Content.Client.Atmos.EntitySystems
public override void Shutdown() public override void Shutdown()
{ {
base.Shutdown(); base.Shutdown();
_mapManager.OnGridRemoved -= OnGridRemoved;
var overlayManager = IoCManager.Resolve<IOverlayManager>(); var overlayManager = IoCManager.Resolve<IOverlayManager>();
overlayManager.RemoveOverlay<GasTileOverlay>(); overlayManager.RemoveOverlay<GasTileOverlay>();
overlayManager.RemoveOverlay<FireTileOverlay>(); overlayManager.RemoveOverlay<FireTileOverlay>();
} }
private void OnGridRemoved(MapId mapId, GridId gridId) private void OnGridRemoved(GridRemovalEvent ev)
{ {
if (_tileData.ContainsKey(gridId)) if (_tileData.ContainsKey(ev.GridId))
{ {
_tileData.Remove(gridId); _tileData.Remove(ev.GridId);
} }
} }

View File

@@ -83,11 +83,11 @@ namespace Content.Server.AI.Pathfinding.Accessible
{ {
SubscribeLocalEvent<RoundRestartCleanupEvent>(Reset); SubscribeLocalEvent<RoundRestartCleanupEvent>(Reset);
SubscribeLocalEvent<PathfindingChunkUpdateMessage>(RecalculateNodeRegions); SubscribeLocalEvent<PathfindingChunkUpdateMessage>(RecalculateNodeRegions);
SubscribeLocalEvent<GridRemovalEvent>(GridRemoved);
#if DEBUG #if DEBUG
SubscribeNetworkEvent<SharedAiDebug.SubscribeReachableMessage>(HandleSubscription); SubscribeNetworkEvent<SharedAiDebug.SubscribeReachableMessage>(HandleSubscription);
SubscribeNetworkEvent<SharedAiDebug.UnsubscribeReachableMessage>(HandleUnsubscription); SubscribeNetworkEvent<SharedAiDebug.UnsubscribeReachableMessage>(HandleUnsubscription);
#endif #endif
_mapManager.OnGridRemoved += GridRemoved;
} }
public override void Shutdown() public override void Shutdown()
@@ -99,12 +99,11 @@ namespace Content.Server.AI.Pathfinding.Accessible
_cachedAccessible.Clear(); _cachedAccessible.Clear();
_queuedCacheDeletions.Clear(); _queuedCacheDeletions.Clear();
_mapManager.OnGridRemoved -= GridRemoved;
} }
private void GridRemoved(MapId mapId, GridId gridId) private void GridRemoved(GridRemovalEvent ev)
{ {
_regions.Remove(gridId); _regions.Remove(ev.GridId);
} }
public override void Update(float frameTime) public override void Update(float frameTime)

View File

@@ -206,21 +206,13 @@ namespace Content.Server.AI.Pathfinding
SubscribeLocalEvent<CollisionChangeMessage>(QueueCollisionChangeMessage); SubscribeLocalEvent<CollisionChangeMessage>(QueueCollisionChangeMessage);
SubscribeLocalEvent<MoveEvent>(QueueMoveEvent); SubscribeLocalEvent<MoveEvent>(QueueMoveEvent);
SubscribeLocalEvent<AccessReaderChangeMessage>(QueueAccessChangeMessage); SubscribeLocalEvent<AccessReaderChangeMessage>(QueueAccessChangeMessage);
SubscribeLocalEvent<GridRemovalEvent>(HandleGridRemoval);
SubscribeLocalEvent<GridModifiedEvent>(QueueGridChange);
SubscribeLocalEvent<TileChangedEvent>(QueueTileChange);
// Handle all the base grid changes // Handle all the base grid changes
// Anything that affects traversal (i.e. collision layer) is handled separately. // Anything that affects traversal (i.e. collision layer) is handled separately.
_mapManager.OnGridRemoved += HandleGridRemoval;
_mapManager.GridChanged += QueueGridChange;
_mapManager.TileChanged += QueueTileChange;
}
public override void Shutdown()
{
base.Shutdown();
_mapManager.OnGridRemoved -= HandleGridRemoval;
_mapManager.GridChanged -= QueueGridChange;
_mapManager.TileChanged -= QueueTileChange;
} }
private void HandleTileUpdate(TileRef tile) private void HandleTileUpdate(TileRef tile)
@@ -231,25 +223,25 @@ namespace Content.Server.AI.Pathfinding
node.UpdateTile(tile); node.UpdateTile(tile);
} }
private void HandleGridRemoval(MapId mapId, GridId gridId) private void HandleGridRemoval(GridRemovalEvent ev)
{ {
if (_graph.ContainsKey(gridId)) if (_graph.ContainsKey(ev.GridId))
{ {
_graph.Remove(gridId); _graph.Remove(ev.GridId);
} }
} }
private void QueueGridChange(object? sender, GridChangedEventArgs eventArgs) private void QueueGridChange(GridModifiedEvent ev)
{ {
foreach (var (position, _) in eventArgs.Modified) foreach (var (position, _) in ev.Modified)
{ {
_tileUpdateQueue.Enqueue(eventArgs.Grid.GetTileRef(position)); _tileUpdateQueue.Enqueue(ev.Grid.GetTileRef(position));
} }
} }
private void QueueTileChange(object? sender, TileChangedEventArgs eventArgs) private void QueueTileChange(TileChangedEvent ev)
{ {
_tileUpdateQueue.Enqueue(eventArgs.NewTile); _tileUpdateQueue.Enqueue(ev.NewTile);
} }
private void QueueAccessChangeMessage(AccessReaderChangeMessage message) private void QueueAccessChangeMessage(AccessReaderChangeMessage message)

View File

@@ -20,6 +20,7 @@ namespace Content.Server.Atmos.EntitySystems
[Dependency] private readonly SharedContainerSystem _containers = default!; [Dependency] private readonly SharedContainerSystem _containers = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!;
private const float ExposedUpdateDelay = 1f; private const float ExposedUpdateDelay = 1f;
private float _exposedTimer = 0f; private float _exposedTimer = 0f;
@@ -34,35 +35,30 @@ namespace Content.Server.Atmos.EntitySystems
InitializeCVars(); InitializeCVars();
InitializeGrid(); InitializeGrid();
#region Events
// Map events. SubscribeLocalEvent<TileChangedEvent>(OnTileChanged);
_mapManager.TileChanged += OnTileChanged;
#endregion
} }
public override void Shutdown() public override void Shutdown()
{ {
base.Shutdown(); base.Shutdown();
_mapManager.TileChanged -= OnTileChanged;
ShutdownCommands(); ShutdownCommands();
} }
private void OnTileChanged(object? sender, TileChangedEventArgs eventArgs) private void OnTileChanged(TileChangedEvent ev)
{ {
// When a tile changes, we want to update it only if it's gone from // When a tile changes, we want to update it only if it's gone from
// space -> not space or vice versa. So if the old tile is the // space -> not space or vice versa. So if the old tile is the
// same as the new tile in terms of space-ness, ignore the change // same as the new tile in terms of space-ness, ignore the change
if (eventArgs.NewTile.IsSpace() == eventArgs.OldTile.IsSpace()) if (ev.NewTile.IsSpace(_tileDefinitionManager) == ev.OldTile.IsSpace(_tileDefinitionManager))
{ {
return; return;
} }
InvalidateTile(eventArgs.NewTile.GridIndex, eventArgs.NewTile.GridIndices); InvalidateTile(ev.NewTile.GridIndex, ev.NewTile.GridIndices);
} }
public override void Update(float frameTime) public override void Update(float frameTime)

View File

@@ -1,4 +1,4 @@
using Content.Server.Atmos.Components; using Content.Server.Atmos.Components;
using Content.Server.Shuttles.EntitySystems; using Content.Server.Shuttles.EntitySystems;
using Content.Shared.Maps; using Content.Shared.Maps;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -17,26 +17,21 @@ public sealed class AutomaticAtmosSystem : EntitySystem
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
_mapManager.TileChanged += MapManagerOnTileChanged; SubscribeLocalEvent<TileChangedEvent>(OnTileChanged);
} }
public override void Shutdown()
{
base.Shutdown();
_mapManager.TileChanged -= MapManagerOnTileChanged;
}
private void MapManagerOnTileChanged(object? sender, TileChangedEventArgs e) private void OnTileChanged(TileChangedEvent ev)
{ {
// Only if a atmos-holding tile has been added or removed. // Only if a atmos-holding tile has been added or removed.
// Also, these calls are surprisingly slow. // Also, these calls are surprisingly slow.
// TODO: Make tiledefmanager cache the IsSpace property, and turn this lookup-through-two-interfaces into // TODO: Make tiledefmanager cache the IsSpace property, and turn this lookup-through-two-interfaces into
// TODO: a simple array lookup, as tile IDs are likely contiguous, and there's at most 2^16 possibilities anyway. // TODO: a simple array lookup, as tile IDs are likely contiguous, and there's at most 2^16 possibilities anyway.
if (!((e.OldTile.IsSpace(_tileDefinitionManager) && !e.NewTile.IsSpace(_tileDefinitionManager)) || if (!((ev.OldTile.IsSpace(_tileDefinitionManager) && !ev.NewTile.IsSpace(_tileDefinitionManager)) ||
(!e.OldTile.IsSpace(_tileDefinitionManager) && e.NewTile.IsSpace(_tileDefinitionManager)))) (!ev.OldTile.IsSpace(_tileDefinitionManager) && ev.NewTile.IsSpace(_tileDefinitionManager))))
return; return;
var uid = _mapManager.GetGridEuid(e.NewTile.GridIndex); var uid = _mapManager.GetGridEuid(ev.NewTile.GridIndex);
if (!TryComp<PhysicsComponent>(uid, out var physics)) if (!TryComp<PhysicsComponent>(uid, out var physics))
return; return;

View File

@@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
@@ -65,9 +65,9 @@ namespace Content.Server.Atmos.EntitySystems
base.Initialize(); base.Initialize();
SubscribeLocalEvent<RoundRestartCleanupEvent>(Reset); SubscribeLocalEvent<RoundRestartCleanupEvent>(Reset);
SubscribeLocalEvent<GridRemovalEvent>(OnGridRemoved);
_playerManager.PlayerStatusChanged += OnPlayerStatusChanged; _playerManager.PlayerStatusChanged += OnPlayerStatusChanged;
_mapManager.OnGridRemoved += OnGridRemoved;
var configManager = IoCManager.Resolve<IConfigurationManager>(); var configManager = IoCManager.Resolve<IConfigurationManager>();
configManager.OnValueChanged(CCVars.NetGasOverlayTickRate, value => _updateCooldown = value > 0.0f ? 1 / value : float.MaxValue, true); configManager.OnValueChanged(CCVars.NetGasOverlayTickRate, value => _updateCooldown = value > 0.0f ? 1 / value : float.MaxValue, true);
configManager.OnValueChanged(CVars.NetMaxUpdateRange, value => _updateRange = value + RangeOffset, true); configManager.OnValueChanged(CVars.NetMaxUpdateRange, value => _updateRange = value + RangeOffset, true);
@@ -78,7 +78,6 @@ namespace Content.Server.Atmos.EntitySystems
{ {
base.Shutdown(); base.Shutdown();
_playerManager.PlayerStatusChanged -= OnPlayerStatusChanged; _playerManager.PlayerStatusChanged -= OnPlayerStatusChanged;
_mapManager.OnGridRemoved -= OnGridRemoved;
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -112,11 +111,11 @@ namespace Content.Server.Atmos.EntitySystems
return chunk; return chunk;
} }
private void OnGridRemoved(MapId mapId, GridId gridId) private void OnGridRemoved(GridRemovalEvent ev)
{ {
if (_overlay.ContainsKey(gridId)) if (_overlay.ContainsKey(ev.GridId))
{ {
_overlay.Remove(gridId); _overlay.Remove(ev.GridId);
} }
} }