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