#ifndef DOOMRENDERHDR
#define DOOMRENDERHDR
#include <windows.h>
#include "types.h"
#include "Wad.h"
class Renderer
{
private:
// Pointers to double buffer info and address.
HWND ghWnd;
BITMAPINFO * BitMapInfo ;
HBITMAP DblBuff;
unsigned char * DoubleBuffer;
// Game map related stuff.
GameWad *WadFile;
Vertex *VerticesCache;
short ViewerHeight;
short ViewerAngle;
short ViewerX;
short ViewerY;
// Trig tables used in rendering.
long SinTable[8192];
long CosTable[8192];
long TanTable[8192];
short colangle[640];
long invTanTable[2049];
long DeltaTxtTbl[8192];
public:
Renderer( HWND hWnd, GameWad* Wad );
~Renderer( void );
short render(short x, short y);
short changeViewPosn ( short X, short Y, short Angle );
HBITMAP getDIB() { return DblBuff; };
int Save_Pcx(char *filename);
long sin(short Angle);
long cos(short Angle);
long tan(short Angle);
short invTan(long y, long x);
private:
short getSideofLinedef( short X, short Y, short LineDef );
short getSideofCutPlane ( short X, short Y, short Node );
short getSectorfromXY( short X, short Y );
short traverseBSPTree( short RootNode );
short renderSSector( short SSector );
short drawWallTopPegged( short StartX,
short StartY,
short EndX,
short EndY,
short top,
short bottom,
short Angle,
char* TxtName,
short XOffset,
short YOffset,
long Pdist,
long BOffset );
short drawWallBtmPegged( short StartX,
short StartY,
short EndX,
short EndY,
short top,
short bottom,
short Angle,
char* TxtName,
short XOffset,
short YOffset,
long Pdist,
long BOffset );
short drawFlat( unsigned short StartSeg,
unsigned short numSegs,
short Height );
short initTables(void);
void init_double_buffer(void);
void clearToColor(char c);
void ChangePalette ( short PaletteNbr );
void copyscrn (char *Buffer);
long DistToPoint (long x, long y);
short PointToAngle ( long x, long y );
short CheckBoundingBox ( short UpperX,
short UpperY,
short LowerX,
short LowerY );
};
#endif