예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }