/*
==============================================================================
                      WordUp Graphics Toolkit Version 5.0                     
                             Demonstration Program 6                          
                                                                              
 Draws lines of different colours, then fades the colours in and out          
 in various ways.                                                             
                                                                              
 *** PROJECT ***                                                             
 This program requires the file WGT5_WC.LIB to be linked.
                                                                              
 *** DATA FILES ***                                                          
 NONE                                                                        
                                                           WATCOM C++ VERSION 
==============================================================================
*/

#include <wgt5.h>


void main(void)
{
  short y;
  short oldmode;
  color palette[256];
  color blackpalette[256];        /* All value will be set to 0... */
  color temppal[256];             /* Another black palette */

  printf ("WGT Example #6\n\n");
  printf ("This program will draw an image on a black screen, fade it in slowly,\n");
  printf ("then fade it out. A new screen will fade in, and then it will fade out\n");
  printf ("in various portions at a time. The last screen will fade in while lines\n");
  printf ("are being drawn, and then fade out while lines are being drawn.\n");
  printf ("No keypresses are required once the program starts.\n");
  printf ("\n\nPress any key to continue.\n");
  getch ();

  if ( !vgadetected () )
  {
    printf("Error - VGA card required for any WGT program.\n");
    exit (0);
  }

  oldmode = wgetmode ();
  vga256 ();
  
  for (y = 0; y < 256; y++)
    wsetrgb (y, 0, 0, 0, blackpalette);

  wsetpalette (0, 255, blackpalette); /* Hide all colours while we draw */

  /* Now let's make a screen while all the colours are black. */
  wcls (0);
  for (y = 0; y < 500; y++)
  {
    wsetcolor (rand() % 256);
    wline (rand() % 320, rand() % 200, rand() % 320, rand() % 200);
  }

  /* Make a palette with some colours. */
  for (y = 0; y < 64; y++)
    wsetrgb (y, y, y, y, palette);
  for (y = 0; y < 64; y++)
    wsetrgb (y + 64, y, 0, 0, palette);
  for (y = 0; y < 64; y++)
    wsetrgb (y + 128, 0, y, 0, palette);
  for (y = 0; y < 64; y++)
    wsetrgb (y + 192, 0, 0, y, palette);

  /* Fade in the screen */
  wfade_in (1, 255, 20, palette);
  delay (1000);

  wfade_out (0, 255, 20, palette);

  /* Draw a new screen */
  wcls (0);
  for (y = 0; y < 320; y++)
  {
    wsetcolor (y % 200);
    wline (319 - y, 0, 319, (float)y / 320.0 * 200);
    wline (0, (float)y / 320.0 * 200, 319 - y, 199);
  }

  wfade_in (1, 200, 40, palette);
  delay (2000);

  wfade_out (1, 50, 10, palette);
  wfade_out (50, 75, 10, palette);
  wfade_out (75, 100, 10, palette);
  wfade_out (100, 125, 10, palette);
  wfade_out (125, 150, 10, palette);
  wfade_out (150, 175, 10, palette);
  wfade_out (175, 200, 10, palette);

  for (y = 0; y < 64; y++)
  {
    wline (rand() % 319, rand() % 199, rand() % 319, rand() % 199);
    wfade_in_once (1, 200, palette, temppal);
    wsetpalette (1, 255, temppal);
    delay (30);
    /* Fade in while drawing lines. */
  }

  delay (2000);
  for (y = 0; y < 64; y++)
  {
    wline (rand () % 319, rand () % 199, rand () % 319, rand () % 199);
    wfade_out_once (1, 200, palette);
    wsetpalette (1, 255, palette);
    delay (30);
    /* Fade out while drawing lines. */
  }

  wsetmode (oldmode);
}
