//
// 3-D gear wheels.  This program is in the public domain.
//
//
// Original: Brian Paul
// Conversion to GLUT by Mark J. Kilgard 
//

// Modified for use in cs4731 by Mark R. Stevens (February 12, 2000)
// contact: stevensm@cs.wpi.edu with comments / concerns

#ifndef EVIL
#define EVIL

// the base class
#include "cs4731app.h"

// The main class definition
class evil : public cs4731app {

 public:

  // initialize
  virtual void init(minigl &mgl, miniglut &mglut);

  // draws a all of the evil
  virtual void draw(minigl &mgl, miniglut &mglut);

  // change the window size 
  virtual void reshape(minigl &mgl, miniglut &mglut, int width, int height);

  // outputs the usage to the screen to show what the keys do
  virtual void usage();

  // receive keyboard events
  virtual void key    (minigl &mgl, miniglut &mglut, unsigned char k, int x, int y);

  // receive mouse events
  virtual void mouse (minigl &mgl, miniglut &mglut, int button, int state, int x, int y);

  // receive special keyboard events (arrow keys, etc.)
  virtual void special(minigl &mgl, miniglut &mglut, int k, int x, int y);

 protected:

  // a series of tests
  void testa(minigl &mgl, miniglut &mglut);
  void testb(minigl &mgl, miniglut &mglut);
  void testc(minigl &mgl, miniglut &mglut);
  void testd(minigl &mgl, miniglut &mglut);
  void teste(minigl &mgl, miniglut &mglut);
  void testf(minigl &mgl, miniglut &mglut);
  void testg(minigl &mgl, miniglut &mglut);
  void testh(minigl &mgl, miniglut &mglut);
  void test1(minigl &mgl, miniglut &mglut);
  void test2(minigl &mgl, miniglut &mglut);
  void test3(minigl &mgl, miniglut &mglut);
  void test4(minigl &mgl, miniglut &mglut);
  void test5(minigl &mgl, miniglut &mglut);
  void test6(minigl &mgl, miniglut &mglut);
  void test7(minigl &mgl, miniglut &mglut);
  void test8(minigl &mgl, miniglut &mglut);
  void test9(minigl &mgl, miniglut &mglut);

 private:
  
  // used for counting frames
  int T0;
  int Frames;

  // which test case is being used
  int testCase;
  
};

#endif
