Example #1
0
        public void StaticRingsAnimated()
        {
            double progress = this.config.beatBroadcaster.ProgressThroughBeat(
                this.config.domeVolumeRotationSpeed
                );

            double level = this.audio.LevelForChannel(0);

            for (int i = 0; i < 5; i++)
            {
                StrutLayoutSegment segment =
                    this.ringsLayout.GetSegment(i);

                double totalLength = segment.TotalLength;
                double totalPos    = 0;
                foreach (Strut strut in segment.GetStruts())
                {
                    double frac = totalPos / totalLength;
                    double dist = Math.Abs(progress - frac);
                    dist  = dist > 0.5 ? 1.0 - dist : dist;
                    dist *= 2;
                    double d = dist * dist * level * progress;
                    int    c = LEDColor.FromDoubles(d, d, d);

                    for (int j = 0; j < strut.Length; j++, totalPos += 1)
                    {
                        this.dome.SetPixel(strut.Index, j, c);
                    }
                }
            }
        }
Example #2
0
        public void StaticRings()
        {
            for (int i = 0; i < 5; i++)
            {
                StrutLayoutSegment segment =
                    this.ringsLayout.GetSegment(i);


                foreach (Strut strut in segment.GetStruts())
                {
                    for (int j = 0; j < strut.Length; j++)
                    {
                        this.dome.SetPixel(strut.Index, j, random.Next(0x1000000));
                    }
                }
            }
        }
        public void Visualize()
        {
            if (this.wipeStrutsNextCycle)
            {
                for (int i = 0; i < LEDDomeOutput.GetNumStruts(); i++)
                {
                    Strut strut = Strut.FromIndex(this.config, i);
                    for (int j = 0; j < strut.Length; j++)
                    {
                        this.dome.SetPixel(i, j, 0x000000);
                    }
                }
                this.wipeStrutsNextCycle = false;
            }

            this.UpdateCenter();
            this.UpdateAnimationSize(this.config.domeVolumeAnimationSize);

            int subdivisions    = this.partLayout.NumSegments / 2;
            int totalParts      = this.config.domeVolumeAnimationSize;
            int volumeSplitInto = 2 * ((totalParts - 1) / 2 + 1);

            for (int part = 0; part < totalParts; part += 2)
            {
                var    outwardSegment = this.partLayout.GetSegment(part);
                double startRange     = (double)part / volumeSplitInto;
                double endRange       = (double)(part + 2) / volumeSplitInto;
                double level          = this.audio.LevelForChannel(0);
                double scaled         = (level - startRange) /
                                        (endRange - startRange);
                scaled     = Math.Max(Math.Min(scaled, 1.0), 0.0);
                startRange = Math.Min(startRange / level, 1.0);
                endRange   = Math.Min(endRange / level, 1.0);

                foreach (Strut strut in outwardSegment.GetStruts())
                {
                    this.UpdateStrut(strut, scaled, startRange, endRange);
                }

                if (part + 1 == totalParts)
                {
                    break;
                }

                for (int i = 0; i < 6; i++)
                {
                    StrutLayoutSegment segment =
                        this.sectionLayout.GetSegment(i + part * 3);
                    double gradientStartPos = 0.0;
                    double gradientStep     = 1.0 / segment.GetStruts().Count;
                    foreach (Strut strut in segment.GetStruts())
                    {
                        double gradientEndPos = gradientStartPos + gradientStep;
                        this.UpdateStrut(
                            strut,
                            scaled == 1.0 ? 1.0 : 0.0,
                            gradientStartPos,
                            gradientEndPos
                            );
                        gradientStartPos = gradientEndPos;
                    }
                }
            }
            this.dome.Flush();
        }