Example #1
0
 public void SetParentLayer(RelevantObjectLayer layer)
 {
     foreach (var relevantObject in Values.SelectMany(list => list))
     {
         relevantObject.Layer = layer;
     }
 }
        public LayerCollection(RelevantObjectsGeneratorCollection generators, double acceptableDifference)
        {
            ObjectLayers         = new List <RelevantObjectLayer>();
            AllGenerators        = generators;
            AcceptableDifference = acceptableDifference;
            LockedLayer          = new RelevantObjectLayer(this, null);

            // Generate 1 layer
            ObjectLayers.Add(new RelevantObjectLayer(this, AllGenerators));

            // Set the previous layer of the rootlayer to the locked layer so every layer has the locked layer
            GetRootLayer().PreviousLayer = LockedLayer;
            LockedLayer.NextLayer        = GetRootLayer();
        }
        public void SetInceptionLevel(int inceptionLevel)
        {
            if (inceptionLevel < 0)
            {
                throw new ArgumentException("Inception level can't be less than 0.");
            }

            if (ObjectLayers.Count < inceptionLevel)
            {
                // Add more layers
                var layersToAdd = inceptionLevel - ObjectLayers.Count;
                for (var i = 0; i < layersToAdd; i++)
                {
                    var lastLayer = ObjectLayers.LastOrDefault();
                    var newLayer  = new RelevantObjectLayer(this, AllGenerators)
                    {
                        PreviousLayer = lastLayer
                    };
                    if (lastLayer != null)
                    {
                        lastLayer.NextLayer = newLayer;
                    }
                    ObjectLayers.Add(newLayer);

                    // Derive new relevant objects in the new layer
                    newLayer.GenerateNewObjects();
                }
            }
            else if (ObjectLayers.Count > inceptionLevel)
            {
                // Remove layers
                var layersToRemove = ObjectLayers.Count - inceptionLevel;
                for (var i = 0; i < layersToRemove; i++)
                {
                    // Dispose all objects from last layer
                    ObjectLayers[ObjectLayers.Count - 1].Clear();

                    ObjectLayers.RemoveAt(ObjectLayers.Count - 1);
                    var lastLayer = ObjectLayers.LastOrDefault();
                    if (lastLayer != null)
                    {
                        lastLayer.NextLayer = null;
                    }
                }
            }
        }