#pragma once

//! @file Mix/Dynamics/IObjectListener.h
//! @brief オブジェクトリスナーインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Dynamics{

	//! @class IObjectListener
	//! @brief オブジェクトリスナーインターフェース
	class IObjectListener : public Mix::Reference
	{
	protected:
		//! @brief デストラクタ
		virtual ~IObjectListener( void ){}

	public:
		//! @brief オブジェクトがワールドに追加された際に呼び出されます
		//! @param[in] pObject ワールドに追加されたオブジェクトを表す Mix::Dynamics::IObject インターフェースのポインタ
		//! @param[in] pWorld オブジェクトが追加されたワールドを表す Mix::Dynamics::IWorld インターフェースのポインタ
		virtual void OnAddedToWorld( Mix::Dynamics::IObject* pObject, Mix::Dynamics::IWorld* pWorld ) = 0;
		//! @brief オブジェクトがワールドから削除された際に呼び出されます
		//! @param[in] pObject ワールドから削除されたオブジェクトを表す Mix::Dynamics::IObject インターフェースのポインタ
		//! @param[in] pWorld オブジェクトが削除されたワールドを表す Mix::Dynamics::IWorld インターフェースのポインタ
		virtual void OnRemovedFromWorld( Mix::Dynamics::IObject* pObject, Mix::Dynamics::IWorld* pWorld ) = 0;

		//! @brief オブジェクトが接触している際に呼び出されます
		//! @param[in] pObject このリスナーが設定されているオブジェクトを表す Mix::Dynamics::IObject インターフェースのポインタ
		//! @param[in] manifold マニフォールドを表す Mix::Dynamics::MANIFOLD 構造体
		virtual void OnContact( Mix::Dynamics::IObject* pObject, const Mix::Dynamics::MANIFOLD& manifold ) = 0;
	};

}}
