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