public async Task initSenseHat() { // Create sensehat object senseHat = await SenseHatFactory.Singleton.Create(); // Init font tinyFont = new TinyFont(); // Init display display = senseHat.Display; // Get a copy of the rainbow colors. senseHat.Display.Reset(); // Recreate the font from the serialized bytes. BwFont font = BwFont.Deserialize(FontBytes); // Get the characters to scroll. IEnumerable<BwCharacter> characters = font.GetChars("Error"); // Create the character renderer. BwCharacterRenderer characterRenderer = new BwCharacterRenderer(GetCharacterColor); // Create the text scroller. textScroller = new TextScroller<BwCharacter>(senseHat.Display, characterRenderer, characters); // Update forecast for first time getWeather(currentCity); // Check joystick every 100 ms joystickPollTimer = ThreadPoolTimer.CreatePeriodicTimer(pollJoystick, TimeSpan.FromMilliseconds(50)); // Check sensor every 2 s updateSensorsTimer = ThreadPoolTimer.CreatePeriodicTimer(updateSensors, TimeSpan.FromSeconds(2)); // Get updated weather every 1 minute forecastUpdateTimer = ThreadPoolTimer.CreatePeriodicTimer(updateForecast, TimeSpan.FromMinutes(1)); }
public void Write(ISenseHatDisplay display, string twoCharText, Color color, int offsetY = 0) { BwCharacter[] chars = Font.GetChars(twoCharText).ToArray(); if (chars.Length == 0) { return; } if (chars.Length > 2) { throw new ArgumentException("Max two characters are allowed!", nameof(twoCharText)); } var characterRenderer = new BwCharacterRenderer(pixelMap => color); int x = 0; foreach (BwCharacter character in chars) { characterRenderer.Render(display, character, x, offsetY); x += 4; } }
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; } }