
#include "poly.h"

//---- POLYGON CLASS ---------------------------------------------------------//

Poly::Poly()
{
  numpoints = 0;
  p = new float[POLY_MAX_POINTS][2];
}

Poly::~Poly()
{
  delete[] p;
}

void Poly::begin( )
{
  numpoints = 0;
}

void Poly::end( )
{
}

void Poly::addPoint( float x, float y )
{
  p[ numpoints ][0] = x;
  p[ numpoints ][1] = y;
  numpoints ++;
}

void Poly::getScanline( Scanline *sl, int y )
{
  sl->clear();

  //- Work out which edges this scanline intersects

  for( int i=0; i<numpoints; i++ )
  {
    int ii=(i+1)%numpoints;

    if( p[i][1] <= y && p[ii][1] > y )
    {
      sl->addPoint( p[i][0] + (p[ii][0]-p[i][0]) * (y-p[i][1]) / (p[ii][1]-p[i][1]) );
    }
    else if( p[ii][1] <= y && p[i][1] > y )
    {
      sl->addPoint( p[i][0] + (p[ii][0]-p[i][0]) * (y-p[i][1]) / (p[ii][1]-p[i][1]) );
    }
  }
}

void Poly::render( Image *im, int col )
{
  int i, j;

  Scanline sl;

  for( j=0; j<im->h; j++ )
  {
    getScanline( &sl, j );
    im->drawScanline( j, &sl, col );
  }
}




