#pragma once

//! @file Mix/Scene/IMotionState.h
//! @brief モーションステートインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Scene{

	//! @class IMotionState
	//! @brief モーションステートインターフェース
	class IMotionState : public Mix::Reference
	{
	protected:
		//! @brief デストラクタ
		virtual ~IMotionState( void ) {}

	public:
		//! @brief スピードを設定します
		//! @param[in] speed スピード( 0.0f〜正の無限大 )
		virtual void SetSpeed( Float32 speed ) = 0;
		//! @brief スピードを取得します
		//! @return スピードを返します
		virtual Float32 GetSpeed( void ) const = 0;

		//! @brief ブレンド率を設定します
		//! @param[in] blendRatio ブレンド率( 0.0f〜1.0f )
		virtual void SetBlendRatio( Float32 blendRatio ) = 0;
		//! @brief ブレンド率を取得します
		//! @return ブレンド率を返します
		virtual Float32 GetBlendRatio( void ) const = 0;

		//! @brief フレームを取得します
		//! @return フレームを返します
		virtual Float32 GetFrame( void ) const = 0;

		//! @brief ループ数を取得します
		//! @return ループ数を返します
		virtual UInt32 GetLoopCount( void ) const = 0;

		//! @brief 状態を取得します
		//! @return 状態を表す Mix::Scene::MOTION_CONDITION_FLAG 列挙定数の組み合わせを返します
		virtual UInt32 GetCondition( void ) const = 0;

		//! @brief 移行率を取得します
		//! @return 移行率( 0.0f〜1.0f )を返します
		virtual Float32 GetTransitionRatio( void ) const = 0;
	};

}}
