DONUTS.H

/*========================================================================== 
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: donuts.h
* Content: main include file
*
*@@BEGIN_MSINTERNAL
* History:
* Date By Reason
* ==== == ======
* 12-jul-95 kylej Initial Creation
* 15-sep-97 t-craigs Multimon
*@@END_MSINTERNAL
*
***************************************************************************/

#ifndef DONUTS_INCLUDED
#define DONUTS_INCLUDED

//#define USE_DSOUND

#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <mmsystem.h>
#include <ddraw.h>

#ifdef USE_DSOUND
#include <dsound.h>
#endif

#include "resource.h"
#include "ddutil.h"
#include "input.h"
#include "util.h"
#include "monitor.h"

#ifdef USE_DSOUND
#include "dsutil.h"
#endif


#define DEF_SHOW_DELAY (2000)


// program states
enum
{
PS_SPLASH,
PS_ACTIVE,
PS_BEGINREST,
PS_REST
};




class CObject
{
public:
CObject( int nMaxFrame, int nSize );

int GetMonitorX();
int GetMonitorY();
void UpdateRect();
void Blt();
BOOL CheckPosition( DWORD tickDiff );
void DeleteFromList();

// virtual fcts
virtual void Init( double x, double y );
virtual BOOL CheckFrame();
virtual void UpdateFrame( DWORD tickDiff );
virtual BOOL CanBeBullet() { return FALSE; };
virtual BOOL CanBeTarget() { return FALSE; };

// pure virtual - must be implemented by derived classes
virtual void UpdateSrcRect() = 0;
virtual int Hit( double l, double t ) = 0;

virtual LPDIRECTDRAWSURFACE GetSurface() = 0;

// constants
int km_iMaxFrame;
int km_iSize;

// data
CObject*next;
CObject*prev;
double posx, posy; // actual x and y position
double velx, vely; // x and y velocity (pixels/millisecond)
double frame; // current frame
double delay;
RECT src, dst;
intiMonitor;
};

class CDonut : public CObject
{
public:
CDonut();

virtual void UpdateSrcRect();
virtual LPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init( double x, double y );
virtual BOOL CanBeTarget() { return TRUE; };
};

class CPyramid : public CObject
{
public:
CPyramid();

virtual void UpdateSrcRect();
virtual LPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init( double x, double y );
virtual BOOL CanBeTarget() { return TRUE; };
};

class CCube : public CObject
{
public:
CCube();

virtual void UpdateSrcRect();
virtual LPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init( double x, double y );
virtual BOOL CanBeTarget() { return TRUE; };
};

class CSphere : public CObject
{
public:
CSphere();

virtual void UpdateSrcRect();
virtualLPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init( double x, double y );
virtual BOOL CanBeTarget() { return TRUE; };
};

class CShip : public CObject
{
public:
CShip();

virtual void UpdateSrcRect();
virtual LPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init();
virtual void UpdateFrame( DWORD tickDiff );
virtual BOOL CanBeBullet() { return TRUE; };

BOOLlastShield;
};

class CBullet : public CObject
{
enum {
BULLET_X = 304,
BULLET_Y = 0
};
public:
CBullet();

virtual void UpdateSrcRect();
virtual LPDIRECTDRAWSURFACE GetSurface();
virtual int Hit( double l, double t );

virtual void Init( double x, double y );
virtual BOOL CheckFrame();
virtual BOOL CanBeBullet() { return TRUE; };
};



/*
* fn prototypes
*/
voidAppPause(void);
voidAppUnpause(void);
voidCheckOneMenuItem(HMENU hmenu, UINT idc, BOOL fCheck);
voidCheckMenuItems(HWND hwnd);

BOOLInitApplication( HANDLE hInstance, int nCmdShow );
BOOLInitializeGame( void );
voidInitLevel( int level );
voidSetupGame();

voidUpdateFrame( void );
voidUpdateDisplayList( void );
voidCheckForHits( void );
voidDrawDisplayList( void );

voidDisplayFrameRate( void );
voidDisplayLevel( void );
voidBltScore( char *num, int x, int y );
voidBltSplash( void );
BOOLEraseScreen( void );
BOOL FlipScreen( void );
BOOLCleanupAndExit( char *err );
BOOLCleanupAndExit( char *err, HRESULT ddrval );

#ifdef USE_DSOUND
voidPlayPanned(HSNDOBJ hSO, double posx);
voidInitializeSound( void );
voidDestroySound( void );
#endif

#endif