#pragma once

//! @file Mix/Sound/IController.h
//! @brief サウンドコントローラーインターフェースインクルードファイル

#include "Mix/Sound/IDevice.h"

namespace Mix{ namespace Sound{

	//! @class IController
	//! @brief サウンドコントローラーインターフェース
	class IController : public Mix::Sound::IDevice
	{
	protected:
		//! @brief デストラクタ
		virtual ~IController( void ){};

	public:
		//! @brief ボリュームを取得します
		//! @return ボリュームを返します
		virtual Float32 GetVolume( void ) const = 0;
		//! @brief ボリュームを設定します
		//! @param[in] volume ボリューム( 最小[0.0] 〜 最大[1.0] )
		virtual void SetVolume( Float32 volume ) = 0;

		//! @brief パンポットを取得します
		//! @return パンポットを返します
		virtual Float32 GetPanpot( void ) const = 0;
		//! @brief パンポットを設定します
		//! @param[in] panpot パンポット( 左[-1.0] 〜 中立[0.0] 〜 右[1.0] )
		virtual void SetPanpot( Float32 panpot ) = 0;

		//! @brief 複製できるかどうかを取得します
		//! @return 複製できる場合は True を返します
		virtual Boolean IsCloneable( void ) const = 0;
		//! @brief 自身を複製します
		//! @param[out] ppController 複製したコントローラーを渡す Mix::Sound::IController インターフェースのポインタのアドレス
		virtual Boolean Clone( Mix::Sound::IController** ppController ) = 0;
	};

}}
