#pragma once

//! @file Mix/Scene/IRendererObject.h
//! @brief レンダラーオブジェクトインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Scene{

	//! @class IRendererObject
	//! @brief レンダラーオブジェクトインターフェースインクルードファイル
	class IRendererObject : public Mix::Reference
	{
	public:
		//! @enum TYPE
		//! @brief タイプ列挙定数
		enum TYPE
		{
			UNDEFINED			= 0,	//!< 定義されていないレンダラーオブジェクト
			UNIVERSAL_CAMERA	= 1,	//!< ユニバーサルカメラ
			VIEW_CAMERA			= 2,	//!< ビューカメラ
			HEMISPHERE_LIGHT	= 3,	//!< ヘミスフィアライト
			DIRECTIONAL_LIGHT	= 4,	//!< ディレクショナルライト
			SPOT_LIGHT			= 5,	//!< スポットライト
			POINT_LIGHT			= 6,	//!< ポイントライト
			SKY_DOME			= 7,	//!< スカイドーム
			ATMOSPHERE_SCATTER	= 8,	//!< 大気スキャッター
			LIGHT_SHAFTS_CASTER	= 9,	//!< ライトシャフトキャスター
			ACTOR_NODE			= 10,	//!< アクターノード
			ACTOR_MODEL			= 11,	//!< アクターモデル
			TERRAIN_MODEL		= 12,	//!< テラインモデル
			LEAVING_PARTICLE	= 13,	//!< リービングパーティクル
			SCATTER_PARTICLE	= 14,	//!< スキャッターパーティクル
			PLANTER				= 15,	//!< プランター
			WATER_POOL			= 16,	//!< ウォータープール
			DYNAMICS_WORLD		= 17,	//!< ダイナミクスワールド
			FLOOR				= 18,	//!< フロア
			GHOST				= 19,	//!< ゴースト
		};

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

	public:
		//! @brief 種類を取得します
		//! @return 種類タイプを表す Mix::Scene::IRendererObject::TYPE 列挙定数を返します
		virtual Mix::Scene::IRendererObject::TYPE GetType( void ) const = 0;
		//! @brief レンダリングされているかどうかを確認します。
		//! @return レンダリングされている場合は True を返します。
		virtual Boolean IsRendering( void ) const = 0;
	};

}}
