#ifndef GAMEMYPROJECT
#define GAMEMYPROJECT

/*
	The gamemyproject.* files are meant to be a possible starting point for your games.  Alter the
	gamemyproject.* files freely.  
	In the code below, we put the word virtual in front of all the methods that we have
	inherited from the base classes and which we plan to overload.  (These methods were
	already declared as virtual in the base classes, so that our overloads can take effect.
	Declaring them virtual in this child class only means that they could be further overloaded 
	in the children of the child.)
*/

#include "game.h"
#include "critterarmed.h"

//=== cGameMyProject Critters ====================================

class cCritterMyProjectPlayer : public cCritterArmedPlayer //Our player.
{
DECLARE_SERIAL(cCritterMyProjectPlayer);
public:
	cCritterMyProjectPlayer(cGame *pownergame = NULL);
//overloads
	virtual void reset();
	virtual int damage(int hitstrength);
	virtual BOOL collide(cCritter *pcritter); 
	virtual void update(CPopView *pactiveview, Real dt);
	virtual cCritterBullet* shoot();
//	virtual void setWrapflag(int wrapflag){}//Don't allow _wrapflag to change from cCritter::BOUNCE.
};

class cCritterMyProjectPlayerBullet : public cCritterBullet
{
DECLARE_SERIAL(cCritterMyProjectPlayerBullet);
public:
	cCritterMyProjectPlayerBullet();
	virtual void update(CPopView *pactiveview, Real dt);
};

class cCritterMyProjectRival : public cCritterArmedRobot //Or just a cCritter if not shooting
{
DECLARE_SERIAL(cCritterMyProjectRival);
public:
	cCritterMyProjectRival(cGame *pownergame = NULL); /* The defualt arg
		means this defines a no-arg constructor as well.*/
//overloads
	virtual int damage(int hitstrength);
	virtual BOOL collide(cCritter *pcritter); 
	virtual void update(CPopView *pactiveview, Real dt);
};

	/* The cCritterBulletSilver only can damage the ptarget of the
	shooter.   */
class cCritterMyProjectRivalBullet : public cCritterBulletSilver
{
DECLARE_SERIAL(cCritterMyProjectRivalBullet);
public:
	cCritterMyProjectRivalBullet();
	virtual void initialize(cCritterArmed *pshooter);
};

class cCritterMyProjectProp : public cCritter
{
DECLARE_SERIAL(cCritterMyProjectProp);
public:
	cCritterMyProjectProp(cGame *pownergame = NULL); 
//overloads
	virtual int damage(int hitstrength);
	virtual BOOL collide(cCritter *pcritter); 
	virtual void update(CPopView *pactiveview, Real dt);
};

//======================= cGameMyProject ================


class cGameMyProject : public cGame
{
DECLARE_SERIAL(cGameMyProject);
//Name your statics here
static int PLAYERHEALTH;
static int DEFAULTRIVALCOUNT;
static int DEFAULTSEEDCOUNT;
private:
	int _rivalcount; //possible param, don't have to use it.
public:
	cGameMyProject();
 //overloads
	virtual void Serialize(CArchive& ar); //Overload for _rivalcount
	virtual void reset();
	virtual void adjustGameParameters();
	virtual CString statusMessage();
	virtual void initializeView(CPopView *pview);
	virtual void initializeViewpoint(cCritterViewer *pviewer); //To change the default view direction.
	virtual void seedCritters();
};

#endif //GAMEMYPROJECT