/// <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; } } } }