Ejemplo n.º 1
0
        public static async Task <MultiColorFont> LoadFromImage(
            Uri fontImageUri,
            string symbols,
            Color?transparencyColor = null)
        {
            Color[,] pixels = await PixelSupport.GetPixels(fontImageUri).ConfigureAwait(false);

            return(LoadFromImage(pixels, symbols, transparencyColor));
        }
Ejemplo n.º 2
0
        public static MultiColorFont LoadFromImage(
            Uri fontImageUri,
            string symbols,
            Color?transparencyColor = null)
        {
            Color[,] pixels = PixelSupport.GetPixels(fontImageUri);

            return(LoadFromImage(pixels, symbols, transparencyColor));
        }
Ejemplo n.º 3
0
        public override void Run()
        {
            // A big thanks to Johan Vinet, pixel artist and animator, for the Mario animation! :-)
            // http://johanvinet.tumblr.com/
            // Twitter handle: @johanvinet
            var imageUri = new Uri("ms-appx:///Assets/MiniMario.png");

            // Get the pixels of the animation frames.
            Color[,] pixels = PixelSupport.GetPixels(imageUri).Result;

            // Create a sprite map from the pixels.
            var spriteMap = new SpriteMap(pixels);

            // Keep track of the animation frame...
            int    animationIndex = 0;
            Sprite sprite         = spriteMap.GetSprite(animationIndex);

            // ...and when it's time to update it.
            TimeSpan frameDuration           = TimeSpan.FromMilliseconds(70);
            DateTime nextAnimationUpdateTime = DateTime.Now.Add(frameDuration);

            // Keep track of the location and orientation of the sprite.
            int spriteX = 0;
            int spriteY = 0;
            DisplayDirection direction      = DisplayDirection.Deg0;
            bool             flipHorizontal = false;
            bool             flipVertical   = false;

            while (true)
            {
                bool redrawSprite = false;

                //Is it time to update the animation ?
                if (DateTime.Now >= nextAnimationUpdateTime)
                {
                    // Yes. The next time to update is:
                    nextAnimationUpdateTime = DateTime.Now.Add(frameDuration);

                    // Needs to redraw the sprite.
                    redrawSprite = true;

                    // Select the next sprite index.
                    animationIndex++;
                    if (animationIndex >= 6)
                    {
                        animationIndex = 0;
                    }

                    // Pick out the sprite.
                    sprite = spriteMap.GetSprite(animationIndex);
                }

                if (SenseHat.Joystick.Update())                                                  // Has any of the buttons on the joystick changed?
                {
                    UpdatePosition(ref spriteX, ref spriteY);                                    // Move the sprite.

                    UpdateDrawingDirection(ref direction, ref flipHorizontal, ref flipVertical); // Re-orientate the sprite.

                    // Needs to redraw the sprite.
                    redrawSprite = true;
                }

                if (redrawSprite)
                {
                    SenseHat.Display.Clear();                     // Clear the screen.

                    // Draw the sprite.
                    sprite.Draw(SenseHat.Display, spriteX, spriteY, true, direction, flipHorizontal, flipVertical);

                    SenseHat.Display.Update();                     // Update the physical display.
                }

                // Take a short nap.
                Sleep(TimeSpan.FromMilliseconds(2));
            }
        }
