private void SerialMonitor_PacketReceived(object sender, PacketDataEventArgs packet) { if (ControllerStateChanged != null) { ControllerStateEventArgs state = _packetParser(packet.GetPacket()); if (state != null) { ControllerStateChanged(this, state); } } }
private void Reader_ControllerStateChanged(object reader, ControllerStateEventArgs e) { _imageBuffer.SetColor(0, 0, 0, 255); int square_width = PrintSize;// 480 / (TILE_PIXEL_WIDTH * TILES_PER_LINE); int square_height = square_width; string[] tiles_rawBytes_array = e.RawPrinterData.Split('\n'); int total_tile_count = 0; for (int tile_i = 0; tile_i < tiles_rawBytes_array.Length; tile_i++) { string tile_element = tiles_rawBytes_array[tile_i]; // Check for invalid raw lines if (tile_element.Length == 0) { // Skip lines with no bytes (can happen with .split() ) continue; } else if (tile_element.StartsWith("!", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("#", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("//", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("{", StringComparison.Ordinal)) { // Skip lines used for comments continue; } total_tile_count++; } int tile_height_count = total_tile_count / TILES_PER_LINE; if (tile_height_count == 0) { DisplayError(); return; } _imageBuffer = new BitmapPixelMaker(square_width * TILE_PIXEL_WIDTH * TILES_PER_LINE, square_height * TILE_PIXEL_HEIGHT * tile_height_count); _image.Height = square_height * TILE_PIXEL_HEIGHT * tile_height_count; _image.Width = square_width * TILE_PIXEL_WIDTH * TILES_PER_LINE; GameBoyPrinterEmulatorWindowGrid.Height = square_height * TILE_PIXEL_HEIGHT * tile_height_count;; GameBoyPrinterEmulatorWindowGrid.Width = square_width * TILE_PIXEL_WIDTH * TILES_PER_LINE; Height = square_height * TILE_PIXEL_HEIGHT * tile_height_count; Width = square_width * TILE_PIXEL_WIDTH * TILES_PER_LINE; int tile_count = 0; for (int tile_i = 0; tile_i < tiles_rawBytes_array.Length; tile_i++) { string tile_element = tiles_rawBytes_array[tile_i]; // Check for invalid raw lines if (tile_element.Length == 0) { // Skip lines with no bytes (can happen with .split() ) continue; } else if (tile_element.StartsWith("!", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("#", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("//", StringComparison.Ordinal)) { // Skip lines used for comments continue; } else if (tile_element.StartsWith("{", StringComparison.Ordinal)) { // Skip lines used for comments continue; } // Gameboy Tile Offset int tile_x_offset = tile_count % TILES_PER_LINE; int tile_y_offset = tile_count / TILES_PER_LINE; byte[] pixels = Decode(tile_element); if (pixels != null) { Paint(_imageBuffer, pixels, square_width, square_height, tile_x_offset, tile_y_offset); } else { //status = false; } // Increment Tile Count Tracker tile_count++; } //imageBuffer.SetColor(0, 0, 0); // Convert the pixel data into a WriteableBitmap. WriteableBitmap wbitmap = _imageBuffer.MakeBitmap(96, 96); // Set the Image source. _image.Source = wbitmap; }