Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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);
        }