public override byte[] Render() { if (TimePassed(5)) { if (FirstFrame) { Image.SetAll(_bgcolor); } for (int i = 0; i < LedCount; i++) { if (_pixelArray[i] > 256) { _pixelArray[i] = _pixelArray[i] - 500 / (256 - _speed) * 4 > 0 ? _pixelArray[i] - 500 / (256 - _speed) * 4 : 0; } else { _pixelArray[i] = _pixelArray[i] - 500 / (256 - _speed) > 0 ? _pixelArray[i] - 500 / (256 - _speed) : 0; } } if (Rndm.Next(1000) < _count) { var index = RndmIndex(); if (_pixelArray[index] < 0.1) { _pixelArray[index] = 510; } } for (int i = 0; i < LedCount; i++) { if (_pixelArray[i] != 0) { RgbColor newColor; if (_pixelArray[i] > 255) { newColor = RgbColor.Transition(_color, _bgcolor, ((_pixelArray[i] - 255) + 1) / 256, _evenColors); } else { newColor = RgbColor.Transition(_bgcolor, _color, (_pixelArray[i] + 1) / 256, _evenColors); } Image.Leds[i] = newColor; } else { Image.Leds[i] = _bgcolor; } } return(Image.ToByteArray()); } return(null); }
public override byte[] Render() { if (TimePassed(_speed)) { if (!_animated) { prog = (int)LedCount / 2; } else { if (prog >= LedCount || prog == 0) { progDir *= -1; } prog += progDir; } for (int i = 1; i <= LedCount; i++) { float perc; if (i < prog) { perc = Map(i, 1, prog, 0, 0.5f); } else { perc = Map(i, prog, LedCount, 0.5f, 1f); } var color = RgbColor.Transition(_colorA, _colorB, perc); Image.Leds[i - 1].SetColor(color); } return(Image.ToByteArray()); } return(null); }
public override byte[] Render() { if (TimePassed((int)_interval * 1000)) { var httpClient = new HttpClient(); HttpResponseMessage res; try { var httpTask = httpClient.GetAsync(_apiUrl); httpTask.Wait(); res = httpTask.Result; httpClient.Dispose(); } catch (Exception) { httpClient.Dispose(); Image.SetAll(20, 0, 0); return(Image.ToByteArray()); } if (res.IsSuccessStatusCode) { try { var readTask = res.Content.ReadAsStringAsync(); readTask.Wait(); var jsonString = readTask.Result; var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }; var ledImageDto = JsonSerializer.Deserialize <LedImageDto>(jsonString, options); var ledImage = LedImage.FromDto(ledImageDto); if (ledImage.TransitionTime != 0) { if (_ledImageTo == null) { _ledImageTo = ledImage; for (int i = 0; i < ledImage.Leds.Count; i++) { Image.Leds[i] = ledImage.Leds[i]; } } else { if (!_ledImageTo.Equals(ledImage)) { _ledImageFrom = _ledImageTo; _ledImageTo = ledImage; _activeTransition = true; _transitionProgress = 0.0f; } } } else { for (int i = 0; i < ledImage.Leds.Count; i++) { Image.Leds[i] = ledImage.Leds[i]; } } } catch (Exception ex) { Logger.LogError("Error during rendering WebEffect", ex); } } else { Image.SetAll(20, 0, 0); } if (!_activeTransition) { return(Image.ToByteArray()); } } if (_activeTransition) { _transitionProgress += (float)5 / _ledImageTo.TransitionTime; if (_transitionProgress > 1.0f) { _transitionProgress = 1.0f; _activeTransition = false; } for (int i = 0; i < LedCount; i++) { var oldC = _ledImageFrom.Leds[i]; var newC = _ledImageTo.Leds[i]; var resC = RgbColor.Transition(oldC, newC, _transitionProgress); Image.Leds[i] = resC; } return(Image.ToByteArray()); } return(null); }