
#pragma once
#ifndef AI_MOODS_HPP
#define AI_MOODS_HPP

#include "AI.hpp"
#pragma warning (push)
#include <stlport\vector>
#include <stlport\string>
#pragma warning (pop)



namespace MW4AI
{
	namespace Moods
	{
		enum ID				// NOTE: the keywords and constants here must exactly match those in MWCONST.ABI
		{
			DESPERATE_START		= 1,	// change MOODMIN in Adept\AI.hpp if you change this
			DESPERATE_END		= 2,
			DEFENSIVE_START		= 3,
			DEFENSIVE_END		= 4,
			NEUTRAL_START		= 5,
			NEUTRAL_END			= 6,
			AGRESSIVE_START		= 7,
			AGRESSIVE_END		= 8,
			BRUTAL_START		= 9,
			BRUTAL_END			= 10	// change MOODMAX in Adept\AI.hpp if you change this
		};

		class Mood
		{
		  public:
			virtual std::string GetName() const = 0;
			virtual ~Mood() {};
		};

		Stuff::Auto_Ptr<Mood> CreateMood(ID mood);
		void VerifyMood(ID mood);

		#define BEGINDEF_MOOD(classname,stringname)	\
			class classname							\
				: public Mood						\
			{										\
			  public:								\
				std::string GetName() const { return (stringname); }			\

		#define ENDDEF_MOOD	};


		BEGINDEF_MOOD(Desperate,"DESPERATE")
		ENDDEF_MOOD

		BEGINDEF_MOOD(Defensive,"DEFENSIVE")
		ENDDEF_MOOD

		BEGINDEF_MOOD(Neutral,"NEUTRAL")
		ENDDEF_MOOD

		BEGINDEF_MOOD(Aggressive,"AGGRESSIVE")
		ENDDEF_MOOD

		BEGINDEF_MOOD(Brutal,"BRUTAL")
		ENDDEF_MOOD


		#undef BEGINDEF_MOOD
		#undef ENDDEF_MOOD
	};
};



#endif // AI_MOODS_HPP