コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        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();
        }