Ejemplo n.º 4
0
        public void Draw(
            ISenseHatDisplay display,
            int offsetX,
            int offsetY,
            bool transparent,
            DisplayDirection direction,
            bool flipHorizontal,
            bool flipVertical)
        {
            int right  = offsetX + 7;
            int bottom = offsetY + 7;

            if ((offsetY > 7) || (bottom < 0) || (offsetX > 7) || (right < 0))
            {
                return;
            }

            int spritePixelX0 = _spriteXIndex * 8;
            int spritePixelY0 = _spriteYIndex * 8;

            int spritePixelXOffset;
            int spritePixelYOffset;

            if (offsetX < 0)
            {
                spritePixelXOffset = -offsetX;
                offsetX            = 0;
            }
            else
            {
                spritePixelXOffset = 0;
            }

            if (offsetY < 0)
            {
                spritePixelYOffset = -offsetY;
                offsetY            = 0;
            }
            else
            {
                spritePixelYOffset = 0;
            }
            if (right > 7)
            {
                right = 7;
            }

            if (bottom > 7)
            {
                bottom = 7;
            }

            bool leftToRight;
            bool topToBottom;
            bool flipAxis;

            PixelSupport.ConvertDirectionParameters(
                direction,
                flipHorizontal,
                flipVertical,
                out leftToRight,
                out topToBottom,
                out flipAxis);

            int xStart;
            int xStep;
            int yStart;
            int yStep;

            if (leftToRight)
            {
                xStart = 0;
                xStep  = 1;
            }
            else
            {
                xStart             = 7;
                xStep              = -1;
                spritePixelXOffset = -spritePixelXOffset;
            }

            if (topToBottom)
            {
                yStart = 0;
                yStep  = 1;
            }
            else
            {
                yStart             = 7;
                yStep              = -1;
                spritePixelYOffset = -spritePixelYOffset;
            }

            int spritePixelY = yStart;

            for (int screenY = offsetY; screenY <= bottom; screenY++)
            {
                int spritePixelX = xStart;

                for (int screenX = offsetX; screenX <= right; screenX++)
                {
                    int dX = flipHorizontal
                                                ? 7 - spritePixelXOffset - spritePixelX
                                                : spritePixelXOffset + spritePixelX;

                    int dY = flipVertical
                                                ? 7 - spritePixelYOffset - spritePixelY
                                                : spritePixelYOffset + spritePixelY;

                    Color spriteColor = flipAxis
                                                ? _spriteMap.Pixels[spritePixelX0 + dY, spritePixelY0 + dX]
                                                : _spriteMap.Pixels[spritePixelX0 + dX, spritePixelY0 + dY];

                    if (transparent)
                    {
                        Color screenColor = display.Screen[screenX, screenY];

                        spriteColor = GetTransparentPixel(screenColor, spriteColor);
                    }

                    display.Screen[screenX, screenY] = spriteColor;

                    spritePixelX += xStep;
                }

                spritePixelY += yStep;
            }
        }
Ejemplo n.º 5
0
        public void DrawWrapped(
            ISenseHatDisplay display,
            int offsetX,
            int offsetY,
            bool transparent,
            DisplayDirection direction,
            bool flipHorizontal,
            bool flipVertical)
        {
            int spritePixelX0 = _spriteXIndex * 8;
            int spritePixelY0 = _spriteYIndex * 8;

            if (offsetX < 0)
            {
                offsetX = 8 + (offsetX % 8);
            }

            if (offsetY < 0)
            {
                offsetY = 8 + (offsetY % 8);
            }

            bool leftToRight;
            bool topToBottom;
            bool flipAxis;

            PixelSupport.ConvertDirectionParameters(
                direction,
                flipHorizontal,
                flipVertical,
                out leftToRight,
                out topToBottom,
                out flipAxis);

            int xStart;
            int xStep;
            int yStart;
            int yStep;

            if (leftToRight)
            {
                xStart = 0;
                xStep  = 1;
            }
            else
            {
                xStart  = 7;
                xStep   = -1;
                offsetX = 8 - offsetX;
            }

            if (topToBottom)
            {
                yStart = 0;
                yStep  = 1;
            }
            else
            {
                yStart  = 7;
                yStep   = -1;
                offsetY = 8 - offsetY;
            }

            int spritePixelY = yStart;

            for (int screenY = 0; screenY <= 7; screenY++)
            {
                int spritePixelX = xStart;

                for (int screenX = 0; screenX <= 7; screenX++)
                {
                    int dX = (8 + spritePixelX - offsetX) % 8;
                    int dY = (8 + spritePixelY - offsetY) % 8;

                    Color spriteColor = flipAxis
                                                ? _spriteMap.Pixels[spritePixelX0 + dY, spritePixelY0 + dX]
                                                : _spriteMap.Pixels[spritePixelX0 + dX, spritePixelY0 + dY];

                    if (transparent)
                    {
                        Color screenColor = display.Screen[screenX, screenY];

                        spriteColor = GetTransparentPixel(screenColor, spriteColor);
                    }

                    display.Screen[screenX, screenY] = spriteColor;

                    spritePixelX += xStep;
                }

                spritePixelY += yStep;
            }
        }