コード例 #1
0
 public bool Contains(BlockCoordinates coordinates)
 {
     lock (_writeLock)
     {
         return(BlockIndices.ContainsKey(coordinates));
     }
 }
コード例 #2
0
        public void Remove(BlockCoordinates coordinates)
        {
            lock (_writeLock)
            {
                if (BlockIndices.Remove(coordinates, out var indices))
                {
                    foreach (var vertex in indices)
                    {
                        TextureStorage.DecrementUsage(vertex.TexCoords);
                        Interlocked.Decrement(ref _vertexCount);
                        //FreeIndex(index);
                    }

                    // ApplyIntermediate();

                    HasChanges = true;
                }
            }
        }
コード例 #3
0
        public void AddVertex(BlockCoordinates blockCoordinates,
                              Vector3 position,
                              Vector2 textureCoordinates,
                              Color color,
                              byte blockLight,
                              byte skyLight)
        {
            lock (_writeLock)
            {
                //Add(blockCoordinates, position, textureCoordinates, color, blockLight, skyLight);
                var textureIndex = TextureStorage.GetIndex(textureCoordinates);

                if (textureIndex == -1)
                {
                    textureIndex = TextureStorage.Add(textureCoordinates);
                }

                TextureStorage.IncreaseUsage(textureIndex);

                var vertexData = new VertexData(
                    position, (ushort)textureIndex, color.PackedValue, (byte)blockLight,
                    skyLight);

                Interlocked.Increment(ref _vertexCount);

                if (BlockIndices.TryGetValue(blockCoordinates, out var list))
                {
                    list.Add(vertexData);
                }
                else
                {
                    BlockIndices.Add(blockCoordinates, new List <VertexData>()
                    {
                        vertexData
                    });
                }

                HasChanges = true;
            }
        }
コード例 #4
0
 public void Dispose()
 {
     Buffer?.MarkForDisposal();
     BlockIndices.Clear();
 }