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