/*---------------------------------------------------------------------------* Project: NintendoWare File: anim_AnimResult.h Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: 31311 $ *---------------------------------------------------------------------------*/ #ifndef NW_ANIM_ANIMRESULT_H_ #define NW_ANIM_ANIMRESULT_H_ #include #include #include namespace nw { namespace anim { //--------------------------------------------------------------------------- //! @brief アニメーション結果のクラスです。 //--------------------------------------------------------------------------- class AnimResult { public: //! フラグの定義です。 enum Flags { FLAG_VALID_COMPONENT0_SHIFT = 0, //!< @details :private FLAG_VALID_COMPONENT1_SHIFT = 1, //!< @details :private FLAG_VALID_COMPONENT2_SHIFT = 2, //!< @details :private FLAG_VALID_COMPONENT3_SHIFT = 3, //!< @details :private FLAG_CONVERTED_SHIFT = 30, //!< @details :private //! 0 番目の成分のアニメーションが有効なら 1 となります。 FLAG_VALID_COMPONENT0 = 0x1 << FLAG_VALID_COMPONENT0_SHIFT, //! 1 番目の成分のアニメーションが有効なら 1 となります。 FLAG_VALID_COMPONENT1 = 0x1 << FLAG_VALID_COMPONENT1_SHIFT, //! 2 番目の成分のアニメーションが有効なら 1 となります。 FLAG_VALID_COMPONENT2 = 0x1 << FLAG_VALID_COMPONENT2_SHIFT, //! 3 番目の成分のアニメーションが有効なら 1 となります。 FLAG_VALID_COMPONENT3 = 0x1 << FLAG_VALID_COMPONENT3_SHIFT, //! 操作空間に変換されていれば 1 となります。 FLAG_CONVERTED = 0x1 << FLAG_CONVERTED_SHIFT }; //! 最大成分数です。 enum { MAX_COMPONENTS = 4 }; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! コンストラクタです。 AnimResult() : m_Flags(0) {} //! デストラクタです。 virtual ~AnimResult() {} //@} //---------------------------------------- //! @name 取得/設定 //@{ //! フラグの値を直接取得します。 bit32 GetFlags() const { return m_Flags; } //! フラグの値を直接設定します。 void SetFlags(bit32 flags) { m_Flags = flags; } //! フラグが有効になっているか取得します。 bool IsEnabledFlags(bit32 flags) const { return ut::CheckFlag(m_Flags, flags); } //! フラグを有効に設定します。 void EnableFlags(bit32 flags) { m_Flags = ut::EnableFlag(m_Flags, flags); } //! フラグを無効に設定します。 void DisableFlags(bit32 flags) { m_Flags = ut::DisableFlag(m_Flags, flags); } //! フラグの有効/無効を設定します。 void EnableFlags(bit32 flags, bool enable) { if (enable) { m_Flags |= flags; } else { m_Flags &= ~flags; } } //! 全てのフラグを無効に設定します。 void ResetFlags() { m_Flags = 0; } //! 値バッファを取得します。 const void* GetValueBuffer() const { return m_ValueBuf; } //! 値バッファを取得します。 void* GetValueBuffer() { return m_ValueBuf; } //! オブジェクトの先頭から値バッファまでのオフセットをバイト数で取得します。 int GetOffsetToValueBuffer() const { return reinterpret_cast(GetValueBuffer()) - reinterpret_cast(this); } //@} private: bit32 m_Flags; // ResMemberAnim::GetPrimitiveSize() の最大値以上のサイズの領域 float m_ValueBuf[(sizeof(gfx::CalculatedTransform) + sizeof(float) - 1) / sizeof(float)]; }; } /* namespace anim */ } /* namespace nw */ #endif /* NW_ANIM_ANIMRESULT_H_ */