#pragma once

//! @file "Mix/Scene/IActorListener.h"
//! @brief アクターリスナインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Scene{

	//! @class IActorListener
	//! @brief アクターリスナーインターフェース
	class IActorListener : public Mix::Reference
	{
	public:
		//! @struct RT_SPACE_EVENT_ARGS
		//! @brief ルートトランスフォーム : 空間イベントデータ構造体
		struct RT_SPACE_EVENT_ARGS
		{
			Mix::Quaternion pose; //!< 前方を向いている姿勢を表す Mix::Quaternion クラス
		};

		//! @struct RT_APPLY_EVENT_ARGS
		//! @brief ルートトランスフォーム : 適用イベントデータ構造体
		struct RT_APPLY_EVENT_ARGS
		{
			Mix::Quaternion angularVelocity;	//!< 回転速度を表す Mix::Quaternion クラス
			Mix::Vector3 linearVelocity;		//!< 移動速度を表す Mix::Vector3 クラス
		};

	public:
		//! @brief デストラクタ
		virtual ~IActorListener( void ) {}

	public:
		//! @brief ルートトランスフォームの空間を問い合わせる際に呼び出されます
		//! @param[in] pOwner このハンドラを呼び出したアクターモデルを表す Mix::Scene::IActorModel インターフェースのポインタのアドレス
		//! @param[in] args 提供されたデータを表す Mix::Scene::IActorListener::RT_SPACE_EVENT_ARGS 構造体
		virtual void OnRTQuerySpace( Mix::Scene::IActorModel* pOwner, Mix::Scene::IActorListener::RT_SPACE_EVENT_ARGS& args ) = 0;

		//! @brief ルートトランスフォームを適用する前に呼び出されます
		//! @param[in] pOwner このハンドラを呼び出したアクターモデルを表す Mix::Scene::IActorModel インターフェースのポインタのアドレス
		//! @param[in] args 提供されたデータを表す Mix::Scene::IActorListener::RT_APPLY_EVENT_ARGS 構造体
		virtual void OnRTPreApply( Mix::Scene::IActorModel* pOwner, Mix::Scene::IActorListener::RT_APPLY_EVENT_ARGS& args ) = 0;
	};

}}
