////////////////////////////////////////////////////////////////////////////
//	File Name	:	"Messages.h"
//
//	Author		:	Matt DiMatteo (MD)
//
//	Purpose		:	This file contains all messages to be used throught the game.
//
////////////////////////////////////////////////////////////////////////////
#ifndef MESSAGES_H
#define MESSAGES_H

typedef int MSGID;

enum eMsgTypes { MSG_NULL = 0, MSG_CREATE_ITEM, MSG_DESTROY_ITEM, MSG_CREATE_WEAPON, MSG_DESTROY_WEAPON,MSG_MAX };

class CNinja;
class CBattleItem;
class CBase;

class CBaseMessage
{
private:
	MSGID	m_msgID;

public:
	///////////////////////////////////////////////////////////////////
	//	Function:	"CBaseMessage(Constructor)"
	///////////////////////////////////////////////////////////////////
	CBaseMessage(MSGID msgID) {m_msgID = msgID;}

	///////////////////////////////////////////////////////////////////
	//	Function:	"~CBaseMessage(Destructor)"
	///////////////////////////////////////////////////////////////////
	virtual ~CBaseMessage(void) {}

	//////////////////////////////////////
	//	Function:	Accessors
	//	Purpose	:	To get the specified type
	///////////////////////////////////////
	inline MSGID GetMsgID(void)	{ return m_msgID; }
};

class CCreateItem : public CBaseMessage
{
	CNinja* m_pNinja;
public:
	///////////////////////////////////////////////////////////////////
	//	Function:	"CCreateItem(Constructor)"
	///////////////////////////////////////////////////////////////////
	CCreateItem(CNinja* pNinja): CBaseMessage(MSG_CREATE_ITEM){m_pNinja = pNinja;}

	///////////////////////////////////////////////////////////////////
	//	Function:	"~CCreateItem(Destructor)"
	///////////////////////////////////////////////////////////////////
	~CCreateItem(){}

	//////////////////////////////////////
	//	Function:	Accessors
	//	Purpose	:	To get the specified type
	///////////////////////////////////////
	inline CNinja* GetNinja() {return m_pNinja;}

};
class CDestroyItem : public CBaseMessage
{
	CBattleItem* m_pItem;
public:
	///////////////////////////////////////////////////////////////////
	//	Function:	"CDestroyItem(Constructor)"
	///////////////////////////////////////////////////////////////////
	CDestroyItem(CBattleItem* item):CBaseMessage(MSG_DESTROY_ITEM){m_pItem = item;}

	///////////////////////////////////////////////////////////////////
	//	Function:	"~CDestroyItem(Destructor)"
	///////////////////////////////////////////////////////////////////
	~CDestroyItem(){}

	//////////////////////////////////////
	//	Function:	Accessors
	//	Purpose	:	To get the specified type
	///////////////////////////////////////
	inline CBattleItem* GetItem() {return m_pItem;}
};
class CCreateWeapon : public CBaseMessage
{
	CNinja* m_pNinja;
public:
	///////////////////////////////////////////////////////////////////
	//	Function:	"CCreateWeapon(Constructor)"
	///////////////////////////////////////////////////////////////////
	CCreateWeapon(CNinja* pNinja): CBaseMessage(MSG_CREATE_WEAPON){m_pNinja = pNinja;}

	///////////////////////////////////////////////////////////////////
	//	Function:	"~CCreateWeapon(Destructor)"
	///////////////////////////////////////////////////////////////////
	~CCreateWeapon(){}

	//////////////////////////////////////
	//	Function:	Accessors
	//	Purpose	:	To get the specified type
	///////////////////////////////////////
	inline CNinja* GetNinja() {return m_pNinja;}

};
class CDestroyWeapon : public CBaseMessage
{
	CBase* m_pWeapon;
public:
	///////////////////////////////////////////////////////////////////
	//	Function:	"CDestroyWeapon(Constructor)"
	///////////////////////////////////////////////////////////////////
	CDestroyWeapon(CBase* weapon):CBaseMessage(MSG_DESTROY_WEAPON){m_pWeapon = weapon;}

	///////////////////////////////////////////////////////////////////
	//	Function:	"~CDestroyWeapon(Destructor)"
	///////////////////////////////////////////////////////////////////
	~CDestroyWeapon(){}

	inline CBase* GetWeapon() {return m_pWeapon;}

};
#endif
