private void SetTrailColors(ClockedTrailShape clockedTrailShape) { var trailShape = clockedTrailShape.TrailShape; var leadIndex = trailShape.Trail.LeadIndex; var leadPixel = trailShape.Shape.Pixels[leadIndex]; var trailEnd = leadIndex; //this changes in the for loop after these declarations var dotColor = trailShape.Trail.Color; var overflow = false; //establish last index of trail for (var j = 0; j < trailShape.Trail.Length; j++) { bool tempOverflow; trailEnd = trailShape.Shape.GetPreviousIndex(trailEnd, out tempOverflow); if (tempOverflow) { overflow = true; } } for (var i = 0; i < trailShape.Shape.PixelCount; i++) { //darken pixels inside trail, blacken out the rest if (overflow ? (i < leadIndex || i >= trailEnd) : i < leadIndex && i >= trailEnd) { ColorsToSend[trailShape.Shape.Pixels[i]] = GetColor(trailShape.Shape.Pixels[i]).Darken(trailShape.DarkenFactor); } else //if not sharing the shape with another trailshape, then clean out the rest of the shape if (!false) //was if (!ShareShape) { ColorsToSend[trailShape.Shape.Pixels[i]] = Color.Black; } //set lead index color if (i == leadIndex) { ColorsToSend[leadPixel] = dotColor ?? ProgramCommon.GetRandomColor(); } } trailShape.Trail.LeadIndex = trailShape.Shape.GetNextIndex(leadIndex); if (trailShape.Trail.LeadIndex == 0) { trailShape.Trail.Color = ProgramCommon.GetRandomColor().Darken(0.5); clockedTrailShape.Interval = clockedTrailShape.GetNewInterval(); } //Console.WriteLine(trailShape.ToString()); }
protected override void StartCore(dynamic parameters = null) { if (parameters == null || parameters.ClockedTrailShapes == null) { throw new Exception("Parameter ClockedTrailShapes is required."); } ((List <dynamic>)parameters.ClockedTrailShapes).ForEach(clockedTrailShape => { var tempClockedTrailShape = new ClockedTrailShape(); tempClockedTrailShape.Clock = new TimerClock((double)clockedTrailShape.Interval, args => SetTrailColors(tempClockedTrailShape)); //, 0); tempClockedTrailShape.TrailShape = clockedTrailShape.TrailShape; ClockedTrailShapes.Add(tempClockedTrailShape); }); LoopClock.Start(); ClockedTrailShapes.ForEach(cts => cts.Start()); base.StartCore(null); }