/// <summary> /// Remove the stored noise data if a chunk is deactivated for being outside the xz range /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnChunkDeactivated(object sender, ChunkDeactivatedArgs args) { var columnId = new Vector2Int(args.chunkID.x, args.chunkID.z); if (numActiveChunksInColumn.TryGetValue(columnId, out var count)) { count--; } else { count = 0; } if (count < 1) { //Remove noiseMaps.Remove(columnId); //Delete noise map numActiveChunksInColumn.Remove(columnId); //Stop counting for this column //TODO remove DEBUG var(managerHas, pipelineHas) = chunkManager.ContainsChunkID(args.chunkID); Assert.IsTrue((!managerHas && !pipelineHas), $"When removing a noisemap, both the pipeline and the chunk" + $" manager should have removed the corresponding id {args.chunkID}." + $"Manager had it = {managerHas}, pipeline had it = {pipelineHas}"); } else { //Update stored count numActiveChunksInColumn[columnId] = count; } }
public void FireChunkDeactivated(Vector3Int chunkID, Vector3Int playerChunkID, Vector3Int maxChunkRadii) { Profiler.BeginSample("ChunkDeactivatedEvent"); var displacement = playerChunkID - chunkID; var absDisplacement = displacement.ElementWise(Mathf.Abs); var args = new ChunkDeactivatedArgs() { chunkID = chunkID, absAmountOutsideRadii = absDisplacement - maxChunkRadii }; OnChunkDeactivated(this, args); Profiler.EndSample(); }