#pragma once
#pragma once

//! @file Mix/Scene/IGhost.h
//! @brief ゴーストインターフェースインクルードファイル

#include "Mix/Scene/IRendererObject.h"

namespace Mix{ namespace Scene{

	//! @class IFloor
	//! @brief フロアインターフェース
	class IFloor : public Mix::Scene::IRendererObject
	{
	protected:
		//! @brief デストラクタ
		virtual ~IFloor( void ) {}

	public:
		//! @brief ダイナミクスオブジェクトを取得します
		//! @param[out] ppDynamicsObject 取得したダイナミクスオブジェクトを渡す Mix::Scene::IDynamicsObject インターフェースのポインタのアドレス
		//! @return 取得に成功した場合は True を返します
		//! @note
		//! 取得したダイナミクスオブジェクト( Mix::Scene::ISimpleCollider )の参照カウンタを +1 します。<br>
		virtual Boolean GetDynamicsObject( Mix::Scene::IDynamicsObject** ppDynamicsObject ) = 0;

		//! @brief ワールドの回転を取得します
		//! @return 回転を表す Mix::Quaternion クラスを返します
		virtual Mix::Quaternion GetWorldRotation( void ) const = 0;
		//! @brief ワールドの回転を設定します
		//! @param[in] rot 回転を表す Mix::Quaternion クラス
		virtual void SetWorldRotation( const Mix::Quaternion& rot ) = 0;

		//! @brief ユーザーインデックスを取得します
		//! @return インデックスを返します
		virtual Int32 GetUserIndex( void )  const = 0;
		//! @brief ユーザーインデックスを設定します
		//! @param index インデックス
		//! @note この値はユーザーが自由に使用できます
		virtual void SetUserIndex( Int32 index ) = 0;

		//! @brief ユーザーポインタを取得します
		//! @return ポインタを返します
		virtual void* GetUserPtr( void ) const = 0;
		//! @brief ユーザーポインタを設定します
		//! @param pData ポインタ
		//! @note この値はユーザーが自由に使用できます
		virtual void SetUserPtr( void* pData ) = 0;

		//! @brief ワイヤーフレームのラインの間隔を取得します
		//! @return ラインの間隔を返します
		virtual Float32 Debug_GetDrawInterval( void ) const = 0;
		//! @brief ワイヤーフレームのラインの間隔を設定します
		//! @param[in] interval ラインの間隔
		virtual void Debug_SetDrawInterval( Float32 interval ) = 0;

		//! @brief ワイヤーフレームの広さを取得します
		//! @return 広さを返します
		virtual UInt32 Debug_GetDrawExtent( void ) const = 0;
		//! @brief ワイヤーフレームの広さを設定します
		//! @param[in] extent 広さ
		//! @note 実際の広さ( ラインの間隔 * ( 広さ + 1 ) )になります
		virtual void Debug_SetDrawExtent( UInt32 extent ) = 0;
	};

}}
