/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


#ifndef	__NSCENE_MESSAGE__
#define	__NSCENE_MESSAGE__


		#include "messaging/messaging.h"


namespace GS {
	namespace S3D {
		class Scene;

/*
	@short	Scene message enum.
	@author	Emmanuel Julien (ejulien@gsworks.fr)
*/
enum SceneMessage
{
	SceneMsg_None						=	0,		///< No message.

	SceneMsg_AddingItem,
	SceneMsg_ItemAdded,
	SceneMsg_DeletingItem,
	SceneMsg_ItemDeleted,

	SceneMsg_AddingGroup,
	SceneMsg_GroupAdded,
	SceneMsg_DeletingGroup,
	SceneMsg_GroupDeleted,

	SceneMsg_Clearing,
	SceneMsg_Cleared,
	SceneMsg_Loading,
	SceneMsg_Loaded,

	SceneMsg_LastMessage
};

/*
	@short	Scene message return value.
	@author	Emmanuel Julien (ejulien@gsworks.fr)
*/
enum SceneReturnValue
{
	SceneReturn_Ok		=	0
};

/// Scene listener.
struct	SceneListener
{
virtual	SceneReturnValue ProcessMessage(SceneMessage, const Scene *, const void *) = 0;
};

extern Messaging::Broadcaster <SceneMessage, SceneListener, Scene *> g_scene_messenger;

	} // S3D
} // GS


#endif	// __NSCENE_MESSAGE__
