#pragma once

//! @file Mix/Sound/IListener.h
//! @brief リスナーインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Sound{

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

	public:
		//! @brief ローカルの前方ベクトルを取得します
		//! @return ローカルの前方ベクトルを表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetLocalFront( void ) const = 0;
		//! @brief ローカルの上方ベクトルを取得します
		//! @return ローカルの上方ベクトルを表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetLocalUp( void ) const = 0;

		//! @brief ワールドの前方ベクトルを取得します
		//! @return ワールドの前方ベクトルを表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetWorldFront( void ) const = 0;
		//! @brief ワールドの上方ベクトルを取得します
		//! @return ワールドの上方ベクトルを表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetWorldUp( void ) const = 0;

		//! @brief ワールド行列を取得します
		//! @return ワールド行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetWorldMatrix( void ) const = 0;
		//! @brief ワールド行列を設定します
		//! @param[in] mat ワールド行列を表す Mix::Matrix4x4 クラス
		virtual void SetWorldMatrix( const Mix::Matrix4x4& mat ) = 0;

		//! @brief 毎秒の移動速度を取得します
		//! @return 毎秒の移動速度を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetVelocity( void ) const = 0;
		//! @brief 毎秒の移動速度を設定します
		//! @param[in] velocity 毎秒の移動速度を表す Mix::Vector3 クラス
		//! @note ドップラー効果に影響を与えます。
		virtual void SetVelocity( const Mix::Vector3& velocity ) = 0;
	};

}}
