1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: anim_AnimResult.h 4 5 Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain proprietary 8 information of Nintendo and/or its licensed developers and are protected by 9 national and international copyright laws. They may not be disclosed to third 10 parties or copied or duplicated in any form, in whole or in part, without the 11 prior written consent of Nintendo. 12 13 The content herein is highly confidential and should be handled accordingly. 14 15 $Revision: 31311 $ 16 *---------------------------------------------------------------------------*/ 17 18 #ifndef NW_ANIM_ANIMRESULT_H_ 19 #define NW_ANIM_ANIMRESULT_H_ 20 21 #include <nw/types.h> 22 #include <nw/ut/ut_Flag.h> 23 #include <nw/gfx/gfx_CalculatedTransform.h> 24 25 namespace nw { 26 namespace anim { 27 28 //--------------------------------------------------------------------------- 29 //! @brief アニメーション結果のクラスです。 30 //--------------------------------------------------------------------------- 31 class AnimResult 32 { 33 public: 34 //! フラグの定義です。 35 enum Flags 36 { 37 FLAG_VALID_COMPONENT0_SHIFT = 0, //!< @details :private 38 FLAG_VALID_COMPONENT1_SHIFT = 1, //!< @details :private 39 FLAG_VALID_COMPONENT2_SHIFT = 2, //!< @details :private 40 FLAG_VALID_COMPONENT3_SHIFT = 3, //!< @details :private 41 FLAG_CONVERTED_SHIFT = 30, //!< @details :private 42 43 //! 0 番目の成分のアニメーションが有効なら 1 となります。 44 FLAG_VALID_COMPONENT0 = 0x1 << FLAG_VALID_COMPONENT0_SHIFT, 45 46 //! 1 番目の成分のアニメーションが有効なら 1 となります。 47 FLAG_VALID_COMPONENT1 = 0x1 << FLAG_VALID_COMPONENT1_SHIFT, 48 49 //! 2 番目の成分のアニメーションが有効なら 1 となります。 50 FLAG_VALID_COMPONENT2 = 0x1 << FLAG_VALID_COMPONENT2_SHIFT, 51 52 //! 3 番目の成分のアニメーションが有効なら 1 となります。 53 FLAG_VALID_COMPONENT3 = 0x1 << FLAG_VALID_COMPONENT3_SHIFT, 54 55 //! 操作空間に変換されていれば 1 となります。 56 FLAG_CONVERTED = 0x1 << FLAG_CONVERTED_SHIFT 57 }; 58 59 //! 最大成分数です。 60 enum { MAX_COMPONENTS = 4 }; 61 62 //---------------------------------------- 63 //! @name コンストラクタ/デストラクタ 64 //@{ 65 66 //! コンストラクタです。 AnimResult()67 AnimResult() 68 : m_Flags(0) {} 69 70 //! デストラクタです。 ~AnimResult()71 virtual ~AnimResult() {} 72 73 //@} 74 75 //---------------------------------------- 76 //! @name 取得/設定 77 //@{ 78 79 //! フラグの値を直接取得します。 GetFlags()80 bit32 GetFlags() const { return m_Flags; } 81 82 //! フラグの値を直接設定します。 SetFlags(bit32 flags)83 void SetFlags(bit32 flags) { m_Flags = flags; } 84 85 //! フラグが有効になっているか取得します。 IsEnabledFlags(bit32 flags)86 bool IsEnabledFlags(bit32 flags) const { return ut::CheckFlag(m_Flags, flags); } 87 88 //! フラグを有効に設定します。 EnableFlags(bit32 flags)89 void EnableFlags(bit32 flags) { m_Flags = ut::EnableFlag(m_Flags, flags); } 90 91 //! フラグを無効に設定します。 DisableFlags(bit32 flags)92 void DisableFlags(bit32 flags) { m_Flags = ut::DisableFlag(m_Flags, flags); } 93 94 //! フラグの有効/無効を設定します。 EnableFlags(bit32 flags,bool enable)95 void EnableFlags(bit32 flags, bool enable) 96 { 97 if (enable) 98 { 99 m_Flags |= flags; 100 } 101 else 102 { 103 m_Flags &= ~flags; 104 } 105 } 106 107 //! 全てのフラグを無効に設定します。 ResetFlags()108 void ResetFlags() { m_Flags = 0; } 109 110 //! 値バッファを取得します。 GetValueBuffer()111 const void* GetValueBuffer() const { return m_ValueBuf; } 112 113 //! 値バッファを取得します。 GetValueBuffer()114 void* GetValueBuffer() { return m_ValueBuf; } 115 116 //! オブジェクトの先頭から値バッファまでのオフセットをバイト数で取得します。 GetOffsetToValueBuffer()117 int GetOffsetToValueBuffer() const 118 { 119 return reinterpret_cast<const u8*>(GetValueBuffer()) - 120 reinterpret_cast<const u8*>(this); 121 } 122 123 //@} 124 125 private: 126 bit32 m_Flags; 127 128 // ResMemberAnim::GetPrimitiveSize() の最大値以上のサイズの領域 129 float m_ValueBuf[(sizeof(gfx::CalculatedTransform) + sizeof(float) - 1) / sizeof(float)]; 130 }; 131 132 } /* namespace anim */ 133 } /* namespace nw */ 134 135 #endif /* NW_ANIM_ANIMRESULT_H_ */ 136