#ifndef ERK_COMMAND_H
#define ERK_COMMAND_H

class erkCommand {
public:
								erkCommand();
	virtual						~erkCommand();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();
	virtual void				Collision(gbBool bSide);

	virtual void				SetSide(gbBool bSide);
	virtual void				SetTile(class erkTile* pTile);

	virtual gbBool				GetSide();
	virtual class erkTile*		GetTile();

protected:
	gbBool						m_bSide;
	class erkTile*				m_pTile;

};
typedef erkCommand *erkCommand_p;

class erkCmdNorth : public erkCommand {
public:
								erkCmdNorth();
	virtual						~erkCmdNorth();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

protected:

};
typedef erkCmdNorth *erkCmdNorth_p;

class erkCmdEast : public erkCommand {
public:
								erkCmdEast();
	virtual						~erkCmdEast();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

protected:

};
typedef erkCmdEast *erkCmdEast_p;

class erkCmdSouth : public erkCommand {
public:
								erkCmdSouth();
	virtual						~erkCmdSouth();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

protected:

};
typedef erkCmdSouth *erkCmdSouth_p;

class erkCmdWest : public erkCommand {
public:
								erkCmdWest();
	virtual						~erkCmdWest();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

protected:

};
typedef erkCmdWest *erkCmdWest_p;

class erkCmdClear : public erkCommand {
public:
								erkCmdClear();
	virtual						~erkCmdClear();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Collision(gbBool bSide);

	virtual void				SetClearType(class erkTileType* pType);

protected:
	gbInt						m_dwHealth;
	class erkTileType*			m_pClearTo;

};
typedef erkCmdClear *erkCmdClear_p;

class erkCmdTrainer : public erkCommand {
public:
								erkCmdTrainer();
	virtual						~erkCmdTrainer();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

	virtual void				SetTrainerType(class erkTileType* pType);

protected:
	gbInt						m_dwHealth;
	class erkTileType*			m_pSetTo;

};
typedef erkCmdTrainer *erkCmdTrainer_p;

class erkCmdHive : public erkCommand {
public:
								erkCmdHive();
	virtual						~erkCmdHive();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

	virtual void				SetHiveType(class erkTileType* pType);

protected:
	gbInt						m_dwHealth;
	class erkTileType*			m_pSetTo;

};
typedef erkCmdHive *erkCmdHive_p;

class erkCmdThorns : public erkCommand {
public:
								erkCmdThorns();
	virtual						~erkCmdThorns();

	virtual void				Draw(BITMAP* pDest, gbInt dwX, gbInt dwY);
	virtual void				Update();

	virtual void				SetThornsType(class erkTileType* pType);

protected:
	gbInt						m_dwHealth;
	class erkTileType*			m_pSetTo;

};
typedef erkCmdThorns *erkCmdThorns_p;

#endif // ERK_COMMAND_H
