1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: anim_ResAnimGroup.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 19812 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_ANIM_RESANIMATIONGROUP_H_ 17 #define NW_ANIM_RESANIMATIONGROUP_H_ 18 19 #include <nw/types.h> 20 #include <nw/ut/ut_ResTypes.h> 21 #include <nw/ut/ut_ResUtil.h> 22 #include <nw/ut/ut_ResDeclMacros.h> 23 #include <nw/ut/ut_ResDictionary.h> 24 #include <nw/ut/ut_ResArrayTypes.h> 25 #include <nw/anim/res/anim_ResTypeInfo.h> 26 27 namespace nw { 28 namespace gfx { 29 class SkeletalModel; 30 class Model; 31 class Camera; 32 class Light; 33 namespace res { 34 class ResModel; 35 } 36 } 37 } 38 39 namespace nw { 40 namespace anim { 41 42 namespace res {} 43 using namespace ::nw::anim::res; 44 45 namespace res { 46 47 //! アニメーション対象メンバの情報です。 48 //! 49 //! ObjectTypeとMemberTypeで、対象メンバを特定します。 50 //! アニメーション対象のクラスごとに、派生クラス(Res~Member)が存在します。(ObjectTypeと1対1対応) 51 //! 各派生クラスに、アニメーション対象インスタンスを特定するための情報があります。 52 //! 53 //! :private 54 struct ResAnimGroupMemberData 55 { 56 nw::ut::ResTypeInfo typeInfo; 57 ut::BinString toPath; 58 ut::ResS32 m_MemberOffset; 59 ut::ResS32 m_BlendOperationIndex; 60 ut::ResU32 m_ObjectType; //!< ResAnimGroupMember::ObjectType型の値。派生クラスの型を表す 61 ut::ResU32 m_MemberType; //!< 各派生クラスのMemberType型の値 62 63 // TODO: マテリアルのハッシュをクリアするためのハック。 64 // ハッシュ機構が削除されたら合わせて削除。 65 ut::ResU32 m_ResMaterialPtr; 66 }; 67 68 //! @details :private 69 struct ResBoneMemberData : public ResAnimGroupMemberData 70 { 71 ut::BinString toBoneName; 72 }; 73 74 //! @details :private 75 struct ResMaterialColorMemberData : public ResAnimGroupMemberData 76 { 77 ut::BinString toMaterialName; 78 }; 79 80 //! @details :private 81 struct ResTextureSamplerMemberData : public ResAnimGroupMemberData 82 { 83 ut::BinString toMaterialName; 84 ut::ResU32 m_TextureMapperIndex; 85 }; 86 87 //! @details :private 88 struct ResTextureMapperMemberData : public ResAnimGroupMemberData 89 { 90 ut::BinString toMaterialName; 91 ut::ResU32 m_TextureMapperIndex; 92 }; 93 94 //! @details :private 95 struct ResBlendOperationMemberData : public ResAnimGroupMemberData 96 { 97 ut::BinString toMaterialName; 98 }; 99 100 //! @details :private 101 struct ResTextureCoordinatorMemberData : public ResAnimGroupMemberData 102 { 103 ut::BinString toMaterialName; 104 ut::ResU32 m_TextureCoordinatorIndex; 105 }; 106 107 //! @details :private 108 struct ResModelMemberData : public ResAnimGroupMemberData 109 { 110 }; 111 112 //! @details :private 113 struct ResMeshMemberData : public ResAnimGroupMemberData 114 { 115 ut::ResU32 m_MeshIndex; 116 }; 117 118 //! @details :private 119 struct ResMeshNodeVisibilityMemberData : public ResAnimGroupMemberData 120 { 121 ut::BinString toNodeName; 122 }; 123 124 //! @details :private 125 struct ResTransformMemberData : public ResAnimGroupMemberData 126 { 127 }; 128 129 //! @details :private 130 struct ResViewUpdaterMemberData : public ResAnimGroupMemberData 131 { 132 }; 133 134 //! @details :private 135 struct ResProjectionUpdaterMemberData : public ResAnimGroupMemberData 136 { 137 }; 138 139 //! @details :private 140 struct ResLightMemberData : public ResAnimGroupMemberData 141 { 142 }; 143 144 //! @details :private 145 struct ResFragmentLightMemberData : public ResAnimGroupMemberData 146 { 147 }; 148 149 //! @details :private 150 struct ResAmbientLightMemberData : public ResAnimGroupMemberData 151 { 152 }; 153 154 //! @details :private 155 struct ResVertexLightMemberData : public ResAnimGroupMemberData 156 { 157 }; 158 159 //! @details :private 160 struct ResHemiSphereLightMemberData : public ResAnimGroupMemberData 161 { 162 }; 163 164 //! @details :private 165 struct ResFogMemberData : public ResAnimGroupMemberData 166 { 167 }; 168 169 //! @details :private 170 struct ResAnimGroupData 171 { 172 nw::ut::ResTypeInfo typeInfo; 173 ut::ResU32 m_Flags; 174 ut::BinString toName; 175 ut::ResS32 m_TargetType; 176 ut::ResS32 m_MemberInfoSetDicCount; 177 ut::Offset toMemberInfoSetDic; 178 ut::ResS32 m_BlendOperationsTableCount; 179 ut::Offset toBlendOperationsTable; 180 }; 181 182 //! @details :private 183 struct ResGraphicsAnimGroupData : public ResAnimGroupData 184 { 185 ut::ResS32 m_EvaluationTiming; 186 }; 187 188 189 //! @brief アニメーション対象のデータメンバーを書き換えるための情報のリソースクラスです。 190 //! 191 //! アニメーション対象のオブジェクトと、そのうちのどのメンバーをアニメーションさせるかの情報を持ちます。 192 //! 各アニメーション対象に応じて、継承先のクラスが定義されています。 193 //! 194 class ResAnimGroupMember : public ut::ResCommon<ResAnimGroupMemberData> 195 { 196 public: 197 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResAnimGroupMember) }; 198 enum { SIGNATURE = NW_RES_SIGNATURE32('AGMB') }; 199 200 //! アニメーション対象のオブジェクトです。 201 enum ObjectType 202 { 203 // スケルタルアニメーション 204 OBJECT_TYPE_BONE, 205 206 // マテリアルアニメーション 207 OBJECT_TYPE_MATERIAL_COLOR, 208 OBJECT_TYPE_TEXTURE_SAMPLER, 209 OBJECT_TYPE_TEXTURE_MAPPER, 210 OBJECT_TYPE_BLEND_OPERATION, 211 OBJECT_TYPE_TEXTURE_COORDINATOR, 212 213 // ビジビリティアニメーション 214 OBJECT_TYPE_MODEL, 215 OBJECT_TYPE_MESH, 216 OBJECT_TYPE_MESH_NODE_VISIBILITY, 217 218 // トランスフォームアニメーション 219 OBJECT_TYPE_TRANSFORM, 220 221 // カメラアニメーション 222 OBJECT_TYPE_VIEW_UPDATER, 223 OBJECT_TYPE_PROJECTION_UPDATER, 224 225 // ライトアニメーション 226 OBJECT_TYPE_LIGHT, 227 OBJECT_TYPE_FRAGMENT_LIGHT, 228 OBJECT_TYPE_VERTEX_LIGHT, 229 OBJECT_TYPE_HEMISPHERE_LIGHT, 230 OBJECT_TYPE_AMBIENT_LIGHT, 231 232 // フォグアニメーション 233 OBJECT_TYPE_FOG 234 }; 235 236 //! オブジェクト中の、どのメンバーをアニメーションさせるかの列挙です。継承先でも定義されます。 237 enum MemberType 238 { 239 // SetValueで処理が必要ない場合は、この値を使用します。 240 MEMBER_TYPE_INVALID = 0xFFFFFFFF 241 }; 242 243 NW_RES_CTOR( ResAnimGroupMember ) 244 245 //! @name リソースへのアクセス 246 //! @{ 247 248 //--------------------------------------------------------------------------- 249 //! @fn const char* GetPath() const 250 //! @brief Path 情報を取得します。 251 //--------------------------------------------------------------------------- 252 NW_RES_FIELD_STRING_DECL( Path ) // GetPath() 253 //--------------------------------------------------------------------------- 254 //! @fn s32 GetMemberOffset() const 255 //! @brief メンバーへのオフセット情報を取得します。 256 //--------------------------------------------------------------------------- 257 //--------------------------------------------------------------------------- 258 //! @fn void SetMemberOffset(s32 offset) 259 //! @brief メンバーへのオフセット情報を設定します。 260 //! @details :private 261 //--------------------------------------------------------------------------- 262 NW_RES_FIELD_PRIMITIVE_DECL( s32, MemberOffset ) // GetMemberOffset() 263 //--------------------------------------------------------------------------- 264 //! @fn s32 GetBlendOperationIndex() const 265 //! @brief ブレンドオペレーションのインデックス情報を取得します。 266 //--------------------------------------------------------------------------- 267 //--------------------------------------------------------------------------- 268 //! @fn void SetBlendOperationIndex(s32 index) 269 //! @brief ブレンドオペレーションのインデックス情報を設定します。 270 //! @details :private 271 //--------------------------------------------------------------------------- 272 NW_RES_FIELD_PRIMITIVE_DECL( s32, BlendOperationIndex ) // GetBlendOperationIndex() 273 //--------------------------------------------------------------------------- 274 //! @fn u32 GetObjectType() const 275 //! @brief 派生クラスの型を示すObjectTypeを取得します。 276 //--------------------------------------------------------------------------- 277 //--------------------------------------------------------------------------- 278 //! @fn void SetObjectType(u32 type) 279 //! @brief ObjectTypeを設定します。 280 //! @details :private 281 //--------------------------------------------------------------------------- 282 NW_RES_FIELD_PRIMITIVE_DECL( u32, ObjectType ) // GetObjectType() 283 //--------------------------------------------------------------------------- 284 //! @fn u32 GetMemberType() const 285 //! @brief 各派生クラスのMemberTypeを取得します。 286 //--------------------------------------------------------------------------- 287 //--------------------------------------------------------------------------- 288 //! @fn void SetMemberType(u32 type) 289 //! @brief MemberTypeを設定します。 290 //! @details :private 291 //--------------------------------------------------------------------------- 292 NW_RES_FIELD_PRIMITIVE_DECL( u32, MemberType ) // GetMemberType() 293 //--------------------------------------------------------------------------- 294 //! @fn u32 GetResMaterialPtr() const 295 //! @brief マテリアルのハッシュをクリアするための参照先ポインタを取得します。 296 //! @details :private 297 //--------------------------------------------------------------------------- 298 //--------------------------------------------------------------------------- 299 //! @fn void SetResMaterialPtr(u32 ptr) 300 //! @brief ResMAterialPtrを設定します。 301 //! @details :private 302 //--------------------------------------------------------------------------- 303 NW_RES_FIELD_PRIMITIVE_DECL( u32, ResMaterialPtr ) // GetResMaterialPtr() 304 //! @} 305 306 //! @brief アニメーション対象メンバに値を設定します。 307 //! @param[in] object AnimGroup::GetTargetObject()の値です。 308 //! @param[in] value 設定する値です。メンバの種類で型が異なります。派生クラスを参照してください。 309 void SetValueForType(void* object, const void* value) const; 310 311 //--------------------------------------------------------------------------- 312 //! @brief リソースの型情報を取得します。 313 //! 314 //! @return 型情報です。 315 //--------------------------------------------------------------------------- GetTypeInfo()316 nw::ut::ResTypeInfo GetTypeInfo() const { return ref().typeInfo; } 317 }; 318 typedef nw::ut::ResArrayPatricia<ResAnimGroupMember>::type ResAnimGroupMemberArray; //!< @details :private 319 typedef nw::ut::ResArrayPatricia<const ResAnimGroupMember>::type ResAnimGroupMemberArrayConst; //!< @details :private 320 321 //! @details :private 322 class ResBoneMember : public ResAnimGroupMember 323 { 324 public: 325 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResBoneMember) }; 326 enum { SIGNATURE = NW_RES_SIGNATURE32('AGBM') }; 327 328 enum MemberType 329 { 330 MEMBER_TYPE_TRANSFORM 331 }; 332 333 NW_RES_CTOR_INHERIT( ResBoneMember, ResAnimGroupMember ) 334 335 NW_RES_FIELD_STRING_DECL( BoneName ) // GetBoneName() 336 337 // object: gfx::CalculatedTransform 338 // value: math::Transform3 339 void SetValue(void* object, const void* value) const; 340 }; 341 342 //! @details :private 343 class ResMaterialColorMember : public ResAnimGroupMember 344 { 345 public: 346 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMaterialColorMember) }; 347 enum { SIGNATURE = NW_RES_SIGNATURE32('AGMC') }; 348 349 enum MemberType 350 { 351 MEMBER_TYPE_EMISSION, // ResMaterialColor::SetEmission() 352 MEMBER_TYPE_AMBIENT, // ResMaterialColor::SetAmbient() 353 MEMBER_TYPE_DIFFUSE, // ResMaterialColor::SetDiffuse() 354 MEMBER_TYPE_SPECULAR0, // ResMaterialColor::SetSpecular0() 355 MEMBER_TYPE_SPECULAR1, // ResMaterialColor::SetSpecular1() 356 MEMBER_TYPE_CONSTANT0, // ResMaterialColor::SetConstant0() 357 MEMBER_TYPE_CONSTANT1, // ResMaterialColor::SetConstant1() 358 MEMBER_TYPE_CONSTANT2, // ResMaterialColor::SetConstant2() 359 MEMBER_TYPE_CONSTANT3, // ResMaterialColor::SetConstant3() 360 MEMBER_TYPE_CONSTANT4, // ResMaterialColor::SetConstant4() 361 MEMBER_TYPE_CONSTANT5 // ResMaterialColor::SetConstant5() 362 }; 363 364 NW_RES_CTOR_INHERIT( ResMaterialColorMember, ResAnimGroupMember ) 365 366 NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() 367 368 // object: gfx::ResMaterialColorData 369 // value: ut::FloatColor 370 void SetValue(void* object, const void* value) const; 371 }; 372 373 //! @details :private 374 class ResTextureSamplerMember : public ResAnimGroupMember 375 { 376 public: 377 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureSamplerMember) }; 378 enum { SIGNATURE = NW_RES_SIGNATURE32('AGTS') }; 379 380 enum MemberType 381 { 382 MEMBER_TYPE_BORDER_COLOR // ResStandardTextureSampler::SetBorderColor(), ResPixelBasedTextureMapper::SetSampler() 383 }; 384 385 NW_RES_CTOR_INHERIT( ResTextureSamplerMember, ResAnimGroupMember ) 386 387 NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() 388 NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureMapperIndex ) // GetTextureMapperIndex() 389 390 // object: gfx::ResPixelBasedTextureMapperData 391 // value: ut::FloatColor 392 void SetValue(void* object, const void* value) const; 393 }; 394 395 //! @details :private 396 class ResTextureMapperMember : public ResAnimGroupMember 397 { 398 public: 399 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureMapperMember) }; 400 enum { SIGNATURE = NW_RES_SIGNATURE32('AGTM') }; 401 402 enum MemberType 403 { 404 MEMBER_TYPE_TEXTURE // ResTextureMapper::SetTexture() 405 }; 406 407 NW_RES_CTOR_INHERIT( ResTextureMapperMember, ResAnimGroupMember ) 408 409 NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() 410 NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureMapperIndex ) // GetTextureMapperIndex() 411 412 // object: gfx::ResPixelBasedTextureMapperData 413 // value: ut::Offset (ResReferenceTextureへの参照) 414 void SetValue(void* object, const void* value) const; 415 }; 416 417 //! @details :private 418 class ResBlendOperationMember : public ResAnimGroupMember 419 { 420 public: 421 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResBlendOperationMember) }; 422 enum { SIGNATURE = NW_RES_SIGNATURE32('AGBO') }; 423 424 enum MemberType 425 { 426 MEMBER_TYPE_BLEND_COLOR // ResBlendOperation::SetBlendColor() 427 }; 428 429 NW_RES_CTOR_INHERIT( ResBlendOperationMember, ResAnimGroupMember ) 430 431 NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() 432 433 // object: gfx::ResBlendOperationData 434 // value: ut::FloatColor 435 void SetValue(void* object, const void* value) const; 436 }; 437 438 //! @details :private 439 class ResTextureCoordinatorMember : public ResAnimGroupMember 440 { 441 public: 442 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTextureCoordinatorMember) }; 443 enum { SIGNATURE = NW_RES_SIGNATURE32('AGTC') }; 444 445 enum MemberType 446 { 447 MEMBER_TYPE_SCALE, // ResTextureCoordinator::SetScale() 448 MEMBER_TYPE_ROTATE, // ResTextureCoordinator::SetRotate() 449 MEMBER_TYPE_TRANSLATE // ResTextureCoordinator::SetTranslate() 450 }; 451 452 NW_RES_CTOR_INHERIT( ResTextureCoordinatorMember, ResAnimGroupMember ) 453 454 NW_RES_FIELD_STRING_DECL( MaterialName ) // GetMaterialName() 455 NW_RES_FIELD_PRIMITIVE_DECL( u32, TextureCoordinatorIndex ) // GetTextureCoordinatorIndex() 456 457 // object: gfx::ResTextureCoordinatorData 458 // value: 459 // SCALE, TRANSLATE: math::VEC2 460 // ROTATE: float 461 void SetValue(void* object, const void* value) const; 462 }; 463 464 //! @details :private 465 class ResModelMember : public ResAnimGroupMember 466 { 467 public: 468 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResModelMember) }; 469 enum { SIGNATURE = NW_RES_SIGNATURE32('AGMO') }; 470 471 enum MemberType 472 { 473 MEMBER_TYPE_BRANCH_VISIBLE, 474 MEMBER_TYPE_VISIBLE 475 }; 476 477 NW_RES_CTOR_INHERIT( ResModelMember, ResAnimGroupMember ) 478 479 // object: gfx::ResModelData 480 // value: bool 481 void SetValue(void* object, const void* value) const; 482 }; 483 484 //! @details :private 485 class ResMeshMember : public ResAnimGroupMember 486 { 487 public: 488 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMeshMember) }; 489 enum { SIGNATURE = NW_RES_SIGNATURE32('AGME') }; 490 491 enum MemberType 492 { 493 MEMBER_TYPE_VISIBLE 494 }; 495 496 NW_RES_CTOR_INHERIT( ResMeshMember, ResAnimGroupMember ) 497 498 NW_RES_FIELD_PRIMITIVE_DECL( u32, MeshIndex ) // GetMeshIndex() 499 500 // object: gfx::ResMeshData 501 // value: bool 502 void SetValue(void* object, const void* value) const; 503 }; 504 505 //! @details :private 506 class ResMeshNodeVisibilityMember : public ResAnimGroupMember 507 { 508 public: 509 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResMeshNodeVisibilityMember) }; 510 enum { SIGNATURE = NW_RES_SIGNATURE32('AGND') }; 511 512 enum MemberType 513 { 514 MEMBER_TYPE_VISIBLE 515 }; 516 517 NW_RES_CTOR_INHERIT( ResMeshNodeVisibilityMember, ResAnimGroupMember ) 518 519 NW_RES_FIELD_STRING_DECL( NodeName ) // GetNodeName() 520 521 // object: gfx::ResMeshNodeVisibilityData 522 // value: bool 523 void SetValue(void* object, const void* value) const; 524 }; 525 526 //! @details :private 527 class ResTransformMember : public ResAnimGroupMember 528 { 529 public: 530 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResTransformMember) }; 531 enum { SIGNATURE = NW_RES_SIGNATURE32('AGTF') }; 532 533 enum MemberType 534 { 535 MEMBER_TYPE_TRANSFORM 536 }; 537 538 NW_RES_CTOR_INHERIT( ResTransformMember, ResAnimGroupMember ) 539 540 // object: gfx::TransformNode 541 // value: CalculatedTransform 542 void SetValue(void* object, const void* value) const; 543 }; 544 545 //! @details :private 546 class ResViewUpdaterMember : public ResAnimGroupMember 547 { 548 public: 549 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResViewUpdaterMember) }; 550 enum { SIGNATURE = NW_RES_SIGNATURE32('AGVU') }; 551 552 enum MemberType 553 { 554 MEMBER_TYPE_TARGET_POSITION, 555 MEMBER_TYPE_TWIST, 556 MEMBER_TYPE_UPWARD_VECTOR, 557 MEMBER_TYPE_VIEW_ROTATE, 558 MEMBER_TYPE_TRANSFORM 559 }; 560 561 NW_RES_CTOR_INHERIT( ResViewUpdaterMember, ResAnimGroupMember ) 562 563 // object: gfx::ResCameraViewUpdaterData 564 // value: 多様なので実装を参照 565 void SetValue(void* object, const void* value) const; 566 }; 567 568 //! @details :private 569 class ResProjectionUpdaterMember : public ResAnimGroupMember 570 { 571 public: 572 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResProjectionUpdaterMember) }; 573 enum { SIGNATURE = NW_RES_SIGNATURE32('AGPU') }; 574 575 enum MemberType 576 { 577 MEMBER_TYPE_NEAR, 578 MEMBER_TYPE_FAR, 579 MEMBER_TYPE_FOVY, 580 MEMBER_TYPE_ASPECT_RATIO, 581 MEMBER_TYPE_HEIGHT, 582 MEMBER_TYPE_CENTER 583 }; 584 585 NW_RES_CTOR_INHERIT( ResProjectionUpdaterMember, ResAnimGroupMember ) 586 587 // object: gfx::ResCameraProjectionUpdaterData 588 // value: 多様なので実装を参照 589 void SetValue(void* object, const void* value) const; 590 }; 591 592 //! @details :private 593 class ResLightMember : public ResAnimGroupMember 594 { 595 public: 596 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; 597 enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; 598 599 enum MemberType 600 { 601 MEMBER_TYPE_IS_LIGHT_ENABLED 602 }; 603 604 NW_RES_CTOR_INHERIT( ResLightMember, ResAnimGroupMember ) 605 606 // object: gfx::ResLightData 607 // value: 実装を参照 608 void SetValue(void* object, const void* value) const; 609 }; 610 611 //! @details :private 612 class ResFragmentLightMember : public ResAnimGroupMember 613 { 614 public: 615 // このクラスは実装上の都合で存在している。 616 // バイナリにはResLightMember型で格納されている。以下同様。 617 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; 618 enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; 619 620 enum MemberType 621 { 622 MEMBER_TYPE_AMBIENT, 623 MEMBER_TYPE_DIFFUSE, 624 MEMBER_TYPE_SPECULAR0, 625 MEMBER_TYPE_SPECULAR1, 626 MEMBER_TYPE_DIRECTION, 627 MEMBER_TYPE_DISTANCE_ATTENUATION_START, 628 MEMBER_TYPE_DISTANCE_ATTENUATION_END 629 }; 630 631 NW_RES_CTOR_INHERIT( ResFragmentLightMember, ResAnimGroupMember ) 632 633 // object: gfx::ResFragmentLightData 634 // value: 実装を参照 635 void SetValue(void* object, const void* value) const; 636 }; 637 638 //! @details :private 639 class ResAmbientLightMember : public ResAnimGroupMember 640 { 641 public: 642 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; 643 enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; 644 645 enum MemberType 646 { 647 MEMBER_TYPE_AMBIENT 648 }; 649 650 NW_RES_CTOR_INHERIT( ResAmbientLightMember, ResAnimGroupMember ) 651 652 // object: gfx::ResAmbientLightData 653 // value: 実装を参照 654 void SetValue(void* object, const void* value) const; 655 }; 656 657 //! @details :private 658 class ResVertexLightMember : public ResAnimGroupMember 659 { 660 public: 661 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; 662 enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; 663 664 enum MemberType 665 { 666 MEMBER_TYPE_AMBIENT, 667 MEMBER_TYPE_DIFFUSE, 668 MEMBER_TYPE_DIRECTION, 669 MEMBER_TYPE_DISTANCE_ATTENUATION_CONSTANT, 670 MEMBER_TYPE_DISTANCE_ATTENUATION_LINEAR, 671 MEMBER_TYPE_DISTANCE_ATTENUATION_QUADRATIC, 672 MEMBER_TYPE_SPOT_EXPONENT, 673 MEMBER_TYPE_SPOT_CUTOFF_ANGLE 674 }; 675 676 NW_RES_CTOR_INHERIT( ResVertexLightMember, ResAnimGroupMember ) 677 678 // object: gfx::ResVertexLightData 679 // value: 実装を参照 680 void SetValue(void* object, const void* value) const; 681 }; 682 683 //! @details :private 684 class ResHemiSphereLightMember : public ResAnimGroupMember 685 { 686 public: 687 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResLightMember) }; 688 enum { SIGNATURE = NW_RES_SIGNATURE32('AGLM') }; 689 690 enum MemberType 691 { 692 MEMBER_TYPE_GROUND_COLOR, 693 MEMBER_TYPE_SKY_COLOR, 694 MEMBER_TYPE_DIRECTION, 695 MEMBER_TYPE_LERP_FACTOR 696 }; 697 698 NW_RES_CTOR_INHERIT( ResHemiSphereLightMember, ResAnimGroupMember ) 699 700 // object: gfx::ResHemiSphereLightData 701 // value: 実装を参照 702 void SetValue(void* object, const void* value) const; 703 }; 704 705 //! @details :private 706 class ResFogMember : public ResAnimGroupMember 707 { 708 public: 709 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResFogMember) }; 710 enum { SIGNATURE = NW_RES_SIGNATURE32('AGFM') }; 711 712 enum MemberType 713 { 714 MEMBER_TYPE_COLOR 715 }; 716 717 NW_RES_CTOR_INHERIT( ResFogMember, ResAnimGroupMember ) 718 719 void SetValue(void* object, const void* value) const; 720 }; 721 722 //! @brief アニメーション対象の情報をまとめたリソースクラスです。 723 //! 724 class ResAnimGroup : public ut::ResCommon<ResAnimGroupData> 725 { 726 public: 727 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResAnimGroup) }; 728 enum { SIGNATURE = NW_RES_SIGNATURE32('ANMG') }; 729 730 //! アニメーションのブレンド種類です。 731 enum BlendOperationType 732 { 733 BLENDOP_BOOL, 734 BLENDOP_INT, 735 BLENDOP_FLOAT, 736 BLENDOP_RGBA_COLOR, 737 BLENDOP_TRANSFORM, 738 BLENDOP_VECTOR2, 739 BLENDOP_VECTOR3, 740 BLENDOP_TEXTURE, 741 BLENDOP_CALCULATED_TRANSFORM, 742 BLENDOP_CALCULATED_TRANSFORM_QUAT, 743 BLENDOP_CALCULATED_TRANSFORM_ACCURATE_SCALE, 744 BLENDOP_CALCULATED_TRANSFORM_ACCURATE_SCALE_QUAT 745 }; 746 747 //! アニメーション対象の種類です。継承先でさらに定義されます。 748 enum TargetType 749 { 750 TARGET_TYPE_NONE = 0, //!< 有効なメンバが存在しません。 751 TARGET_TYPE_UNKNOWN = -1 //!< 不正なメンバタイプです。 752 }; 753 754 //! アニメーション対象のフラグです。 755 enum Flag 756 { 757 FLAG_IS_CALCULATED_TRANSFORM = 0x1 << 0 //!< ベイクされたTransformのアニメーションであることを示します。 758 }; 759 760 NW_RES_CTOR( ResAnimGroup ) 761 762 //! @name リソースへのアクセス 763 //! @{ 764 765 //--------------------------------------------------------------------------- 766 //! @fn u32 GetFlags() const 767 //! @brief フラグを取得します。 768 //--------------------------------------------------------------------------- 769 //--------------------------------------------------------------------------- 770 //! @fn void SetFlags(u32 flags) 771 //! @brief フラグを設定します。 772 //--------------------------------------------------------------------------- 773 //--------------------------------------------------------------------------- 774 //! @fn void EnableFlags(u32 flags) 775 //! @brief フラグを有効にします。 776 //--------------------------------------------------------------------------- 777 //--------------------------------------------------------------------------- 778 //! @fn void DisableFlags(u32 flags) 779 //! @brief フラグを無効にします。 780 //--------------------------------------------------------------------------- 781 NW_RES_FIELD_FLAGS_DECL( u32, Flags ) // GetFlags(), SetFlags(), EnableFlags(), DisableFlags() 782 783 //--------------------------------------------------------------------------- 784 //! @fn const char* GetName() const 785 //! @brief 名前を取得します。 786 //--------------------------------------------------------------------------- 787 NW_RES_FIELD_STRING_DECL( Name ) // GetName() 788 789 //--------------------------------------------------------------------------- 790 //! @fn s32 GetTargetType() const 791 //! @brief TargetType を取得します。 792 //--------------------------------------------------------------------------- 793 //--------------------------------------------------------------------------- 794 //! @fn void SetTargetType(s32 targetType) 795 //! @brief TargetTypeを設定します。 796 //--------------------------------------------------------------------------- 797 NW_RES_FIELD_PRIMITIVE_DECL( s32, TargetType ) // GetMemberType() 798 799 //--------------------------------------------------------------------------- 800 //! @fn s32 GetMemberInfoSetIndex(const char * key) const 801 //! @brief メンバー情報データ中でのインデックス番号を取得します。 802 //--------------------------------------------------------------------------- 803 //--------------------------------------------------------------------------- 804 //! @fn s32 GetMemberInfoSetCount() const 805 //! @brief メンバー情報データの要素数を取得します。 806 //--------------------------------------------------------------------------- 807 //--------------------------------------------------------------------------- 808 //! @fn ResAnimGroupMember GetMemberInfoSet(int idx) 809 //! @brief メンバー情報データを取得します。 810 //--------------------------------------------------------------------------- 811 NW_RES_FIELD_CLASS_DIC_DECL( ResAnimGroupMember, MemberInfoSet, ut::ResDicPatricia ) // GetMemberInfoSet(int), GetMemberInfoSet(const char*), GetMemberInfoSetIndex(const char*), GetMemberInfoSetCount() 812 813 //--------------------------------------------------------------------------- 814 //! @fn s32* GetBlendOperations() 815 //! @brief BlendOperations の先頭のポインタを取得します。 816 //--------------------------------------------------------------------------- 817 //--------------------------------------------------------------------------- 818 //! @fn s32 GetBlendOperationsCount() const 819 //! @brief BlendOperations の要素数を取得します。 820 //--------------------------------------------------------------------------- 821 //--------------------------------------------------------------------------- 822 //! @fn s32 GetBlendOperations(int idx) 823 //! @brief BlendOperation を取得します。 824 //--------------------------------------------------------------------------- 825 //--------------------------------------------------------------------------- 826 //! @fn void SetBlendOperations(int idx, s32 op) 827 //! @brief BlendOperation を設定します。 828 //! @details :private 829 //--------------------------------------------------------------------------- 830 NW_RES_FIELD_PRIMITIVE_LIST_DECL( s32, BlendOperations ) // GetBlendOperations(), GetBlendOperations(int), GetBlendOperationsCount() 831 //! @} 832 }; 833 834 //! @details :private 835 class ResGraphicsAnimGroup : public ResAnimGroup 836 { 837 public: 838 enum { TYPE_INFO = NW_ANIM_RES_TYPE_INFO(ResGraphicsAnimGroup) }; 839 enum { SIGNATURE = NW_RES_SIGNATURE32('GXAG') }; 840 841 enum TargetType 842 { 843 TARGET_TYPE_BONE = 1, //!< ボーンに対するメンバです。 844 TARGET_TYPE_MATERIAL = 2, //!< マテリアルに対するメンバです。 845 TARGET_TYPE_VISIBILITY = 3, //!< ビジビリティに対するメンバです。 846 TARGET_TYPE_LIGHT = 4, //!< ライトに対するメンバです。 847 TARGET_TYPE_CAMERA = 5, //!< カメラに対するメンバです。 848 TARGET_TYPE_FOG = 6 //!< フォグに対するメンバです。 849 }; 850 851 //! アニメーションの評価タイミングを表します。 852 enum EvaluationTiming 853 { 854 EVALUATION_BEFORE_WORLD_UPDATE, //!< シーンのワールドマトリクスを更新する前に評価されます。 855 EVALUATION_AFTER_SCENE_CULLING //!< シーンの描画カリングを行った後に評価されます。(描画カリングは今後実装予定です) 856 }; 857 858 NW_RES_CTOR_INHERIT( ResGraphicsAnimGroup, ResAnimGroup ) 859 860 NW_RES_FIELD_PRIMITIVE_DECL( EvaluationTiming, EvaluationTiming ) 861 }; 862 863 } /* namespace res */ 864 } /* namespace anim */ 865 } /* namespace nw */ 866 867 #endif /* NW_UT_RESANIMATIONGROUP_H_ */ 868