private void tbAddSource_Click(object sender, RoutedEventArgs e) { if (tbAddSource.IsChecked ?? false) { if (!Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) { AquaLib.aqua_add_random_source(_context); tbAddSource.IsChecked = false; } } }
private void tmrAdvance_Tick(object sender, EventArgs e) { if ((tbAddSource.IsChecked ?? false) && (_nextAddSource < DateTime.UtcNow)) { _nextAddSource = DateTime.UtcNow.AddSeconds(1.0); AquaLib.aqua_add_random_source(_context); } AquaLib.aqua_update_ripple(_context); AquaLib.aqua_update_sources(_context); AquaLib.aqua_advance_sky(_context); var skyPaletteNative = new AquaColour[256]; AquaLib.aqua_get_current_sky_palette(_context, skyPaletteNative); var skyPalette = new Color[256]; var skyPalettePbgra32 = new int[256]; for (int i = 0; i < 256; i++) { skyPalette[i] = Color.FromArgb(255, skyPaletteNative[i].r, skyPaletteNative[i].g, skyPaletteNative[i].b); skyPalettePbgra32[i] = ToPbgra32(skyPalette[i]); } imgSkyPalette.Source = BitmapSource.Create( 1, 256, 96.0, 96.0, PixelFormats.Pbgra32, null, skyPalettePbgra32, 4); AquaLib.aqua_get_frame_size(_context, out int width, out int height); byte[] imageBuffer = new byte[width * height]; bool showLights = (tbRenderLights.IsChecked ?? false) && (_lightMap != IntPtr.Zero) && (_lightMapBuffer.Length == imageBuffer.Length); if (!showLights) { AquaLib.aqua_get_frame(_context, imageBuffer); } else { AquaLib.aqua_light_map_render(_lightMap, _context); AquaLib.aqua_light_map_get_light_brightness(_lightMap, out int numLights, null); byte[] lightBrightness = new byte[numLights]; AquaLib.aqua_light_map_get_light_brightness(_lightMap, out numLights, lightBrightness); for (int i = 0; i < _lightMapBuffer.Length; i++) { int lightIndex = _lightMapBuffer[i]; if (lightIndex < 0) { imageBuffer[i] = 0; } else { imageBuffer[i] = lightBrightness[lightIndex]; } } } int[] imageBufferColour = new int[width * height]; for (int i = 0; i < imageBufferColour.Length; i++) { imageBufferColour[i] = skyPalettePbgra32[imageBuffer[i]]; } imgDisplay.Source = BitmapSource.Create( width, height, 96.0, 96.0, PixelFormats.Pbgra32, null, imageBufferColour, width * 4); if (tbCreateVideo.IsChecked ?? false) { for (int i = 0; i < imageBufferColour.Length; i++) { _videoWriter.Write(imageBufferColour[i]); } _videoWriter.Flush(); } }