/*
 * Module:
 *	FireWorks
 *
 * Author:
 *	Doug "Kareth" McClure
 *	asd@cc.purdue.edu
 *	XASD@PURCCVM.BITNET
 *
 * Version: 1.0
*/

#import "FireWorksView.h"
#import "Thinker.h"
#import "FireWorksWraps.h"
#import <appkit/NXImage.h>
#import <appkit/Window.h>
#import <appkit/Panel.h>                // for NXRunAlertPanel()
#import <dpsclient/wraps.h>
#import <libc.h>
#import <math.h>

#define GRAVITY	0.8
#define NUMBER_SHOTS	10
#define TIME_DELAY	1000

@implementation FireWorksView

- oneStep
{
  static int i = 0, blowCount = 1;
  static float oldx, oldy, newx, newy, xvel, yvel;
  
  if ( i == 0 )
    {
      oldx = randBetween(0.0, 1000.0);
      oldy = 0.0;
  
      newx = oldx;
      newy = 0.0;
  
      xvel = (randBetween(0.0, 1000.0) - oldx) / 50.0;
      yvel = randBetween(0.0, 15.0) + 23.0;
    }
  
  PSsendfloat(newx);
  PSsendfloat(newy);
  PSsendfloat(oldx);
  PSsendfloat(oldy);

  psDrawWork();
      
  oldx = newx;
  oldy = newy;
  newx = oldx + xvel;
  newy = oldy + yvel;
  yvel -= GRAVITY;
  
  if ( i++ > 50 )
    {
      i = 0;
      
      PSsendfloat(newy);
      PSsendfloat(newx);
      PSsendfloat(oldy);
      PSsendfloat(oldx);
      PSsendfloat(randBetween(0.0, 0.5));
      PSsendfloat(randBetween(0.0, -2.0) - 1.0);
      psBlowUp();

      if ( ++blowCount > NUMBER_SHOTS )
	{
	  blowCount = 1;
	  PSsetgray(0.0);
	  PSclippath();
	  PSfill();
	}
    }
    
  return self;
}


- initFrame:(NXRect *)frameRect
{
  [super initFrame:frameRect];
  [self newSize];

  PSsetlinewidth(2.0);
  
  return self;
}


- sizeTo:(NXCoord)width :(NXCoord)height
{
  [super sizeTo:width :height];
  [self newSize];

  return self;
}


- newSize
{
  xSize = bounds.size.width;
  ySize = bounds.size.height;

  return self;
}


@end
