Ejemplo n.º 1
0
        // Internal version of RequestChunkUnloading without ChunkOperations. This is called by UnloadChunkOperation
        public void _RequestChunkUnloading(List <Vector3Int> chunkPositions, ChunkLoader requester)
        {
            // If no positions passed, ignore
            if (chunkPositions == null || chunkPositions.Count == 0)
            {
                return;
            }

            foreach (Vector3Int chunkPosition in chunkPositions)
            {
                // Check that this request exists and that the chunk loader has actually requested it previously
                if (chunkLoadingRequests.ContainsKey(chunkPosition) &&
                    chunkLoadingRequests[chunkPosition].Contains(requester))
                {
                    // Remove the chunk from the requests list
                    chunkLoadingRequests[chunkPosition].Remove(requester);

                    // If this chunk is no longer requested by any chunk loader, remove it entirely.
                    if (chunkLoadingRequests[chunkPosition].Count == 0)
                    {
                        chunkLoadingRequests.Remove(chunkPosition);
                    }
                }
            }

            /**
             * Note: This does not unload the chunk immediately because there is no need.
             * The ProcessOperation() method will see that this chunk is being used and keep track of it in its "chunksUsed" list.
             * Once no other chunk loader/operation requires it, it will unload the chunk.
             */
        }
Ejemplo n.º 2
0
        // Internal version of RequestChunkUnloading without ChunkOperations. This is called by UnloadChunkOperation
        public async Task _RequestChunkLoading(List <Vector3Int> chunkPositions, ChunkLoader requester)
        {
            // If no positions passed, ignore
            if (chunkPositions == null || chunkPositions.Count == 0)
            {
                return;
            }

            foreach (Vector3Int chunkPosition in chunkPositions)
            {
                // Add it the requester to the list
                if (chunkLoadingRequests.ContainsKey(chunkPosition))
                {
                    // Make sure that this requester did not already ask for this chunk to be loaded
                    if (!chunkLoadingRequests[chunkPosition].Contains(requester))
                    {
                        chunkLoadingRequests[chunkPosition].Add(requester);
                    }
                }
                else
                {
                    chunkLoadingRequests.Add(chunkPosition, new List <ChunkLoader> {
                        requester
                    });
                }
            }

            // Actually load the chunk into the chunks list
            await GetOrCreateChunk(chunkPositions);
        }
Ejemplo n.º 3
0
 /// <summary>
 ///     Request the unloading of multiple chunks.
 ///     This will not fail if the chunks weren't loaded in the first place.
 /// </summary>
 /// <param name="chunkPositions">The positions at which to unload the chunks from.</param>
 /// <param name="requester">The ChunkLoader that requested this.</param>
 public async Task RequestChunkUnloading(List <Vector3Int> chunkPositions, ChunkLoader requester)
 {
     if (debugMode)
     {
         Debug.Log("Requesting for chunks " + chunkPositions.ToStringFlattened() + " to unload.");
     }
     await AddChunkOperation(new UnloadChunkOperation(chunkPositions, requester));
 }
Ejemplo n.º 4
0
 public UnloadChunkOperation(List <Vector3Int> chunkPositions, ChunkLoader requester) : base("unload",
                                                                                             chunkPositions)
 {
     Requester = requester;
 }