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