@@ -233,65 +233,66 @@ public void GetUnblockedDirections(Dictionary<Vector2i, BlockedSpaceTile> transf
233233 /// </summary>
234234 private void OnTileChanged ( ref TileChangedEvent ev )
235235 {
236- // only need to update the grid-edge map if a tile was added or removed from the grid.
237- if ( ! ev . NewTile . Tile . IsEmpty && ! ev . OldTile . IsEmpty )
238- return ;
239-
240- if ( ! TryComp ( ev . Entity , out MapGridComponent ? grid ) )
241- return ;
242-
243- var tileRef = ev . NewTile ;
244-
245- if ( ! _gridEdges . TryGetValue ( tileRef . GridUid , out var edges ) )
236+ foreach ( var change in ev . Changes )
246237 {
247- edges = new ( ) ;
248- _gridEdges [ tileRef . GridUid ] = edges ;
249- }
238+ // only need to update the grid-edge map if a tile was added or removed from the grid.
239+ if ( ! change . NewTile . IsEmpty && ! change . OldTile . IsEmpty )
240+ return ;
250241
251- if ( tileRef . Tile . IsEmpty )
252- {
253- // if the tile is empty, it cannot itself be an edge tile.
254- edges . Remove ( tileRef . GridIndices ) ;
242+ if ( ! TryComp ( ev . Entity , out MapGridComponent ? grid ) )
243+ return ;
255244
256- // add any valid neighbours to the list of edge-tiles
257- for ( var i = 0 ; i < NeighbourVectors . Length ; i ++ )
245+ if ( ! _gridEdges . TryGetValue ( ev . Entity , out var edges ) )
246+ {
247+ edges = new ( ) ;
248+ _gridEdges [ ev . Entity ] = edges ;
249+ }
250+
251+ if ( change . NewTile . IsEmpty )
258252 {
259- var neighbourIndex = tileRef . GridIndices + NeighbourVectors [ i ] ;
253+ // if the tile is empty, it cannot itself be an edge tile.
254+ edges . Remove ( change . GridIndices ) ;
260255
261- if ( _mapSystem . TryGetTileRef ( ev . Entity , grid , neighbourIndex , out var neighbourTile ) && ! neighbourTile . Tile . IsEmpty )
256+ // add any valid neighbours to the list of edge-tiles
257+ for ( var i = 0 ; i < NeighbourVectors . Length ; i ++ )
262258 {
263- var oppositeDirection = ( NeighborFlag ) ( 1 << ( ( i + 4 ) % 8 ) ) ;
264- edges [ neighbourIndex ] = edges . GetValueOrDefault ( neighbourIndex ) | oppositeDirection ;
265- }
266- }
259+ var neighbourIndex = change . GridIndices + NeighbourVectors [ i ] ;
267260
268- return ;
269- }
261+ if ( _mapSystem . TryGetTileRef ( ev . Entity , grid , neighbourIndex , out var neighbourTile ) && ! neighbourTile . Tile . IsEmpty )
262+ {
263+ var oppositeDirection = ( NeighborFlag ) ( 1 << ( ( i + 4 ) % 8 ) ) ;
264+ edges [ neighbourIndex ] = edges . GetValueOrDefault ( neighbourIndex ) | oppositeDirection ;
265+ }
266+ }
270267
271- // the tile is not empty space, but was previously. So update directly adjacent neighbours, which may no longer
272- // be edge tiles.
273- for ( var i = 0 ; i < NeighbourVectors . Length ; i ++ )
274- {
275- var neighbourIndex = tileRef . GridIndices + NeighbourVectors [ i ] ;
268+ return ;
269+ }
276270
277- if ( edges . TryGetValue ( neighbourIndex , out var neighborSpaceDir ) )
271+ // the tile is not empty space, but was previously. So update directly adjacent neighbours, which may no longer
272+ // be edge tiles.
273+ for ( var i = 0 ; i < NeighbourVectors . Length ; i ++ )
278274 {
279- var oppositeDirection = ( NeighborFlag ) ( 1 << ( ( i + 4 ) % 8 ) ) ;
280- neighborSpaceDir &= ~ oppositeDirection ;
281- if ( neighborSpaceDir == NeighborFlag . Invalid )
275+ var neighbourIndex = change . GridIndices + NeighbourVectors [ i ] ;
276+
277+ if ( edges . TryGetValue ( neighbourIndex , out var neighborSpaceDir ) )
282278 {
283- // no longer an edge tile
284- edges . Remove ( neighbourIndex ) ;
285- continue ;
286- }
279+ var oppositeDirection = ( NeighborFlag ) ( 1 << ( ( i + 4 ) % 8 ) ) ;
280+ neighborSpaceDir &= ~ oppositeDirection ;
281+ if ( neighborSpaceDir == NeighborFlag . Invalid )
282+ {
283+ // no longer an edge tile
284+ edges . Remove ( neighbourIndex ) ;
285+ continue ;
286+ }
287287
288- edges [ neighbourIndex ] = neighborSpaceDir ;
288+ edges [ neighbourIndex ] = neighborSpaceDir ;
289+ }
289290 }
290- }
291291
292- // finally check if the new tile is itself an edge tile
293- if ( IsEdge ( grid , tileRef . GridIndices , out var spaceDir ) )
294- edges . Add ( tileRef . GridIndices , spaceDir ) ;
292+ // finally check if the new tile is itself an edge tile
293+ if ( IsEdge ( grid , change . GridIndices , out var spaceDir ) )
294+ edges . Add ( change . GridIndices , spaceDir ) ;
295+ }
295296 }
296297
297298 /// <summary>
0 commit comments