1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: lyt_Resources.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: 26780 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_LYT_RESOURCES_H_ 17 #define NW_LYT_RESOURCES_H_ 18 19 #include <nw/types.h> 20 21 #include <nw/math/math_types.h> 22 #include <nw/ut/ut_Color.h> 23 24 #include <nw/lyt/lyt_Types.h> 25 26 //! @namespace nw::lyt::res 27 //! 28 //! @brief レイアウトのリソースデータ型を定義する名前空間です。 29 //! 30 //! @details 31 //! リソースファイルの構造については以下を参照してください。 32 //! 33 //! ・ nw::lyt::res::Lyt\n 34 //! ・ nw::lyt::res::Lan\n 35 //! ・ nw::lyt::res::Lim 36 37 namespace nw 38 { 39 namespace lyt 40 { 41 namespace res 42 { 43 44 /* ======================================================================== 45 定数定義 46 ======================================================================== */ 47 48 //! @name バージョン 49 //@{ 50 51 //! @brief リソースのメジャーバージョンです。 52 //! 53 //! @details 54 //! 互換性のない変更を表します。 55 //! 56 const u8 MajorVersion = 2; 57 58 //! @brief リソースのマイナーバージョンです。 59 //! 60 //! @details 61 //! 後方互換のある変更を表します。新しいライブラリは古いリソースを解釈できます。 62 //! 63 const u8 MinorVersion = 2; 64 65 //! @brief リソースのマイクロバージョンです。 66 //! 67 //! @details 68 //! 両互換の変更を表します。新旧のライブラリでお互いのリソースを解釈できます。 69 //! 70 const u8 MicroVersion = 0; 71 72 //! @brief リソースのバグフィックスバージョンです。 73 //! 74 //! @details 75 //! 前方互換のみの変更を表します。新しいライブラリで古いリソースが解釈できないことを表します。 76 //! 77 const u8 BugfixVersion = 0; 78 79 //! @brief リソースのバージョンです。 80 const u32 BinaryFileFormatVersion = NW_UT_MAKE_VERSION(MajorVersion, MinorVersion, MicroVersion, BugfixVersion); 81 82 //@} 83 84 //! @name レイアウト・リソース 85 //@{ 86 87 //! @brief レイアウト・リソースファイルのシグニチャです。 88 //! @sa Lyt 89 const u32 FILESIGNATURE_CLYT = NW_UT_MAKE_SIGWORD('C', 'L', 'Y', 'T'); 90 91 //! @brief Layout データブロックのシグニチャです。 92 const u32 DATABLOCKKIND_LAYOUT = NW_UT_MAKE_SIGWORD('l', 'y', 't', '1'); 93 //! @brief PaneBegin データブロックのシグニチャです。 94 const u32 DATABLOCKKIND_PANEBEGIN = NW_UT_MAKE_SIGWORD('p', 'a', 's', '1'); 95 //! @brief PaneEnd データブロックのシグニチャです。 96 const u32 DATABLOCKKIND_PANEEND = NW_UT_MAKE_SIGWORD('p', 'a', 'e', '1'); 97 //! @brief Pane データブロックのシグニチャです。 98 const u32 DATABLOCKKIND_PANE = NW_UT_MAKE_SIGWORD('p', 'a', 'n', '1'); 99 //! @brief Picture データブロックのシグニチャです。 100 const u32 DATABLOCKKIND_PICTURE = NW_UT_MAKE_SIGWORD('p', 'i', 'c', '1'); 101 //! @brief TextBox データブロックのシグニチャです。 102 const u32 DATABLOCKKIND_TEXTBOX = NW_UT_MAKE_SIGWORD('t', 'x', 't', '1'); 103 //! @brief Window データブロックのシグニチャです。 104 const u32 DATABLOCKKIND_WINDOW = NW_UT_MAKE_SIGWORD('w', 'n', 'd', '1'); 105 //! @brief Bounding データブロックのシグニチャです。 106 const u32 DATABLOCKKIND_BOUNDING = NW_UT_MAKE_SIGWORD('b', 'n', 'd', '1'); 107 //! @brief GroupBegin データブロックのシグニチャです。 108 const u32 DATABLOCKKIND_GROUPBEGIN = NW_UT_MAKE_SIGWORD('g', 'r', 's', '1'); 109 //! @brief GroupEnd データブロックのシグニチャです。 110 const u32 DATABLOCKKIND_GROUPEND = NW_UT_MAKE_SIGWORD('g', 'r', 'e', '1'); 111 //! @brief Group データブロックのシグニチャです。 112 const u32 DATABLOCKKIND_GROUP = NW_UT_MAKE_SIGWORD('g', 'r', 'p', '1'); 113 //! @brief FontList データブロックのシグニチャです。 114 const u32 DATABLOCKKIND_FONTLIST = NW_UT_MAKE_SIGWORD('f', 'n', 'l', '1'); 115 //! @brief TextureList データブロックのシグニチャです。 116 const u32 DATABLOCKKIND_TEXTURELIST = NW_UT_MAKE_SIGWORD('t', 'x', 'l', '1'); 117 //! @brief MaterialList データブロックのシグニチャです。 118 const u32 DATABLOCKKIND_MATERIALLIST = NW_UT_MAKE_SIGWORD('m', 'a', 't', '1'); 119 //! @brief ExtUserDataList データブロックのシグニチャです。 120 const u32 DATABLOCKKIND_USERDATALIST = NW_UT_MAKE_SIGWORD('u', 's', 'd', '1'); 121 122 //@} 123 124 //! @name アニメーション・リソース 125 //@{ 126 127 //! @brief アニメーション・リソースファイルのシグニチャです。 128 //! @sa Lan 129 const u32 FILESIGNATURE_CLAN = NW_UT_MAKE_SIGWORD('C', 'L', 'A', 'N'); 130 131 //! @brief AnimationTagBlock データブロックのシグニチャです。 132 const u32 DATABLOCKKIND_PANEANIMTAG = NW_UT_MAKE_SIGWORD('p', 'a', 't', '1'); 133 //! @brief AnimationShareBlock データブロックのシグニチャです。 134 const u32 DATABLOCKKIND_PANEANIMSHARE = NW_UT_MAKE_SIGWORD('p', 'a', 'h', '1'); 135 //! @brief AnimationBlock データブロックのシグニチャです。 136 const u32 DATABLOCKKIND_PANEANIMINFO = NW_UT_MAKE_SIGWORD('p', 'a', 'i', '1'); 137 138 //@} 139 140 //! @name アニメーション・タイプ 141 //@{ 142 143 //! @brief アニメーションの対象はペインのSRTアニメーションです。 144 //! @sa AnimationInfo 145 const u32 ANIMATIONTYPE_PANESRT = NW_UT_MAKE_SIGWORD('C', 'L', 'P', 'A'); 146 //! @brief アニメーションの対象はビジビリティ・アニメーションです。 147 //! @sa AnimationInfo 148 const u32 ANIMATIONTYPE_VISIBILITY = NW_UT_MAKE_SIGWORD('C', 'L', 'V', 'I'); 149 //! @brief アニメーションの対象は頂点カラー・アニメーションです。 150 //! @sa AnimationInfo 151 const u32 ANIMATIONTYPE_VTXCOLOR = NW_UT_MAKE_SIGWORD('C', 'L', 'V', 'C'); 152 //! @brief アニメーションの対象はマテリアル・アニメーションです。 153 //! @sa AnimationInfo 154 const u32 ANIMATIONTYPE_MATCOLOR = NW_UT_MAKE_SIGWORD('C', 'L', 'M', 'C'); 155 //! @brief アニメーションの対象はテクスチャのSRTアニメーションです。 156 //! @sa AnimationInfo 157 const u32 ANIMATIONTYPE_TEXSRT = NW_UT_MAKE_SIGWORD('C', 'L', 'T', 'S'); 158 //! @brief アニメーションの対象はテクスチャパターン・アニメーションです。 159 //! @sa AnimationInfo 160 const u32 ANIMATIONTYPE_TEXPATTERN = NW_UT_MAKE_SIGWORD('C', 'L', 'T', 'P'); 161 162 //@} 163 164 //! @name テクスチャイメージ・リソース 165 //@{ 166 167 //! @brief テクスチャイメージ・リソースファイルのシグニチャです。 168 //! @sa Lim 169 const u32 FILESIGNATURE_CLIM = NW_UT_MAKE_SIGWORD('C', 'L', 'I', 'M'); 170 171 //! @brief res::Image データブロックのシグニチャです。 172 const u32 DATABLOCKKIND_IMAGE = NW_UT_MAKE_SIGWORD('i', 'm', 'a', 'g'); 173 174 //@} 175 176 //! @name リソースタイプ 177 //@{ 178 179 //! @brief リソースはレイアウトです。 180 //! @sa ResType 181 const u32 RESOURCETYPE_LAYOUT = 'blyt'; 182 //! @brief リソースはアニメーションです。 183 //! @sa ResType 184 const u32 RESOURCETYPE_ANIMATION = 'anim'; 185 //! @brief リソースはテクスチャイメージです。 186 //! @sa ResType 187 const u32 RESOURCETYPE_TEXTURE = 'timg'; 188 //! @brief リソースはリソースフォントです。 189 //! @sa ResType 190 const u32 RESOURCETYPE_FONT = 'font'; 191 //! @brief リソースはアーカイブフォントです。 192 //! @sa ResType 193 const u32 RESOURCETYPE_ARCHIVEFONT = 'fnta'; 194 195 //@} 196 197 /* ======================================================================== 198 型定義 199 ======================================================================== */ 200 201 //!--------------------------------------------------------------------------* 202 //! @name レイアウト・リソース 203 //@{ 204 205 //--------------------------------------------------------------------------- 206 //! :category レイアウト・リソース 207 //! 208 //! @brief レイアウト・リソースファイルのヘッダです。 209 //! 210 //! @details 211 //! fileHeader の kind には res::FILESIGNATURE_CLYT が指定されます。 212 //! 213 //! この構造体に以下のデータブロックの組み合わせが続きます。 214 //! 215 //! ・ Layout\n 216 //! ・ FontList\n 217 //! ・ TextureList\n 218 //! ・ MaterialList\n 219 //! ・ ExtUserDataList\n 220 //! ・ PaneBegin\n 221 //! ・ PaneEnd\n 222 //! ・ Pane\n 223 //! ・ Picture\n 224 //! ・ TextBox\n 225 //! ・ Window\n 226 //! ・ Bounding\n 227 //! ・ GroupBegin\n 228 //! ・ GroupEnd\n 229 //! ・ Group 230 //! 231 //! @since 2010/01/26 初版。 232 //--------------------------------------------------------------------------- 233 struct Lyt 234 { 235 //! ファイルヘッダです。 236 ut::BinaryFileHeader fileHeader; 237 }; 238 239 //--------------------------------------------------------------------------- 240 //! :category レイアウト・リソース 241 //! 242 //! @brief レイアウトを定義するデータブロックです。 243 //! 244 //! @since 2010/01/26 初版。 245 //--------------------------------------------------------------------------- 246 struct Layout 247 { 248 //! @brief ヘッダです。 249 //! 250 //! @details 251 //! kind には res::DATABLOCKKIND_LAYOUT が指定されます。 252 //! 253 ut::BinaryBlockHeader blockHeader; 254 255 //! @brief スクリーンの向きです。(未使用です) 256 //! @sa ScreenOriginType 257 ut::ResU8 originType; 258 259 //! @brief (未使用です) 260 ut::ResU8 padding[3]; 261 262 //! @brief レイアウトの画面サイズです。 263 Size layoutSize; 264 }; 265 266 //--------------------------------------------------------------------------- 267 //! :category レイアウト・リソース 268 //! 269 //! @brief フォントの参照情報です。 270 //! 271 //! @sa FontList 272 //! 273 //! @since 2010/01/26 初版。 274 //--------------------------------------------------------------------------- 275 struct Font 276 { 277 //! @brief リソース名のオフセットです(FontList の次のアドレスから)。 278 internal::ResU32 nameStrOffset; 279 }; 280 281 //--------------------------------------------------------------------------- 282 //! :category レイアウト・リソース 283 //! 284 //! @brief フォントの参照情報のリストを格納したデータブロックです。 285 //! 286 //! @details 287 //! ペインが参照するフォントのリストをペインに先立って定義します。 288 //! 289 //! blockHeader の kind には res::DATABLOCKKIND_FONTLIST が指定されます。 290 //! 291 //! blockHeader の size は nameStrPool までを含みます。 292 //! 293 //! この構造体には以下のデータ構造が続きます。 294 //! 295 //! ・ res::Font fonts[fontNum]\n 296 //! ・ u8 nameStrPool[] 297 //! 298 //! @sa Layout 299 //! 300 //! @since 2010/01/26 初版。 301 //--------------------------------------------------------------------------- 302 struct FontList 303 { 304 //! ヘッダです。 305 ut::BinaryBlockHeader blockHeader; 306 307 //! リストに含まれるフォント参照の総数です。 308 ut::ResU16 fontNum; 309 310 //! (未使用です) 311 ut::ResU8 padding[2]; 312 313 /* Additional Info 314 Font fonts[fontNum]; 315 u8 nameStrPool[]; 316 */ 317 }; 318 319 //--------------------------------------------------------------------------- 320 //! :category レイアウト・リソース 321 //! 322 //! @brief テクスチャイメージの参照情報です。 323 //! 324 //! @sa TextureList 325 //! 326 //! @since 2010/01/26 初版。 327 //--------------------------------------------------------------------------- 328 struct Texture 329 { 330 //! @brief リソース名のオフセットです(TextureList の次のアドレスから)。 331 internal::ResU32 nameStrOffset; 332 }; 333 334 //--------------------------------------------------------------------------- 335 //! :category レイアウト・リソース 336 //! 337 //! @brief テクスチャイメージの参照情報のリストを格納したデータブロックです。 338 //! 339 //! @details 340 //! ペインが参照するテクスチャのリストをペインに先立って定義します。 341 //! 342 //! blockHeader の kind には res::DATABLOCKKIND_TEXTURELIST が指定されます。 343 //! 344 //! blockHeader の size は nameStrPool までを含みます。 345 //! 346 //! この構造体には以下のデータ構造が続きます。 347 //! 348 //! ・ res::Texture textures[texNum]\n 349 //! ・ u8 nameStrPool[] 350 //! 351 //! @sa Layout 352 //! 353 //! @since 2010/01/26 初版。 354 //--------------------------------------------------------------------------- 355 struct TextureList 356 { 357 //! ヘッダです。 358 ut::BinaryBlockHeader blockHeader; 359 360 //! リストに含まれるテクスチャイメージ参照の総数です。 361 ut::ResU16 texNum; 362 363 //! (未使用です) 364 ut::ResU8 padding[2]; 365 366 /* Additional Info 367 Texture textures[texNum]; 368 u8 nameStrPool[]; 369 */ 370 }; 371 372 //--------------------------------------------------------------------------- 373 //! :category レイアウト・リソース 374 //! 375 //! @brief テクスチャのマッピング情報です。 376 //! 377 //! @sa Material 378 //! 379 //! @since 2010/01/26 初版。 380 //--------------------------------------------------------------------------- 381 struct TexMap 382 { 383 //---------------------------------------- 384 //! @name コンストラクタ/デストラクタ 385 //@{ 386 387 //! @brief コンストラクタです。 388 //! 389 //! @since 2010/01/26 初版。 390 //! TexMapTexMap391 TexMap() 392 : texIdx(0), 393 wrapSflt(0), 394 wrapTflt(0) 395 {} 396 397 //@} 398 399 //---------------------------------------- 400 //! @name 設定/取得 401 //@{ 402 403 //! @brief S方向のラップモードを取得します。 404 //! 405 //! @return S方向のラップモードを返します。 406 //! 407 //! @since 2010/01/26 初版。 408 //! GetWarpModeSTexMap409 TexWrap GetWarpModeS() const 410 { 411 return TexWrap(internal::GetBits(wrapSflt, 0, 2)); 412 } 413 414 //! @brief T方向のラップモードを取得します。 415 //! 416 //! @return T方向のラップモードを返します。 417 //! 418 //! @since 2010/01/26 初版。 419 //! GetWarpModeTTexMap420 TexWrap GetWarpModeT() const 421 { 422 return TexWrap(internal::GetBits(wrapTflt, 0, 2)); 423 } 424 425 //! @brief 縮小フィルタの設定を取得します。 426 //! 427 //! @return 縮小フィルタの設定を返します。 428 //! 429 //! @since 2010/01/26 初版。 430 //! GetMinFilterTexMap431 TexFilter GetMinFilter() const 432 { 433 return TexFilter(internal::GetBits(wrapSflt, 2, 2)); 434 } 435 436 //! @brief 拡大フィルタの設定を取得します。 437 //! 438 //! @return 拡大フィルタの設定を返します。 439 //! 440 //! @since 2010/01/26 初版。 441 //! GetMagFilterTexMap442 TexFilter GetMagFilter() const 443 { 444 return TexFilter(internal::GetBits(wrapTflt, 2, 2)); 445 } 446 447 //! @brief S方向のラップモードを設定します。 448 //! 449 //! @param value S方向のラップモードです。 lyt::TexWrap を指定します。 450 //! 451 //! @since 2010/01/26 初版。 452 //! SetWarpModeSTexMap453 void SetWarpModeS(u8 value) 454 { 455 NW_ASSERT(value < TEXWRAP_MAX); 456 internal::SetBits(&wrapSflt, 0, 2, value); 457 } 458 459 //! @brief T方向のラップモードを設定します。 460 //! 461 //! @param value T方向のラップモードです。 lyt::TexWrap を指定します。 462 //! 463 //! @since 2010/01/26 初版。 464 //! SetWarpModeTTexMap465 void SetWarpModeT(u8 value) 466 { 467 NW_ASSERT(value < TEXWRAP_MAX); 468 internal::SetBits(&wrapTflt, 0, 2, value); 469 } 470 471 //! @brief 縮小フィルタを設定します。 472 //! 473 //! @param value 縮小フィルタの設定です。 lyt::TexFilter を指定します。 474 //! 475 //! @since 2010/01/26 初版。 476 //! SetMinFilterTexMap477 void SetMinFilter(u8 value) 478 { 479 NW_ASSERT(value < TEXFILTER_MAX); 480 internal::SetBits(&wrapSflt, 2, 2, value); 481 } 482 483 //! @brief 拡大フィルタを設定します。 484 //! 485 //! @param value 拡大フィルタの設定です。 lyt::TexFilter を指定します。 486 //! 487 //! @since 2010/01/26 初版。 488 //! SetMagFilterTexMap489 void SetMagFilter(u8 value) 490 { 491 NW_ASSERT(value < TEXFILTER_MAX); 492 internal::SetBits(&wrapTflt, 2, 2, value); 493 } 494 495 //@} 496 497 //! @details :private 498 ut::ResU16 texIdx; 499 //! @details :private 500 ut::ResU8 wrapSflt; // TexWrap, TexFilter 501 //! @details :private 502 ut::ResU8 wrapTflt; // TexWrap, TexFilter 503 }; 504 505 //--------------------------------------------------------------------------- 506 //! :category レイアウト・リソース 507 //! 508 //! @brief マテリアルが持つ情報の数です。 509 //! 510 //! @sa Material 511 //! 512 //! @since 2010/01/26 初版。 513 //--------------------------------------------------------------------------- 514 struct MaterialResourceNum 515 { 516 //---------------------------------------- 517 //! @name コンストラクタ/デストラクタ 518 //@{ 519 520 //! @brief コンストラクタです。 521 //! 522 //! @since 2010/01/26 初版。 523 //! MaterialResourceNumMaterialResourceNum524 MaterialResourceNum() 525 : bits(0) 526 {} 527 528 //@} 529 530 //---------------------------------------- 531 //! @name 設定/取得 532 //@{ 533 534 //! @brief テクスチャの数を取得します。 535 //! 536 //! @return テクスチャの数を返します。 537 //! 538 //! @since 2010/01/26 初版。 539 //! GetTexMapNumMaterialResourceNum540 u8 GetTexMapNum() const 541 { 542 return u8(internal::GetBits(bits, 0, 2)); 543 } 544 545 //! @brief TexSRT の数を取得します。 546 //! 547 //! @return TexSRT の数を返します。 548 //! 549 //! @since 2010/01/26 初版。 550 //! GetTexSRTNumMaterialResourceNum551 u8 GetTexSRTNum() const 552 { 553 return u8(internal::GetBits(bits, 2, 2)); 554 } 555 556 //! @brief TexCoordGen の数を取得します。 557 //! 558 //! @return TexCoordGen の数を返します。 559 //! 560 //! @since 2010/01/26 初版。 561 //! GetTexCoordGenNumMaterialResourceNum562 u8 GetTexCoordGenNum() const 563 { 564 return u8(internal::GetBits(bits, 4, 2)); 565 } 566 567 //! @brief TevStage の数を取得します。 568 //! 569 //! @return TevStage の数を返します。 570 //! 571 //! @since 2010/01/26 初版。 572 //! GetTevStageNumMaterialResourceNum573 u8 GetTevStageNum() const 574 { 575 return u8(internal::GetBits(bits, 6, 3)); 576 } 577 578 //! @brief AlphaCompare を持っているか調べます。 579 //! 580 //! @return AlphaCompare を持っていれば true を返します。 581 //! 582 //! @since 2010/01/26 初版。 583 //! HasAlphaCompareMaterialResourceNum584 bool HasAlphaCompare() const 585 { 586 return internal::TestBit(bits, 9); 587 } 588 589 //! @brief BlendMode を持っているか調べます。 590 //! 591 //! @return BlendMode を持っていれば true を返します。 592 //! 593 //! @since 2010/01/26 初版。 594 //! HasBlendModeMaterialResourceNum595 bool HasBlendMode() const 596 { 597 return internal::TestBit(bits, 10); 598 } 599 600 //! @brief テクスチャのみを使うか調べます。 601 //! 602 //! @return テクスチャのみを使う場合は true を返します。 603 //! 604 //! @since 2010/04/23 初版。 605 //! IsTextureOnlyMaterialResourceNum606 bool IsTextureOnly() const 607 { 608 return internal::TestBit(bits, 11); 609 } 610 611 //! @brief TexMap の数を設定します。 612 //! 613 //! @param value TexMap の数です。 614 //! 615 //! @since 2010/01/26 初版。 616 //! SetTexMapNumMaterialResourceNum617 void SetTexMapNum(u32 value) 618 { 619 NW_ASSERT(value <= TexMapMax); 620 this->SetBits(0, 2, value); 621 } 622 623 //! @brief TexSRT の数を設定します。 624 //! 625 //! @param value TexSRT の数です。 626 //! 627 //! @since 2010/01/26 初版。 628 //! SetTexSRTNumMaterialResourceNum629 void SetTexSRTNum(u32 value) 630 { 631 NW_ASSERT(value <= TexMapMax); 632 this->SetBits(2, 2, value); 633 } 634 635 //! @brief TexCoordGen の数を設定します。 636 //! 637 //! @param value TexCoordGen の数です。 638 //! 639 //! @since 2010/01/26 初版。 640 //! SetTexCoordGenNumMaterialResourceNum641 void SetTexCoordGenNum(u32 value) 642 { 643 NW_ASSERT(value <= TexMapMax); 644 this->SetBits(4, 2, value); 645 } 646 647 //! @brief TevStage の数を設定します。 648 //! 649 //! @param value TevStage の数です。 650 //! 651 //! @since 2010/01/26 初版。 652 //! SetTevStageNumMaterialResourceNum653 void SetTevStageNum(u32 value) 654 { 655 NW_ASSERT(value <= TevStageMax); 656 this->SetBits(6, 3, value); 657 } 658 659 //! @brief AlphaCompare を持つかを設定します。 660 //! 661 //! @param b AlphaCompare を持つ場合には true を指定します。 662 //! 663 //! @since 2010/01/26 初版。 664 //! SetAlphaCompareMaterialResourceNum665 void SetAlphaCompare(bool b) 666 { 667 this->SetBit(9, b); 668 } 669 670 //! @brief BlendMode を持つかを設定します。 671 //! 672 //! @param b BlendMode を持つ場合には true を指定します。 673 //! 674 //! @since 2010/01/26 初版。 675 //! SetBlendModeMaterialResourceNum676 void SetBlendMode(bool b) 677 { 678 this->SetBit(10, b); 679 } 680 681 //! @brief テクスチャのみを使うかを設定します。 682 //! 683 //! @param b テクスチャのみを使う場合には true を指定します。 684 //! 685 //! @since 2010/04/23 初版。 686 //! SetTextureOnlyMaterialResourceNum687 void SetTextureOnly(bool b) 688 { 689 this->SetBit(11, b); 690 } 691 692 //@} 693 694 //! @details :private 695 ut::ResU32 bits; 696 697 protected: 698 //! @details :private SetBitsMaterialResourceNum699 void SetBits(int pos, int len, u32 value) 700 { 701 u32 work = bits; 702 internal::SetBits(&work, pos, len, value); 703 bits = work; 704 } 705 706 //! @details :private SetBitMaterialResourceNum707 void SetBit(int pos, bool value) 708 { 709 u32 work = bits; 710 internal::SetBit(&work, pos, value); 711 bits = work; 712 } 713 }; 714 715 //--------------------------------------------------------------------------- 716 //! :category レイアウト・リソース 717 //! 718 //! @brief カラー情報です。 719 //! 720 //! @sa Lyt 721 //! @sa Material 722 //! @sa Picture 723 //! @sa WindowContent 724 //! 725 //! @since 2010/01/26 初版。 726 //--------------------------------------------------------------------------- 727 struct Color 728 { 729 //! @brief 型変換を行います。 730 //! 731 //! @return ut::Color8 型のオブジェクトを返します。 732 //! 733 //! @since 2010/01/26 初版。 734 //! Color8Color735 operator ut::Color8() const 736 { 737 return ut::Color8(r,g,b,a); 738 } 739 740 //! 赤色の成分です。 741 ut::ResU8 r; 742 //! 緑色の成分です。 743 ut::ResU8 g; 744 //! 青色の成分です。 745 ut::ResU8 b; 746 //! アルファ成分です。 747 ut::ResU8 a; 748 }; 749 750 //--------------------------------------------------------------------------- 751 //! :category レイアウト・リソース 752 //! 753 //! @brief マテリアル情報です。 754 //! 755 //! @details 756 //! この構造体に続いて、詳細情報の構造体が続きます。 757 //! 758 //! ・ TexMap resTexMaps[texNum]\n 759 //! ・ TexSRT texSRTs[texSRTNum]\n 760 //! ・ TexCoordGen texCoordGen[texCoordGenNum]\n 761 //! ・ TevStage tevStages[tevStageNum]\n 762 //! ・ AlphaCompare alphaCompare\n 763 //! ・ BlendMode blendMode 764 //! 765 //! どの詳細情報をいくつ持つかは resNum の値によって決まります。 766 //! 767 //! @sa MaterialList 768 //! 769 //! @since 2010/01/26 初版。 770 //--------------------------------------------------------------------------- 771 struct Material 772 { 773 //! 名前です。 774 char name[MaterialNameStrMax]; 775 //! カラー情報です。 776 Color colors[MatColorMax]; 777 778 //! 詳細設定の数です。 779 MaterialResourceNum resNum; 780 781 /* Additional Info 782 TexMap resTexMaps[texNum]; 783 TexSRT texSRTs[texSRTNum]; 784 TexCoordGen texCoordGen[texCoordGenNum]; 785 TevStage tevStages[tevStageNum]; 786 AlphaCompare alphaCompare; 787 BlendMode blendMode; 788 */ 789 }; 790 791 //--------------------------------------------------------------------------- 792 //! :category レイアウト・リソース 793 //! 794 //! @brief マテリアル情報のリストです。 795 //! 796 //! @details 797 //! ペインが参照するマテリアルのリストをペインに先立って定義します。 798 //! 799 //! blockHeader の kind には res::DATABLOCKKIND_MATERIALLIST が指定されます。 800 //! 801 //! この構造体に以下のデータ構造が続きます。 802 //! 803 //! ・ ut::ResU32 materialOffsetTable[materialNum]\n 804 //! ・ Material material0\n 805 //! ・ … 806 //! 807 //! materialOffsetTable は各マテリアル情報へのオフセット(データブロック先頭から)です。 808 //! 809 //! @sa Layout 810 //! 811 //! @since 2010/01/26 初版。 812 //--------------------------------------------------------------------------- 813 struct MaterialList 814 { 815 //! ヘッダです。 816 ut::BinaryBlockHeader blockHeader; 817 818 //! マテリアルの数です。 819 ut::ResU16 materialNum; 820 821 //! (未使用です) 822 ut::ResU8 padding[2]; 823 824 /* Additional Info 825 ut::ResU32 materialOffsetTable[materialNum]; 826 Material materials[materialNum]; 827 */ 828 }; 829 830 //--------------------------------------------------------------------------- 831 //! :category レイアウト・リソース 832 //! 833 //! @brief 子ペインの定義を開始するデータブロックです。 834 //! 835 //! @details 836 //! blockHeader の kind には res::DATABLOCKKIND_PANEBEGIN が指定されます。 837 //! 838 //! PaneBegin と PaneEnd により子ペイン列が定義されます。 839 //! 840 //! PaneBegin の前の Pane が親ペインとなります。 841 //! 842 //! ・ Pane : pane0\n 843 //! ・ PaneBegin\n 844 //! ・ Pane : pane1\n 845 //! ・ Pane : pane2\n 846 //! ・ PaneEnd 847 //! 848 //! この場合、 pane1 と pane2 は pane0 の子ペインとなります。 849 //! 850 //! Pane の代わりに Picture, Window, TextBox, Bounding も指定可能です。 851 //! 852 //! @sa Lyt 853 //! 854 //! @since 2010/01/26 初版。 855 //--------------------------------------------------------------------------- 856 struct PaneBegin 857 { 858 //! ヘッダです。 859 ut::BinaryBlockHeader blockHeader; 860 }; 861 862 //--------------------------------------------------------------------------- 863 //! :category レイアウト・リソース 864 //! 865 //! @brief 子ペインの定義を完了するデータブロックです。 866 //! 867 //! @details 868 //! blockHeader の kind には res::DATABLOCKKIND_PANEEND が指定されます。 869 //! 870 //! @sa Lyt 871 //! @sa PaneBegin 872 //! 873 //! @since 2010/01/26 初版。 874 //--------------------------------------------------------------------------- 875 struct PaneEnd 876 { 877 //! ヘッダです。 878 ut::BinaryBlockHeader blockHeader; 879 }; 880 881 //--------------------------------------------------------------------------- 882 //! :category レイアウト・リソース 883 //! 884 //! @brief Nullペインを定義するデータブロックです。 885 //! 886 //! @details 887 //! blockHeader の kind には res::DATABLOCKKIND_PANE が指定されます。 888 //! 889 //! @sa Lyt 890 //! @sa PaneBegin 891 //! 892 //! @since 2010/01/26 初版。 893 //--------------------------------------------------------------------------- 894 struct Pane 895 { 896 //! ヘッダです。 897 ut::BinaryBlockHeader blockHeader; 898 899 //! フラグです (lyt::PaneFlag)。 900 ut::ResU8 flag; 901 //! 位置基準です (lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 902 ut::ResU8 basePosition; 903 //! アルファ値です。 904 ut::ResU8 alpha; 905 //! (未使用です) 906 ut::ResU8 padding[1]; 907 908 //! ペインの名前です。 909 char name[ResourceNameStrMax]; 910 //! ユーザデータです。 911 char userData[UserDataStrMax]; 912 //! トランスレート値です。 913 Vec3 translate; 914 //! ローテート値です。 915 Vec3 rotate; 916 //! スケール値です。 917 Vec2 scale; 918 //! サイズです。 919 Size size; 920 }; 921 922 //--------------------------------------------------------------------------- 923 //! :category レイアウト・リソース 924 //! 925 //! @brief Pictureペインを定義するデータブロックです。 926 //! 927 //! @details 928 //! blockHeader の kind には res::DATABLOCKKIND_PICTURE が指定されます。 929 //! 930 //! この構造体に以下のデータ構造が続きます。 931 //! 932 //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; 933 //! 934 //! @sa Lyt 935 //! @sa PaneBegin 936 //! 937 //! @since 2010/01/26 初版。 938 //--------------------------------------------------------------------------- 939 struct Picture : public Pane 940 { 941 //! 頂点カラーです。 942 Color vtxCols[VERTEXCOLOR_MAX]; 943 944 //! マテリアルのインデックスです。 945 ut::ResU16 materialIdx; 946 //! テクスチャ座標の数です。 947 ut::ResU8 texCoordNum; 948 //! (未使用です) 949 ut::ResU8 padding[1]; 950 951 /* Additional Info 952 res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; 953 */ 954 }; 955 956 //--------------------------------------------------------------------------- 957 //! :category レイアウト・リソース 958 //! 959 //! @brief TextBoxペインを定義するデータブロックです。 960 //! 961 //! @details 962 //! blockHeader の kind には res::DATABLOCKKIND_TEXTBOX が指定されます。 963 //! 964 //! この構造体に以下のデータ構造が続きます。 965 //! 966 //! ・ wchar_t text[]; 967 //! 968 //! @sa Lyt 969 //! @sa PaneBegin 970 //! 971 //! @since 2010/01/26 初版。 972 //--------------------------------------------------------------------------- 973 struct TextBox : public Pane 974 { 975 //! 文字列用バッファに確保するサイズです。 976 ut::ResU16 textBufBytes; 977 //! 初期テキスト文字列のバイト数です。 978 ut::ResU16 textStrBytes; 979 980 //! マテリアルのインデックスです。 981 ut::ResU16 materialIdx; 982 //! フォントへのインデックスです。 983 ut::ResU16 fontIdx; 984 985 //! テキスト表示位置基準です(lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 986 ut::ResU8 textPosition; 987 //! 行そろえ指定です(TextAlignment)。 988 ut::ResU8 textAlignment; 989 //! (未使用です) 990 ut::ResU8 padding[2]; 991 992 //! text へのオフセットです(データブロック先頭から)。 993 ut::ResU32 textStrOffset; 994 //! テキストの表示色です。 995 Color textCols[TEXTCOLOR_MAX]; 996 //! フォントのサイズです。 997 Size fontSize; 998 //! テキストの文字間隔です。 999 ut::ResF32 charSpace; 1000 //! テキストの行間隔です。 1001 ut::ResF32 lineSpace; 1002 1003 /* Additional Info 1004 wchar_t text[]; // テキスト 1005 */ 1006 }; 1007 1008 //--------------------------------------------------------------------------- 1009 //! :category レイアウト・リソース 1010 //! 1011 //! @brief Windowのフレーム情報です。 1012 //! 1013 //! @sa Window 1014 //! 1015 //! @since 2010/01/26 初版。 1016 //--------------------------------------------------------------------------- 1017 struct WindowFrame 1018 { 1019 //! マテリアルのインデックスです。 1020 ut::ResU16 materialIdx; 1021 //! テクスチャの反転表示の指定です(lyt::TextureFlip)。 1022 ut::ResU8 textureFlip; 1023 //! (未使用です) 1024 ut::ResU8 padding[1]; 1025 }; 1026 1027 //--------------------------------------------------------------------------- 1028 //! :category レイアウト・リソース 1029 //! 1030 //! @brief Windowのコンテント情報です。 1031 //! 1032 //! @details 1033 //! この構造体に以下のデータ構造が続きます。 1034 //! 1035 //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX] 1036 //! 1037 //! @sa Window 1038 //! 1039 //! @since 2010/01/26 初版。 1040 //--------------------------------------------------------------------------- 1041 struct WindowContent 1042 { 1043 //! 頂点カラーです。 1044 Color vtxCols[VERTEXCOLOR_MAX]; 1045 1046 //! マテリアルのインデックスです。 1047 ut::ResU16 materialIdx; 1048 //! テクスチャ座標の数です。 1049 ut::ResU8 texCoordNum; 1050 //! (未使用です) 1051 ut::ResU8 padding[1]; 1052 1053 /* Additional Info 1054 math::VEC2 texCoords[texCoordNum][VERTEX_MAX]; 1055 */ 1056 }; 1057 1058 //--------------------------------------------------------------------------- 1059 //! :category レイアウト・リソース 1060 //! 1061 //! @brief Windowペインを定義するデータブロックです。 1062 //! 1063 //! @details 1064 //! blockHeader の kind には res::DATABLOCKKIND_WINDOW が指定されます。 1065 //! 1066 //! この構造体に以下のデータ構造が続きます。 1067 //! 1068 //! ・ WindowContent content\n 1069 //! ・ ut::ResU32 frameOffsetTable[frameNum]\n 1070 //! ・ WindowFrame frame0\n 1071 //! ・ … 1072 //! 1073 //! frameOffsetTable は WindowFrame へのオフセット(データブロック先頭から)です。 1074 //! 1075 //! @sa Lyt 1076 //! @sa PaneBegin 1077 //! 1078 //! @since 2010/01/26 初版。 1079 //--------------------------------------------------------------------------- 1080 struct Window : public Pane 1081 { 1082 //! ペインの各辺の拡大量です。 1083 InflationLRTB inflation; 1084 1085 //! フレーム数です。 1086 ut::ResU8 frameNum; 1087 //! (未使用です) 1088 ut::ResU8 padding[3]; 1089 1090 //! content へのオフセットです(データブロック先頭から)。 1091 ut::ResU32 contentOffset; 1092 //! frameOffsetTable へのオフセットです(データブロック先頭から)。 1093 ut::ResU32 frameOffsetTableOffset; 1094 1095 /* Additional Info 1096 1097 WindowContent content; 1098 1099 internal::ResU32 frameOffsetTable[frameNum]; 1100 WindowFrame frames; 1101 1102 */ 1103 }; 1104 1105 //--------------------------------------------------------------------------- 1106 //! :category レイアウト・リソース 1107 //! 1108 //! @brief Boundingペインを定義するデータブロックです。 1109 //! 1110 //! @details 1111 //! blockHeader の kind には res::DATABLOCKKIND_BOUNDING が指定されます。 1112 //! 1113 //! @sa Lyt 1114 //! @sa PaneBegin 1115 //! 1116 //! @since 2010/01/26 初版。 1117 //--------------------------------------------------------------------------- 1118 struct Bounding : public Pane 1119 { 1120 }; 1121 1122 //--------------------------------------------------------------------------- 1123 //! :category レイアウト・リソース 1124 //! 1125 //! @brief 拡張ユーザデータを定義するデータブロックです。 1126 //! 1127 //! @details 1128 //! 直近に定義されたペインに拡張ユーザデータを設定します。 1129 //! 1130 //! blockHeader の kind には res::DATABLOCKKIND_USERDATALIST が指定されます。 1131 //! 1132 //! この構造体に以下のデータ構造が続きます。 1133 //! 1134 //! ・ ExtUserData extUserData[num]\n 1135 //! ・ u8 data[] 1136 //! 1137 //! @sa Lyt 1138 //! @sa Pane 1139 //! 1140 //! @since 2010/01/26 初版。 1141 //--------------------------------------------------------------------------- 1142 struct ExtUserDataList 1143 { 1144 //! ヘッダです。 1145 ut::BinaryBlockHeader blockHeader; 1146 1147 //! ユーザデータの数です。 1148 ut::ResU16 num; 1149 //! (未使用です) 1150 ut::ResU8 padding[2]; 1151 1152 /* Additional Info 1153 1154 ExtUserData extUserData[num]; 1155 1156 */ 1157 }; 1158 1159 //--------------------------------------------------------------------------- 1160 //! :category レイアウト・リソース 1161 //! 1162 //! @brief 子グループの定義を開始するデータブロックです。 1163 //! 1164 //! @details 1165 //! GroupBegin と GroupEnd により子グループ列が定義されます。 1166 //! 1167 //! GroupBegin の前の Group が親グループとなります。 1168 //! 1169 //! @sa Lyt 1170 //! 1171 //! @since 2010/01/26 初版。 1172 //--------------------------------------------------------------------------- 1173 struct GroupBegin 1174 { 1175 //! ヘッダです。 1176 ut::BinaryBlockHeader blockHeader; 1177 }; 1178 1179 //--------------------------------------------------------------------------- 1180 //! :category レイアウト・リソース 1181 //! 1182 //! @brief 子グループの定義を完了するデータブロックです。 1183 //! 1184 //! @details 1185 //! blockHeader の kind には res::DATABLOCKKIND_GROUPEND が指定されます。 1186 //! 1187 //! @sa Lyt 1188 //! @sa GroupBegin 1189 //! 1190 //! @since 2010/01/26 初版。 1191 //--------------------------------------------------------------------------- 1192 struct GroupEnd 1193 { 1194 //! ヘッダです。 1195 ut::BinaryBlockHeader blockHeader; 1196 }; 1197 1198 //--------------------------------------------------------------------------- 1199 //! :category レイアウト・リソース 1200 //! 1201 //! @brief グループを定義するデータブロックです。 1202 //! 1203 //! @details 1204 //! blockHeader の kind には res::DATABLOCKKIND_GROUP が指定されます。 1205 //! 1206 //! この構造体に以下のデータ構造が続きます。 1207 //! 1208 //! ・ char panes[paneNum][ResourceNameStrMax] 1209 //! 1210 //! panes にはグループに属するペインの名前が格納されます。 1211 //! 1212 //! @sa Lyt 1213 //! @sa GroupBegin 1214 //! 1215 //! @since 2010/01/26 初版。 1216 //--------------------------------------------------------------------------- 1217 struct Group 1218 { 1219 //! ヘッダです。 1220 ut::BinaryBlockHeader blockHeader; 1221 1222 //! グループ名です。 1223 char name[ResourceNameStrMax]; 1224 1225 //! グループに属するペインの数です。 1226 ut::ResU16 paneNum; 1227 //! (未使用です) 1228 ut::ResU8 padding[2]; 1229 1230 /* Additional Info 1231 1232 char panes[paneNum][ResourceNameStrMax]; 1233 1234 */ 1235 }; 1236 1237 //@} 1238 1239 //!--------------------------------------------------------------------------* 1240 //! @name アニメーション・リソース 1241 //@{ 1242 1243 //--------------------------------------------------------------------------- 1244 //! :category アニメーション・リソース 1245 //! 1246 //! @brief アニメーション・リソースファイルのヘッダです。 1247 //! 1248 //! @details 1249 //! fileHeader の kind には res::FILESIGNATURE_CLAN が指定されます。 1250 //! 1251 //! この構造体に以下のデータブロックの組み合わせが続きます。 1252 //! 1253 //! ・ AnimationTagBlock\n 1254 //! ・ AnimationShareBlock\n 1255 //! ・ AnimationBlock 1256 //! 1257 //! @since 2010/01/26 初版。 1258 //--------------------------------------------------------------------------- 1259 struct Lan 1260 { 1261 //! ファイルヘッダです。 1262 ut::BinaryFileHeader fileHeader; 1263 }; 1264 1265 //--------------------------------------------------------------------------- 1266 //! :category アニメーション・リソース 1267 //! 1268 //! @brief アニメーション区間タグを定義するデータブロックです。 1269 //! 1270 //! @details 1271 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMTAG が指定されます。 1272 //! 1273 //! この構造体に以下のデータ構造が続きます。 1274 //! 1275 //! ・ char name[]\n 1276 //! ・ AnimationGroupRef groups[groupNum] 1277 //! 1278 //! @sa Lan 1279 //! 1280 //! @since 2010/01/26 初版。 1281 //--------------------------------------------------------------------------- 1282 struct AnimationTagBlock 1283 { 1284 //! ヘッダです。 1285 ut::BinaryBlockHeader blockHeader; 1286 1287 //! アニメーション区間タグの通し番号です。 1288 ut::ResU16 tagOrder; 1289 //! アニメーション区間タグのグループ数です。 1290 ut::ResU16 groupNum; 1291 1292 //! name へのオフセットです(データブロック先頭から)。 1293 ut::ResU32 nameOffset; 1294 //! groups へのオフセットです(データブロック先頭から)。 1295 ut::ResU32 groupsOffset; 1296 1297 //! アニメーション区間の開始フレームです。 1298 ut::ResS16 startFrame; 1299 //! アニメーション区間の終了フレームです。 1300 ut::ResS16 endFrame; 1301 1302 //! フラグです(lyt::AnimTagFlag)。 1303 ut::ResU8 flag; 1304 //! (未使用です) 1305 ut::ResU8 padding[3]; 1306 1307 /* Additional Info 1308 1309 char name[]; 1310 AnimationGroupRef groups[groupNum]; 1311 1312 */ 1313 }; 1314 1315 //--------------------------------------------------------------------------- 1316 //! :category アニメーション・リソース 1317 //! 1318 //! @brief アニメーション共有情報を定義するデータブロックです。 1319 //! 1320 //! @details 1321 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMSHARE が指定されます。 1322 //! 1323 //! この構造体に以下のデータ構造が続きます。 1324 //! 1325 //! ・ AnimationShareInfo animShareInfos[shareNum] 1326 //! 1327 //! @sa Lan 1328 //! 1329 //! @since 2010/01/26 初版。 1330 //--------------------------------------------------------------------------- 1331 struct AnimationShareBlock 1332 { 1333 //! ヘッダです。 1334 ut::BinaryBlockHeader blockHeader; 1335 1336 //! animShareInfos へのオフセットです(データブロック先頭から)。 1337 ut::ResU32 animShareInfoOffset; 1338 1339 //! アニメーション共有情報の数です。 1340 ut::ResU16 shareNum; 1341 //! (未使用です) 1342 ut::ResU8 padding[2]; 1343 1344 /* Additional Info 1345 1346 AnimationShareInfo animShareInfos[shareNum]; 1347 1348 */ 1349 }; 1350 1351 //--------------------------------------------------------------------------- 1352 //! :category アニメーション・リソース 1353 //! 1354 //! @brief アニメーションを定義するデータブロックです。 1355 //! 1356 //! @details 1357 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMINFO が指定されます。 1358 //! 1359 //! この構造体に以下のデータ構造が続きます。 1360 //! 1361 //! ・ ut::ResU32 fileNameOffsets[fileNum]\n 1362 //! ・ u8 namePool[]\n 1363 //! ・ ut::ResU32 animContOffsets[animContNum]\n 1364 //! ・ AnimationContent animCont0\n 1365 //! ・ … 1366 //! 1367 //! fileNameOffsets 配列には参照するテクスチャリソース名への 1368 //! オフセット(fileNameOffsetsより)を格納します。 1369 //! 1370 //! animContOffsets 配列にはアニメーション内容への 1371 //! オフセット(データブロック先頭より)を格納します。 1372 //! 1373 //! @sa Lan 1374 //! 1375 //! @since 2010/01/26 初版。 1376 //--------------------------------------------------------------------------- 1377 struct AnimationBlock 1378 { 1379 //! ヘッダです。 1380 ut::BinaryBlockHeader blockHeader; 1381 //! フレーム数です。 1382 ut::ResU16 frameSize; 1383 //! ループする場合は 1 を格納します。 1384 ut::ResU8 loop; 1385 //! (未使用です) 1386 ut::ResU8 padding[1]; 1387 1388 //! 参照するテクスチャリソースの数です。 1389 ut::ResU16 fileNum; 1390 //! アニメーション内容の数です。 1391 ut::ResU16 animContNum; 1392 1393 //! animContOffsets へのオフセットです(データブロック先頭から)。 1394 ut::ResU32 animContOffsetsOffset; 1395 1396 /* Additional Info 1397 1398 ut::ResU32 fileNameOffsets[fileNum]; 1399 u8 namePool[]; 1400 ut::ResU32 animContOffsets[animContNum]; 1401 1402 */ 1403 }; 1404 1405 //--------------------------------------------------------------------------- 1406 //! :category アニメーション・リソース 1407 //! 1408 //! @brief アニメーション内容を定義します。 1409 //! 1410 //! @details 1411 //! この構造体に以下のデータ構造が続きます。 1412 //! 1413 //! ・ ut::ResU32 animInfoOffsets[num]\n 1414 //! ・ AnimationInfo animInfo0\n 1415 //! ・ … 1416 //! 1417 //! @sa Lan 1418 //! @sa AnimationBlock 1419 //! 1420 //! @since 2010/01/26 初版。 1421 //--------------------------------------------------------------------------- 1422 struct AnimationContent 1423 { 1424 //! アニメーションの名前です。 1425 char name[MaterialNameStrMax]; // ペイン名とマテリアル名の長い方の文字数分確保 1426 1427 //! アニメーション情報の数です。 1428 ut::ResU8 num; 1429 //! タイプ(lyt::AnimContentType)です。 1430 ut::ResU8 type; 1431 //! (未使用です) 1432 ut::ResU8 padding[2]; 1433 1434 /* Additional Info 1435 1436 ut::ResU32 animInfoOffsets[num]; 1437 1438 */ 1439 }; 1440 1441 //--------------------------------------------------------------------------- 1442 //! :category アニメーション・リソース 1443 //! 1444 //! @brief アニメーション情報を定義します。 1445 //! 1446 //! @details 1447 //! kind には以下のアニメーションタイプのいずれかが指定されます。 1448 //! 1449 //! ・ lyt::ANIMATIONTYPE_PANESRT\n 1450 //! ・ lyt::ANIMATIONTYPE_VISIBILITY\n 1451 //! ・ lyt::ANIMATIONTYPE_VTXCOLOR\n 1452 //! ・ lyt::ANIMATIONTYPE_MATCOLOR\n 1453 //! ・ lyt::ANIMATIONTYPE_TEXSRT\n 1454 //! ・ lyt::ANIMATIONTYPE_TEXPATTERN 1455 //! 1456 //! この構造体に以下のデータ構造が続きます。 1457 //! 1458 //! ・ ut::ResU32 animTargetOffsets[num]\n 1459 //! ・ AnimationTarget animTarget0\n 1460 //! ・ … 1461 //! 1462 //! animTargetOffsets 配列は AnimationTarget へのオフセット(AnimationInfo 先頭から)を格納します。 1463 //! 1464 //! @sa Lan 1465 //! @sa AnimationContent 1466 //! 1467 //! @since 2010/01/26 初版。 1468 //--------------------------------------------------------------------------- 1469 struct AnimationInfo 1470 { 1471 //! アニメーションタイプです。 1472 ut::ResU32 kind; 1473 1474 //! アニメーション・ターゲットの数です。 1475 ut::ResU8 num; 1476 //! (未使用です) 1477 ut::ResU8 padding[3]; 1478 1479 /* Additional Info 1480 1481 ut::ResU32 animTargetOffsets[num]; 1482 1483 */ 1484 }; 1485 1486 //--------------------------------------------------------------------------- 1487 //! :category アニメーション・リソース 1488 //! 1489 //! @brief アニメーション・ターゲットを定義します。 1490 //! 1491 //! @details 1492 //! アニメーションの対象とカーブの情報です。 1493 //! 1494 //! target にはアニメーションの対象に応じて以下の列挙型のいずれかが指定されます。 1495 //! 1496 //! ・ lyt::AnimTargetPane\n 1497 //! ・ lyt::AnimTargetVisibility\n 1498 //! ・ lyt::AnimTargetPaneColor\n 1499 //! ・ lyt::AnimTargetMatColor\n 1500 //! ・ lyt::AnimTargetTexSRT\n 1501 //! ・ lyt::AnimTargetTexPattern 1502 //! 1503 //! この構造体に以下のデータ構造が続きます。 1504 //! 1505 //! ・ HermiteKey keys[keyNum] 1506 //! 1507 //! または 1508 //! 1509 //! ・ StepKey keys[keyNum] 1510 //! 1511 //! @sa Lan 1512 //! @sa AnimationInfo 1513 //! 1514 //! @since 2010/01/26 初版。 1515 //--------------------------------------------------------------------------- 1516 struct AnimationTarget 1517 { 1518 //! アニメーション対象が配列の場合のインデックスです。 1519 ut::ResU8 id; 1520 //! アニメーション対象の属性をあらわす列挙値です。 1521 ut::ResU8 target; 1522 //! カーブの種類です(lyt::AnimCurve)。 1523 ut::ResU8 curveType; 1524 //! (未使用です) 1525 ut::ResU8 padding[1]; 1526 1527 //! キーの数です。 1528 ut::ResU16 keyNum; 1529 //! (未使用です) 1530 ut::ResU8 padding2[2]; 1531 1532 //! keys へのオフセットです(AnimationTarget先頭から)。 1533 ut::ResU32 keysOffset; 1534 1535 /* Additional Info 1536 1537 HermiteKey|StepKey keys[keyNum]; 1538 1539 */ 1540 }; 1541 1542 //--------------------------------------------------------------------------- 1543 //! :category アニメーション・リソース 1544 //! 1545 //! @brief エルミート曲線のキーを定義します。 1546 //! 1547 //! @sa Lan 1548 //! @sa AnimationTarget 1549 //! 1550 //! @since 2010/01/26 初版。 1551 //--------------------------------------------------------------------------- 1552 struct HermiteKey 1553 { 1554 //! フレームです。 1555 ut::ResF32 frame; 1556 //! 値です。 1557 ut::ResF32 value; 1558 //! 傾きです。 1559 ut::ResF32 slope; 1560 }; 1561 1562 //--------------------------------------------------------------------------- 1563 //! :category アニメーション・リソース 1564 //! 1565 //! @brief 階段状に変化するアニメーションカーブのキーを定義します。 1566 //! 1567 //! @sa Lan 1568 //! @sa AnimationTarget 1569 //! 1570 //! @since 2010/01/26 初版。 1571 //--------------------------------------------------------------------------- 1572 struct StepKey 1573 { 1574 //! フレームです。 1575 ut::ResF32 frame; 1576 //! 値です。 1577 ut::ResU16 value; 1578 //! (未使用です) 1579 ut::ResU16 padding[1]; 1580 }; 1581 1582 //@} 1583 1584 //!--------------------------------------------------------------------------* 1585 //! @name テクスチャイメージ・リソース 1586 //@{ 1587 1588 //--------------------------------------------------------------------------- 1589 //! :category テクスチャイメージ・リソース 1590 //! 1591 //! @brief テクスチャイメージ・リソースファイルのヘッダです。 1592 //! 1593 //! @details 1594 //! fileHeader の kind には res::FILESIGNATURE_CLIM が指定されます。 1595 //! 1596 //! テクスチャイメージ・リソースファイルは以下のような構造になっています。 1597 //! 1598 //! ・ u8 textureImage[imageSize]\n 1599 //! ・ Lim limHeader\n 1600 //! ・ Image imageInfo\n 1601 //! ・ ImageSize imageSize 1602 //! 1603 //! テクスチャイメージはハードウェアによるアライメント制限があるため 1604 //! ファイルの先頭に配置されます。 1605 //! 1606 //! ファイルの末尾には ImageSize 構造体が格納されます。 1607 //! 1608 //! @since 2010/01/26 初版。 1609 //--------------------------------------------------------------------------- 1610 struct Lim 1611 { 1612 //! ファイルヘッダです。 1613 ut::BinaryFileHeader fileHeader; 1614 }; 1615 1616 //--------------------------------------------------------------------------- 1617 //! :category テクスチャイメージ・リソース 1618 //! 1619 //! @brief テクスチャイメージ情報のデータブロックです。 1620 //! 1621 //! @details 1622 //! blockHeader の kind には res::DATABLOCKKIND_IMAGE が指定されます。 1623 //! 1624 //! @sa Lim 1625 //! 1626 //! @since 2010/01/26 初版。 1627 //--------------------------------------------------------------------------- 1628 struct Image 1629 { 1630 //! ヘッダです。 1631 ut::BinaryBlockHeader blockHeader; 1632 1633 //! イメージの幅です。 1634 ut::ResU16 width; 1635 1636 //! イメージの高さです。 1637 ut::ResU16 height; 1638 1639 //! 画像データのフォーマットです(lyt::TexFormat)。 1640 ut::ResU8 format; 1641 1642 //! (未使用です) 1643 ut::ResU8 padding[3]; 1644 }; 1645 1646 //--------------------------------------------------------------------------- 1647 //! :category テクスチャイメージ・リソース 1648 //! 1649 //! @brief テクスチャイメージのサイズ情報です。 1650 //! 1651 //! @details 1652 //! テクスチャイメージ・リソースファイルの先頭に配置される画像データの 1653 //! バイト数の情報を持ちます。 1654 //! 1655 //! @sa Lim 1656 //! 1657 //! @since 2010/01/26 初版。 1658 //--------------------------------------------------------------------------- 1659 struct ImageSize 1660 { 1661 //! 画像データのバイト数です。(4の倍数) 1662 ut::ResU32 imageSize; 1663 }; 1664 1665 } // namespace nw::lyt::res 1666 } // namespace nw::lyt 1667 } // namespace nw 1668 1669 #endif // NW_LYT_RESOURCES_H_ 1670