/*---------------------------------------------------------------------------* Project: NintendoWare File: anim_ResAnimGroup.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: $ *---------------------------------------------------------------------------*/ #ifndef NW_ANIM_RESANIMATIONGROUP_H_ #define NW_ANIM_RESANIMATIONGROUP_H_ #include #include #include #include #include #include #include namespace nw { namespace gfx { class SkeletalModel; class Model; class Camera; class Light; namespace res { class ResModel; } } } namespace nw { namespace anim { namespace res {} using namespace ::nw::anim::res; namespace res { //! アニメーション対象メンバの情報です。 //! //! ObjectTypeとMemberTypeで、対象メンバを特定します。 //! アニメーション対象のクラスごとに、派生クラス(Res~Member)が存在します。(ObjectTypeと1対1対応) //! 各派生クラスに、アニメーション対象インスタンスを特定するための情報があります。 //! //! :private struct ResAnimGroupMemberData { nw::ut::ResTypeInfo typeInfo; ut::BinString toPath; ut::ResS32 m_MemberOffset; ut::ResS32 m_BlendOperationIndex; ut::ResU32 m_ObjectType; //!< ResAnimGroupMember::ObjectType型の値。派生クラスの型を表す ut::ResU32 m_MemberType; //!< 各派生クラスのMemberType型の値 // TODO: マテリアルのハッシュをクリアするためのハック。 // ハッシュ機構が削除されたら合わせて削除。 ut::ResU32 m_ResMaterialPtr; }; //! @details :private struct ResBoneMemberData : public ResAnimGroupMemberData { ut::BinString toBoneName; }; //! @details :private struct ResMaterialColorMemberData : public ResAnimGroupMemberData { ut::BinString toMaterialName; }; //! @details :private struct ResTextureSamplerMemberData : public ResAnimGroupMemberData { ut::BinString toMaterialName; ut::ResU32 m_TextureMapperIndex; }; //! @details :private struct ResTextureMapperMemberData : public ResAnimGroupMemberData { ut::BinString toMaterialName; ut::ResU32 m_TextureMapperIndex; }; //! @details :private struct ResBlendOperationMemberData : public ResAnimGroupMemberData { ut::BinString toMaterialName; }; //! @details :private struct ResTextureCoordinatorMemberData : public ResAnimGroupMemberData { ut::BinString toMaterialName; ut::ResU32 m_TextureCoordinatorIndex; }; //! @details :private struct ResModelMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResMeshMemberData : public ResAnimGroupMemberData { ut::ResU32 m_MeshIndex; }; //! @details :private struct ResMeshNodeVisibilityMemberData : public ResAnimGroupMemberData { ut::BinString toNodeName; }; //! @details :private struct ResTransformMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResViewUpdaterMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResProjectionUpdaterMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResLightMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResFragmentLightMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResAmbientLightMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResVertexLightMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResHemiSphereLightMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResFogMemberData : public ResAnimGroupMemberData { }; //! @details :private struct ResAnimGroupData { nw::ut::ResTypeInfo typeInfo; ut::ResU32 m_Flags; ut::BinString toName; ut::ResS32 m_TargetType; ut::ResS32 m_MemberInfoSetDicCount; ut::Offset toMemberInfoSetDic; ut::ResS32 m_BlendOperationsTableCount; ut::Offset toBlendOperationsTable; }; //! @details :private struct ResGraphicsAnimGroupData : public ResAnimGroupData { ut::ResS32 m_EvaluationTiming; }; //! @brief アニメーション対象のデータメンバーを書き換えるための情報のリソースクラスです。 //! //! アニメーション対象のオブジェクトと、そのうちのどのメンバーをアニメーションさせるかの情報を持ちます。 //! 各アニメーション対象に応じて、継承先のクラスが定義されています。 //! class ResAnimGroupMember : public ut::ResCommon { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResAnimGroupMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGMB') }; //! アニメーション対象のオブジェクトです。 enum ObjectType { // スケルタルアニメーション OBJECT_TYPE_BONE, // マテリアルアニメーション OBJECT_TYPE_MATERIAL_COLOR, OBJECT_TYPE_TEXTURE_SAMPLER, OBJECT_TYPE_TEXTURE_MAPPER, OBJECT_TYPE_BLEND_OPERATION, OBJECT_TYPE_TEXTURE_COORDINATOR, // ビジビリティアニメーション OBJECT_TYPE_MODEL, OBJECT_TYPE_MESH, OBJECT_TYPE_MESH_NODE_VISIBILITY, // トランスフォームアニメーション OBJECT_TYPE_TRANSFORM, // カメラアニメーション OBJECT_TYPE_VIEW_UPDATER, OBJECT_TYPE_PROJECTION_UPDATER, // ライトアニメーション OBJECT_TYPE_LIGHT, OBJECT_TYPE_FRAGMENT_LIGHT, OBJECT_TYPE_VERTEX_LIGHT, OBJECT_TYPE_HEMISPHERE_LIGHT, OBJECT_TYPE_AMBIENT_LIGHT, // フォグアニメーション OBJECT_TYPE_FOG }; //! オブジェクト中の、どのメンバーをアニメーションさせるかの列挙です。継承先でも定義されます。 enum MemberType { // SetValueで処理が必要ない場合は、この値を使用します。 MEMBER_TYPE_INVALID = 0xFFFFFFFF }; NW_RES_CTOR( ResAnimGroupMember ) //! @name リソースへのアクセス //! @{ //--------------------------------------------------------------------------- //! @fn const char* GetPath() const //! @brief Path 情報を取得します。 //--------------------------------------------------------------------------- NW_RES_FIELD_STRING_DECL( Path ) // GetPath() //--------------------------------------------------------------------------- //! @fn s32 GetMemberOffset() const //! @brief メンバーへのオフセット情報を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetMemberOffset(s32 offset) //! @brief メンバーへのオフセット情報を設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( s32, MemberOffset ) // GetMemberOffset() //--------------------------------------------------------------------------- //! @fn s32 GetBlendOperationIndex() const //! @brief ブレンドオペレーションのインデックス情報を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetBlendOperationIndex(s32 index) //! @brief ブレンドオペレーションのインデックス情報を設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( s32, BlendOperationIndex ) // GetBlendOperationIndex() //--------------------------------------------------------------------------- //! @fn u32 GetObjectType() const //! @brief 派生クラスの型を示すObjectTypeを取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetObjectType(u32 type) //! @brief ObjectTypeを設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( u32, ObjectType ) // GetObjectType() //--------------------------------------------------------------------------- //! @fn u32 GetMemberType() const //! @brief 各派生クラスのMemberTypeを取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetMemberType(u32 type) //! @brief MemberTypeを設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( u32, MemberType ) // GetMemberType() //--------------------------------------------------------------------------- //! @fn u32 GetResMaterialPtr() const //! @brief マテリアルのハッシュをクリアするための参照先ポインタを取得します。 //! @details :private //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetResMaterialPtr(u32 ptr) //! @brief ResMAterialPtrを設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( u32, ResMaterialPtr ) // GetResMaterialPtr() //! @} //! @brief アニメーション対象メンバに値を設定します。 //! @param[in] object AnimGroup::GetTargetObject()の値です。 //! @param[in] value 設定する値です。メンバの種類で型が異なります。派生クラスを参照してください。 void SetValueForType(void* object, const void* value) const; //--------------------------------------------------------------------------- //! @brief リソースの型情報を取得します。 //! //! @return 型情報です。 //--------------------------------------------------------------------------- nw::ut::ResTypeInfo GetTypeInfo() const { return ref().typeInfo; } }; typedef nw::ut::ResArrayPatricia::type ResAnimGroupMemberArray; //!< @details :private typedef nw::ut::ResArrayPatricia::type ResAnimGroupMemberArrayConst; //!< @details :private //! @details :private class ResBoneMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResBoneMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGBM') }; enum MemberType { MEMBER_TYPE_TRANSFORM }; NW_RES_CTOR_INHERIT( ResBoneMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( BoneName ) // GetBoneName() // object: gfx::CalculatedTransform // value: math::Transform3 void SetValue(void* object, const void* value) const; }; //! @details :private class ResMaterialColorMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMaterialColorMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGMC') }; enum MemberType { MEMBER_TYPE_EMISSION, // ResMaterialColor::SetEmission() MEMBER_TYPE_AMBIENT, // ResMaterialColor::SetAmbient() MEMBER_TYPE_DIFFUSE, // ResMaterialColor::SetDiffuse() MEMBER_TYPE_SPECULAR0, // ResMaterialColor::SetSpecular0() MEMBER_TYPE_SPECULAR1, // ResMaterialColor::SetSpecular1() MEMBER_TYPE_CONSTANT0, // ResMaterialColor::SetConstant0() MEMBER_TYPE_CONSTANT1, // ResMaterialColor::SetConstant1() MEMBER_TYPE_CONSTANT2, // ResMaterialColor::SetConstant2() MEMBER_TYPE_CONSTANT3, // ResMaterialColor::SetConstant3() MEMBER_TYPE_CONSTANT4, // ResMaterialColor::SetConstant4() MEMBER_TYPE_CONSTANT5 // ResMaterialColor::SetConstant5() }; NW_RES_CTOR_INHERIT( ResMaterialColorMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() // object: gfx::ResMaterialColorData // value: ut::FloatColor void SetValue(void* object, const void* value) const; }; //! @details :private class ResTextureSamplerMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureSamplerMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGTS') }; enum MemberType { MEMBER_TYPE_BORDER_COLOR // ResStandardTextureSampler::SetBorderColor(), ResPixelBasedTextureMapper::SetSampler() }; NW_RES_CTOR_INHERIT( ResTextureSamplerMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureMapperIndex ) // GetTextureMapperIndex() // object: gfx::ResPixelBasedTextureMapperData // value: ut::FloatColor void SetValue(void* object, const void* value) const; }; //! @details :private class ResTextureMapperMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureMapperMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGTM') }; enum MemberType { MEMBER_TYPE_TEXTURE // ResTextureMapper::SetTexture() }; NW_RES_CTOR_INHERIT( ResTextureMapperMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureMapperIndex ) // GetTextureMapperIndex() // object: gfx::ResPixelBasedTextureMapperData // value: ut::Offset (ResReferenceTextureへの参照) void SetValue(void* object, const void* value) const; }; //! @details :private class ResBlendOperationMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResBlendOperationMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGBO') }; enum MemberType { MEMBER_TYPE_BLEND_COLOR // ResBlendOperation::SetBlendColor() }; NW_RES_CTOR_INHERIT( ResBlendOperationMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() // object: gfx::ResBlendOperationData // value: ut::FloatColor void SetValue(void* object, const void* value) const; }; //! @details :private class ResTextureCoordinatorMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureCoordinatorMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGTC') }; enum MemberType { MEMBER_TYPE_SCALE, // ResTextureCoordinator::SetScale() MEMBER_TYPE_ROTATE, // ResTextureCoordinator::SetRotate() MEMBER_TYPE_TRANSLATE // ResTextureCoordinator::SetTranslate() }; NW_RES_CTOR_INHERIT( ResTextureCoordinatorMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureCoordinatorIndex ) // GetTextureCoordinatorIndex() // object: gfx::ResTextureCoordinatorData // value: // SCALE, TRANSLATE: math::VEC2 // ROTATE: float void SetValue(void* object, const void* value) const; }; //! @details :private class ResModelMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResModelMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGMO') }; enum MemberType { MEMBER_TYPE_BRANCH_VISIBLE, MEMBER_TYPE_VISIBLE }; NW_RES_CTOR_INHERIT( ResModelMember, ResAnimGroupMember ) // object: gfx::ResModelData // value: bool void SetValue(void* object, const void* value) const; }; //! @details :private class ResMeshMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMeshMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGME') }; enum MemberType { MEMBER_TYPE_VISIBLE }; NW_RES_CTOR_INHERIT( ResMeshMember, ResAnimGroupMember ) NW_RES_FIELD_PRIMITIVE_DECL( u32, MeshIndex ) // GetMeshIndex() // object: gfx::ResMeshData // value: bool void SetValue(void* object, const void* value) const; }; //! @details :private class ResMeshNodeVisibilityMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMeshNodeVisibilityMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGND') }; enum MemberType { MEMBER_TYPE_VISIBLE }; NW_RES_CTOR_INHERIT( ResMeshNodeVisibilityMember, ResAnimGroupMember ) NW_RES_FIELD_STRING_DECL( NodeName ) // GetNodeName() // object: gfx::ResMeshNodeVisibilityData // value: bool void SetValue(void* object, const void* value) const; }; //! @details :private class ResTransformMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTransformMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGTF') }; enum MemberType { MEMBER_TYPE_TRANSFORM }; NW_RES_CTOR_INHERIT( ResTransformMember, ResAnimGroupMember ) // object: gfx::TransformNode // value: CalculatedTransform void SetValue(void* object, const void* value) const; }; //! @details :private class ResViewUpdaterMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResViewUpdaterMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGVU') }; enum MemberType { MEMBER_TYPE_TARGET_POSITION, MEMBER_TYPE_TWIST, MEMBER_TYPE_UPWARD_VECTOR, MEMBER_TYPE_VIEW_ROTATE, MEMBER_TYPE_TRANSFORM }; NW_RES_CTOR_INHERIT( ResViewUpdaterMember, ResAnimGroupMember ) // object: gfx::ResCameraViewUpdaterData // value: 多様なので実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResProjectionUpdaterMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResProjectionUpdaterMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGPU') }; enum MemberType { MEMBER_TYPE_NEAR, MEMBER_TYPE_FAR, MEMBER_TYPE_FOVY, MEMBER_TYPE_ASPECT_RATIO, MEMBER_TYPE_HEIGHT, MEMBER_TYPE_CENTER }; NW_RES_CTOR_INHERIT( ResProjectionUpdaterMember, ResAnimGroupMember ) // object: gfx::ResCameraProjectionUpdaterData // value: 多様なので実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResLightMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; enum MemberType { MEMBER_TYPE_IS_LIGHT_ENABLED }; NW_RES_CTOR_INHERIT( ResLightMember, ResAnimGroupMember ) // object: gfx::ResLightData // value: 実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResFragmentLightMember : public ResAnimGroupMember { public: // このクラスは実装上の都合で存在している。 // バイナリにはResLightMember型で格納されている。以下同様。 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; enum MemberType { MEMBER_TYPE_AMBIENT, MEMBER_TYPE_DIFFUSE, MEMBER_TYPE_SPECULAR0, MEMBER_TYPE_SPECULAR1, MEMBER_TYPE_DIRECTION, MEMBER_TYPE_DISTANCE_ATTENUATION_START, MEMBER_TYPE_DISTANCE_ATTENUATION_END }; NW_RES_CTOR_INHERIT( ResFragmentLightMember, ResAnimGroupMember ) // object: gfx::ResFragmentLightData // value: 実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResAmbientLightMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; enum MemberType { MEMBER_TYPE_AMBIENT }; NW_RES_CTOR_INHERIT( ResAmbientLightMember, ResAnimGroupMember ) // object: gfx::ResAmbientLightData // value: 実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResVertexLightMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; enum MemberType { MEMBER_TYPE_AMBIENT, MEMBER_TYPE_DIFFUSE, MEMBER_TYPE_DIRECTION, MEMBER_TYPE_DISTANCE_ATTENUATION_CONSTANT, MEMBER_TYPE_DISTANCE_ATTENUATION_LINEAR, MEMBER_TYPE_DISTANCE_ATTENUATION_QUADRATIC, MEMBER_TYPE_SPOT_EXPONENT, MEMBER_TYPE_SPOT_CUTOFF_ANGLE }; NW_RES_CTOR_INHERIT( ResVertexLightMember, ResAnimGroupMember ) // object: gfx::ResVertexLightData // value: 実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResHemiSphereLightMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; enum MemberType { MEMBER_TYPE_GROUND_COLOR, MEMBER_TYPE_SKY_COLOR, MEMBER_TYPE_DIRECTION, MEMBER_TYPE_LERP_FACTOR }; NW_RES_CTOR_INHERIT( ResHemiSphereLightMember, ResAnimGroupMember ) // object: gfx::ResHemiSphereLightData // value: 実装を参照 void SetValue(void* object, const void* value) const; }; //! @details :private class ResFogMember : public ResAnimGroupMember { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResFogMember) }; enum { SIGNATURE = NW_RES_SIGNATURE32('AGFM') }; enum MemberType { MEMBER_TYPE_COLOR }; NW_RES_CTOR_INHERIT( ResFogMember, ResAnimGroupMember ) void SetValue(void* object, const void* value) const; }; //! @brief アニメーション対象の情報をまとめたリソースクラスです。 //! class ResAnimGroup : public ut::ResCommon { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResAnimGroup) }; enum { SIGNATURE = NW_RES_SIGNATURE32('ANMG') }; //! アニメーションのブレンド種類です。 enum BlendOperationType { BLENDOP_BOOL, BLENDOP_INT, BLENDOP_FLOAT, BLENDOP_RGBA_COLOR, BLENDOP_TRANSFORM, BLENDOP_VECTOR2, BLENDOP_VECTOR3, BLENDOP_TEXTURE, BLENDOP_CALCULATED_TRANSFORM, BLENDOP_CALCULATED_TRANSFORM_QUAT, BLENDOP_CALCULATED_TRANSFORM_ACCURATE_SCALE, BLENDOP_CALCULATED_TRANSFORM_ACCURATE_SCALE_QUAT }; //! アニメーション対象の種類です。継承先でさらに定義されます。 enum TargetType { TARGET_TYPE_NONE = 0, //!< 有効なメンバが存在しません。 TARGET_TYPE_UNKNOWN = -1 //!< 不正なメンバタイプです。 }; //! アニメーション対象のフラグです。 enum Flag { FLAG_IS_CALCULATED_TRANSFORM = 0x1 << 0 //!< ベイクされたTransformのアニメーションであることを示します。 }; NW_RES_CTOR( ResAnimGroup ) //! @name リソースへのアクセス //! @{ //--------------------------------------------------------------------------- //! @fn u32 GetFlags() const //! @brief フラグを取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetFlags(u32 flags) //! @brief フラグを設定します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void EnableFlags(u32 flags) //! @brief フラグを有効にします。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void DisableFlags(u32 flags) //! @brief フラグを無効にします。 //--------------------------------------------------------------------------- NW_RES_FIELD_FLAGS_DECL( u32, Flags ) // GetFlags(), SetFlags(), EnableFlags(), DisableFlags() //--------------------------------------------------------------------------- //! @fn const char* GetName() const //! @brief 名前を取得します。 //--------------------------------------------------------------------------- NW_RES_FIELD_STRING_DECL( Name ) // GetName() //--------------------------------------------------------------------------- //! @fn s32 GetTargetType() const //! @brief TargetType を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetTargetType(s32 targetType) //! @brief TargetTypeを設定します。 //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_DECL( s32, TargetType ) // GetMemberType() //--------------------------------------------------------------------------- //! @fn s32 GetMemberInfoSetIndex(const char * key) const //! @brief メンバー情報データ中でのインデックス番号を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn s32 GetMemberInfoSetCount() const //! @brief メンバー情報データの要素数を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn ResAnimGroupMember GetMemberInfoSet(int idx) //! @brief メンバー情報データを取得します。 //--------------------------------------------------------------------------- NW_RES_FIELD_CLASS_DIC_DECL( ResAnimGroupMember, MemberInfoSet, ut::ResDicPatricia ) // GetMemberInfoSet(int), GetMemberInfoSet(const char*), GetMemberInfoSetIndex(const char*), GetMemberInfoSetCount() //--------------------------------------------------------------------------- //! @fn s32* GetBlendOperations() //! @brief BlendOperations の先頭のポインタを取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn s32 GetBlendOperationsCount() const //! @brief BlendOperations の要素数を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn s32 GetBlendOperations(int idx) //! @brief BlendOperation を取得します。 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @fn void SetBlendOperations(int idx, s32 op) //! @brief BlendOperation を設定します。 //! @details :private //--------------------------------------------------------------------------- NW_RES_FIELD_PRIMITIVE_LIST_DECL( s32, BlendOperations ) // GetBlendOperations(), GetBlendOperations(int), GetBlendOperationsCount() //! @} }; //! @details :private class ResGraphicsAnimGroup : public ResAnimGroup { public: enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResGraphicsAnimGroup) }; enum { SIGNATURE = NW_RES_SIGNATURE32('GXAG') }; enum TargetType { TARGET_TYPE_BONE = 1, //!< ボーンに対するメンバです。 TARGET_TYPE_MATERIAL = 2, //!< マテリアルに対するメンバです。 TARGET_TYPE_VISIBILITY = 3, //!< ビジビリティに対するメンバです。 TARGET_TYPE_LIGHT = 4, //!< ライトに対するメンバです。 TARGET_TYPE_CAMERA = 5, //!< カメラに対するメンバです。 TARGET_TYPE_FOG = 6 //!< フォグに対するメンバです。 }; //! アニメーションの評価タイミングを表します。 enum EvaluationTiming { EVALUATION_BEFORE_WORLD_UPDATE, //!< シーンのワールドマトリクスを更新する前に評価されます。 EVALUATION_AFTER_SCENE_CULLING //!< シーンの描画カリングを行った後に評価されます。(描画カリングは今後実装予定です) }; NW_RES_CTOR_INHERIT( ResGraphicsAnimGroup, ResAnimGroup ) NW_RES_FIELD_PRIMITIVE_DECL( EvaluationTiming, EvaluationTiming ) }; } /* namespace res */ } /* namespace anim */ } /* namespace nw */ #endif /* NW_UT_RESANIMATIONGROUP_H_ */