Exemple #1
0
        protected override MutableObject Mutate(MutableObject mutable)
        {
            foreach (var entry in Scope.GetEntries(mutable))
            {
                var entropy = Entropy.GetValue(entry);

                var bandSpacing = BandSpacing.GetValue(entry);

                var entropySteps =
                    (from step in EntropySteps.GetValue(entry).Split(',') select float.Parse(step.Trim()))
                    .ToArray();

                var entropyLevel = 0;
                while (entropyLevel < entropySteps.Length && entropy > entropySteps[entropyLevel])
                {
                    entropyLevel++;
                }

                var minBands = MinimumBandSize.GetValue(entry) + entropyLevel;

                LowerBandTarget.SetValue(minBands, entry);
                UpperBandTarget.SetValue(bandSpacing + minBands, entry);
            }

            return(mutable);
        }
        public override IEnumerator ReceivePayload(VisualPayload payload)
        {
            var textureSize = TextureSize.GetFirstValue(payload.Data);

            var entropy = Entropy.GetFirstValue(payload.Data);

            var entropySteps = (from step in EntropySteps.GetFirstValue(payload.Data).Split(',') select float.Parse(step.Trim())).ToArray();

            var minimumEntropyLevels = MinimumEntropyLevels.GetFirstValue(payload.Data);

            var colorOne = ColorOne.GetFirstValue(payload.Data);
            var colorTwo = ColorTwo.GetFirstValue(payload.Data);

            var entropyGridTexture = new Texture2D(textureSize, textureSize);

            var entropyLevel = 0;

            while (entropyLevel < entropySteps.Length && entropy > entropySteps[entropyLevel])
            {
                entropyLevel++;
            }

            entropyLevel += minimumEntropyLevels;

            var pixels = new Color[textureSize * textureSize];

            for (int x = 0; x < textureSize; x++)
            {
                for (int y = 0; y < textureSize; y++)
                {
                    var xImpact = Mathf.FloorToInt((x / (float)textureSize) * entropyLevel);
                    var yImpact = Mathf.FloorToInt((y / (float)textureSize) * entropyLevel);
                    pixels[x + y * textureSize] = ((xImpact + yImpact) % 2) == 1 ? colorOne : colorTwo;
                }
            }

            entropyGridTexture.SetPixels(pixels);

            entropyGridTexture.Apply();

            TextureTarget.SetValue(entropyGridTexture, payload.Data);

            var iterator = Router.TransmitAll(payload);

            while (iterator.MoveNext())
            {
                yield return(null);
            }
        }