Ejemplo n.º 1
0
 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;
         }
     }
 }
Ejemplo n.º 2
0
        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();
            }
        }