コード例 #1
0
        /// <summary>
        /// Add to map and to living list. Does nothing if tries to set outside.
        /// </summary>
        private void InsertVoxel(Int32 positionCode, VoxelType type, int generation, bool living, int resources, int ticks, Direction from)
        {
            var pos = _map.DecodePosition(positionCode);

            if (_map.IsInside(pos.X, pos.Y, pos.Z))
            {
                if (_map.Get(positionCode) != VoxelType.EMPTY)
                {
                    RemoveVoxel(positionCode);
                }

                _map.Set(positionCode, type, living);
                if (type != VoxelType.EMPTY)
                {
                    // Insert to instance data only if visible
                    if (!_map.IsOccluded(positionCode))
                    {
                        _insertionList.Add(new Voxel(positionCode, type));
                    }
                    RemoveOccludedNeighbours(positionCode);
                }
                if (living)
                {
                    Debug.Assert(!_livingVoxels.ContainsKey(positionCode));
                    _livingVoxels.Add(positionCode, new LivingVoxel(pos.X, pos.Y, pos.Z, generation, resources, ticks, from));
                    if (TypeInformation.IsBiomass(type))
                    {
                        ++_numLivingBiomass;
                    }
                    else if (TypeInformation.IsParasite(type))
                    {
                        ++_numLivingParasites;
                    }
                }
            }
        }