예제 #1
0
        public bool generateBurst(FrameStrip strip, String text, Int32 framesPerLetter, ColourFunc cfn)
        {
            String upperText = text.ToUpper();

            for (Int32 i = 0; i < upperText.Length; i++)
            {
                char cT = upperText[i];
                if (cT == ' ')
                {
                    for (Int32 n = 0; n < framesPerLetter; n++)
                    {
                        strip.addFrame(new Frame(), false);
                    }
                    continue;
                }

                Int32 frameIndex = fontMap.IndexOf(cT);
                if (frameIndex == -1)
                {
                    return(false);
                }
                if (frameIndex > mFontTemplate.Count)
                {
                    return(false);
                }

                float bright = 0.9f;
                for (Int32 n = 0; n < framesPerLetter; n++)
                {
                    Frame letter = mFontTemplate[frameIndex];
                    Frame t      = new Frame();

                    bool fOutDE = t.DisableEvents;
                    t.DisableEvents = true;

                    t.copyFromWithXOffset(letter, 1, false);

                    Byte R, G;
                    for (Int32 y = 0; y < Frame.EdgeLEDCount; y++)
                    {
                        for (Int32 x = 0; x < Frame.EdgeLEDCount; x++)
                        {
                            t.getLED(x, y, out R, out G);

                            if (R != 0)
                            {
                                cfn(x, y, x, i, out R, out G);
                                t.setLED(x, y, R, G);
                            }
                        }
                    }

                    Int32 fadeSeq = (n - (framesPerLetter - 4));
                    for (Int32 f = 0; f < fadeSeq; f++)
                    {
                        t.fade(true, true);

                        Frame tF = new Frame();
                        for (Int32 y = 0; y < Frame.EdgeLEDCount; y++)
                        {
                            for (Int32 x = 0; x < Frame.EdgeLEDCount; x++)
                            {
                                t.getLED(x, y, out R, out G);

                                tF.setLEDDiscard(x, y - 1, R, G);
                            }
                        }
                        t.copyFrom(tF);
                    }

                    t.DisableEvents = fOutDE;

                    t.BrightnessAsFloat = bright;
                    bright *= 0.7f;
                    if (bright < 0.3f)
                    {
                        bright = 0.3f;
                    }

                    strip.addFrame(t, false);
                }
            }

            return(true);
        }
예제 #2
0
        public bool generateScroller(FrameStrip strip, String text, Int32 yOffset, float scrollSpeed, ColourFunc cfn)
        {
            String upperText = text.ToUpper();

            Int32 textWidth = (Frame.EdgeLEDCount * upperText.Length);
            Int32 arraySpan = textWidth + (Frame.EdgeLEDCount * 2);

            {
                Byte[,] tArray = new Byte[arraySpan, Frame.EdgeLEDCount];
                Int32 arrayX = Frame.EdgeLEDCount;

                for (Int32 i = 0; i < upperText.Length; i++)
                {
                    char cT = upperText[i];
                    if (cT == ' ')
                    {
                        arrayX += 6;
                        continue;
                    }

                    Int32 frameIndex = fontMap.IndexOf(cT);
                    if (frameIndex == -1)
                    {
                        return(false);
                    }
                    if (frameIndex > mFontTemplate.Count)
                    {
                        return(false);
                    }

                    Frame letter = mFontTemplate[frameIndex];
                    Size  bounds = letter.getUsedPixelSpace();

                    Byte R, G;
                    for (Int32 y = 0; y < Frame.EdgeLEDCount; y++)
                    {
                        Int32 arrayXiter = arrayX;
                        for (Int32 x = 0; x < Frame.EdgeLEDCount; x++, arrayXiter++)
                        {
                            letter.getLED(x, y, out R, out G);

                            if (R != 0)
                            {
                                cfn(x, y, arrayXiter, i, out R, out G);
                                tArray[arrayXiter, y] = (Byte)((R) | (G << 2));
                            }
                        }
                    }
                    arrayX += 1 + bounds.Width;
                }


                for (float q = 0.0f; q < (float)arrayX; q += scrollSpeed)
                {
                    Frame t = new Frame();
                    t.copyFromLEDArray(tArray, (Int32)q, -yOffset);
                    strip.addFrame(t, false);
                }
            }

            return(true);
        }