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)); }
public static MultiColorFont LoadFromImage( Uri fontImageUri, string symbols, Color?transparencyColor = null) { Color[,] pixels = PixelSupport.GetPixels(fontImageUri); return(LoadFromImage(pixels, symbols, transparencyColor)); }
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)); } }
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; } }
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; } }