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: 25477 $ 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 private: SetBitsMaterialResourceNum698 void SetBits(int pos, int len, u32 value) 699 { 700 u32 work = bits; 701 internal::SetBits(&work, pos, len, value); 702 bits = work; 703 } 704 SetBitMaterialResourceNum705 void SetBit(int pos, bool value) 706 { 707 u32 work = bits; 708 internal::SetBit(&work, pos, value); 709 bits = work; 710 } 711 }; 712 713 //--------------------------------------------------------------------------- 714 //! :category レイアウト・リソース 715 //! 716 //! @brief カラー情報です。 717 //! 718 //! @sa Lyt 719 //! @sa Material 720 //! @sa Picture 721 //! @sa WindowContent 722 //! 723 //! @since 2010/01/26 初版。 724 //--------------------------------------------------------------------------- 725 struct Color 726 { 727 //! @brief 型変換を行います。 728 //! 729 //! @return ut::Color8 型のオブジェクトを返します。 730 //! 731 //! @since 2010/01/26 初版。 732 //! Color8Color733 operator ut::Color8() const 734 { 735 return ut::Color8(r,g,b,a); 736 } 737 738 //! 赤色の成分です。 739 ut::ResU8 r; 740 //! 緑色の成分です。 741 ut::ResU8 g; 742 //! 青色の成分です。 743 ut::ResU8 b; 744 //! アルファ成分です。 745 ut::ResU8 a; 746 }; 747 748 //--------------------------------------------------------------------------- 749 //! :category レイアウト・リソース 750 //! 751 //! @brief マテリアル情報です。 752 //! 753 //! @details 754 //! この構造体に続いて、詳細情報の構造体が続きます。 755 //! 756 //! ・ TexMap resTexMaps[texNum]\n 757 //! ・ TexSRT texSRTs[texSRTNum]\n 758 //! ・ TexCoordGen texCoordGen[texCoordGenNum]\n 759 //! ・ TevStage tevStages[tevStageNum]\n 760 //! ・ AlphaCompare alphaCompare\n 761 //! ・ BlendMode blendMode 762 //! 763 //! どの詳細情報をいくつ持つかは resNum の値によって決まります。 764 //! 765 //! @sa MaterialList 766 //! 767 //! @since 2010/01/26 初版。 768 //--------------------------------------------------------------------------- 769 struct Material 770 { 771 //! 名前です。 772 char name[MaterialNameStrMax]; 773 //! カラー情報です。 774 Color colors[MatColorMax]; 775 776 //! 詳細設定の数です。 777 MaterialResourceNum resNum; 778 779 /* Additional Info 780 TexMap resTexMaps[texNum]; 781 TexSRT texSRTs[texSRTNum]; 782 TexCoordGen texCoordGen[texCoordGenNum]; 783 TevStage tevStages[tevStageNum]; 784 AlphaCompare alphaCompare; 785 BlendMode blendMode; 786 */ 787 }; 788 789 //--------------------------------------------------------------------------- 790 //! :category レイアウト・リソース 791 //! 792 //! @brief マテリアル情報のリストです。 793 //! 794 //! @details 795 //! ペインが参照するマテリアルのリストをペインに先立って定義します。 796 //! 797 //! blockHeader の kind には res::DATABLOCKKIND_MATERIALLIST が指定されます。 798 //! 799 //! この構造体に以下のデータ構造が続きます。 800 //! 801 //! ・ ut::ResU32 materialOffsetTable[materialNum]\n 802 //! ・ Material material0\n 803 //! ・ … 804 //! 805 //! materialOffsetTable は各マテリアル情報へのオフセット(データブロック先頭から)です。 806 //! 807 //! @sa Layout 808 //! 809 //! @since 2010/01/26 初版。 810 //--------------------------------------------------------------------------- 811 struct MaterialList 812 { 813 //! ヘッダです。 814 ut::BinaryBlockHeader blockHeader; 815 816 //! マテリアルの数です。 817 ut::ResU16 materialNum; 818 819 //! (未使用です) 820 ut::ResU8 padding[2]; 821 822 /* Additional Info 823 ut::ResU32 materialOffsetTable[materialNum]; 824 Material materials[materialNum]; 825 */ 826 }; 827 828 //--------------------------------------------------------------------------- 829 //! :category レイアウト・リソース 830 //! 831 //! @brief 子ペインの定義を開始するデータブロックです。 832 //! 833 //! @details 834 //! blockHeader の kind には res::DATABLOCKKIND_PANEBEGIN が指定されます。 835 //! 836 //! PaneBegin と PaneEnd により子ペイン列が定義されます。 837 //! 838 //! PaneBegin の前の Pane が親ペインとなります。 839 //! 840 //! ・ Pane : pane0\n 841 //! ・ PaneBegin\n 842 //! ・ Pane : pane1\n 843 //! ・ Pane : pane2\n 844 //! ・ PaneEnd 845 //! 846 //! この場合、 pane1 と pane2 は pane0 の子ペインとなります。 847 //! 848 //! Pane の代わりに Picture, Window, TextBox, Bounding も指定可能です。 849 //! 850 //! @sa Lyt 851 //! 852 //! @since 2010/01/26 初版。 853 //--------------------------------------------------------------------------- 854 struct PaneBegin 855 { 856 //! ヘッダです。 857 ut::BinaryBlockHeader blockHeader; 858 }; 859 860 //--------------------------------------------------------------------------- 861 //! :category レイアウト・リソース 862 //! 863 //! @brief 子ペインの定義を完了するデータブロックです。 864 //! 865 //! @details 866 //! blockHeader の kind には res::DATABLOCKKIND_PANEEND が指定されます。 867 //! 868 //! @sa Lyt 869 //! @sa PaneBegin 870 //! 871 //! @since 2010/01/26 初版。 872 //--------------------------------------------------------------------------- 873 struct PaneEnd 874 { 875 //! ヘッダです。 876 ut::BinaryBlockHeader blockHeader; 877 }; 878 879 //--------------------------------------------------------------------------- 880 //! :category レイアウト・リソース 881 //! 882 //! @brief Nullペインを定義するデータブロックです。 883 //! 884 //! @details 885 //! blockHeader の kind には res::DATABLOCKKIND_PANE が指定されます。 886 //! 887 //! @sa Lyt 888 //! @sa PaneBegin 889 //! 890 //! @since 2010/01/26 初版。 891 //--------------------------------------------------------------------------- 892 struct Pane 893 { 894 //! ヘッダです。 895 ut::BinaryBlockHeader blockHeader; 896 897 //! フラグです (lyt::PaneFlag)。 898 ut::ResU8 flag; 899 //! 位置基準です (lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 900 ut::ResU8 basePosition; 901 //! アルファ値です。 902 ut::ResU8 alpha; 903 //! (未使用です) 904 ut::ResU8 padding[1]; 905 906 //! ペインの名前です。 907 char name[ResourceNameStrMax]; 908 //! ユーザデータです。 909 char userData[UserDataStrMax]; 910 //! トランスレート値です。 911 Vec3 translate; 912 //! ローテート値です。 913 Vec3 rotate; 914 //! スケール値です。 915 Vec2 scale; 916 //! サイズです。 917 Size size; 918 }; 919 920 //--------------------------------------------------------------------------- 921 //! :category レイアウト・リソース 922 //! 923 //! @brief Pictureペインを定義するデータブロックです。 924 //! 925 //! @details 926 //! blockHeader の kind には res::DATABLOCKKIND_PICTURE が指定されます。 927 //! 928 //! この構造体に以下のデータ構造が続きます。 929 //! 930 //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; 931 //! 932 //! @sa Lyt 933 //! @sa PaneBegin 934 //! 935 //! @since 2010/01/26 初版。 936 //--------------------------------------------------------------------------- 937 struct Picture : public Pane 938 { 939 //! 頂点カラーです。 940 Color vtxCols[VERTEXCOLOR_MAX]; 941 942 //! マテリアルのインデックスです。 943 ut::ResU16 materialIdx; 944 //! テクスチャ座標の数です。 945 ut::ResU8 texCoordNum; 946 //! (未使用です) 947 ut::ResU8 padding[1]; 948 949 /* Additional Info 950 res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; 951 */ 952 }; 953 954 //--------------------------------------------------------------------------- 955 //! :category レイアウト・リソース 956 //! 957 //! @brief TextBoxペインを定義するデータブロックです。 958 //! 959 //! @details 960 //! blockHeader の kind には res::DATABLOCKKIND_TEXTBOX が指定されます。 961 //! 962 //! この構造体に以下のデータ構造が続きます。 963 //! 964 //! ・ wchar_t text[]; 965 //! 966 //! @sa Lyt 967 //! @sa PaneBegin 968 //! 969 //! @since 2010/01/26 初版。 970 //--------------------------------------------------------------------------- 971 struct TextBox : public Pane 972 { 973 //! 文字列用バッファに確保するサイズです。 974 ut::ResU16 textBufBytes; 975 //! 初期テキスト文字列のバイト数です。 976 ut::ResU16 textStrBytes; 977 978 //! マテリアルのインデックスです。 979 ut::ResU16 materialIdx; 980 //! フォントへのインデックスです。 981 ut::ResU16 fontIdx; 982 983 //! テキスト表示位置基準です(lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 984 ut::ResU8 textPosition; 985 //! 行そろえ指定です(TextAlignment)。 986 ut::ResU8 textAlignment; 987 //! (未使用です) 988 ut::ResU8 padding[2]; 989 990 //! text へのオフセットです(データブロック先頭から)。 991 ut::ResU32 textStrOffset; 992 //! テキストの表示色です。 993 Color textCols[TEXTCOLOR_MAX]; 994 //! フォントのサイズです。 995 Size fontSize; 996 //! テキストの文字間隔です。 997 ut::ResF32 charSpace; 998 //! テキストの行間隔です。 999 ut::ResF32 lineSpace; 1000 1001 /* Additional Info 1002 wchar_t text[]; // テキスト 1003 */ 1004 }; 1005 1006 //--------------------------------------------------------------------------- 1007 //! :category レイアウト・リソース 1008 //! 1009 //! @brief Windowのフレーム情報です。 1010 //! 1011 //! @sa Window 1012 //! 1013 //! @since 2010/01/26 初版。 1014 //--------------------------------------------------------------------------- 1015 struct WindowFrame 1016 { 1017 //! マテリアルのインデックスです。 1018 ut::ResU16 materialIdx; 1019 //! テクスチャの反転表示の指定です(lyt::TextureFlip)。 1020 ut::ResU8 textureFlip; 1021 //! (未使用です) 1022 ut::ResU8 padding[1]; 1023 }; 1024 1025 //--------------------------------------------------------------------------- 1026 //! :category レイアウト・リソース 1027 //! 1028 //! @brief Windowのコンテント情報です。 1029 //! 1030 //! @details 1031 //! この構造体に以下のデータ構造が続きます。 1032 //! 1033 //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX] 1034 //! 1035 //! @sa Window 1036 //! 1037 //! @since 2010/01/26 初版。 1038 //--------------------------------------------------------------------------- 1039 struct WindowContent 1040 { 1041 //! 頂点カラーです。 1042 Color vtxCols[VERTEXCOLOR_MAX]; 1043 1044 //! マテリアルのインデックスです。 1045 ut::ResU16 materialIdx; 1046 //! テクスチャ座標の数です。 1047 ut::ResU8 texCoordNum; 1048 //! (未使用です) 1049 ut::ResU8 padding[1]; 1050 1051 /* Additional Info 1052 math::VEC2 texCoords[texCoordNum][VERTEX_MAX]; 1053 */ 1054 }; 1055 1056 //--------------------------------------------------------------------------- 1057 //! :category レイアウト・リソース 1058 //! 1059 //! @brief Windowペインを定義するデータブロックです。 1060 //! 1061 //! @details 1062 //! blockHeader の kind には res::DATABLOCKKIND_WINDOW が指定されます。 1063 //! 1064 //! この構造体に以下のデータ構造が続きます。 1065 //! 1066 //! ・ WindowContent content\n 1067 //! ・ ut::ResU32 frameOffsetTable[frameNum]\n 1068 //! ・ WindowFrame frame0\n 1069 //! ・ … 1070 //! 1071 //! frameOffsetTable は WindowFrame へのオフセット(データブロック先頭から)です。 1072 //! 1073 //! @sa Lyt 1074 //! @sa PaneBegin 1075 //! 1076 //! @since 2010/01/26 初版。 1077 //--------------------------------------------------------------------------- 1078 struct Window : public Pane 1079 { 1080 //! ペインの各辺の拡大量です。 1081 InflationLRTB inflation; 1082 1083 //! フレーム数です。 1084 ut::ResU8 frameNum; 1085 //! (未使用です) 1086 ut::ResU8 padding[3]; 1087 1088 //! content へのオフセットです(データブロック先頭から)。 1089 ut::ResU32 contentOffset; 1090 //! frameOffsetTable へのオフセットです(データブロック先頭から)。 1091 ut::ResU32 frameOffsetTableOffset; 1092 1093 /* Additional Info 1094 1095 WindowContent content; 1096 1097 internal::ResU32 frameOffsetTable[frameNum]; 1098 WindowFrame frames; 1099 1100 */ 1101 }; 1102 1103 //--------------------------------------------------------------------------- 1104 //! :category レイアウト・リソース 1105 //! 1106 //! @brief Boundingペインを定義するデータブロックです。 1107 //! 1108 //! @details 1109 //! blockHeader の kind には res::DATABLOCKKIND_BOUNDING が指定されます。 1110 //! 1111 //! @sa Lyt 1112 //! @sa PaneBegin 1113 //! 1114 //! @since 2010/01/26 初版。 1115 //--------------------------------------------------------------------------- 1116 struct Bounding : public Pane 1117 { 1118 }; 1119 1120 //--------------------------------------------------------------------------- 1121 //! :category レイアウト・リソース 1122 //! 1123 //! @brief 拡張ユーザデータを定義するデータブロックです。 1124 //! 1125 //! @details 1126 //! 直近に定義されたペインに拡張ユーザデータを設定します。 1127 //! 1128 //! blockHeader の kind には res::DATABLOCKKIND_USERDATALIST が指定されます。 1129 //! 1130 //! この構造体に以下のデータ構造が続きます。 1131 //! 1132 //! ・ ExtUserData extUserData[num]\n 1133 //! ・ u8 data[] 1134 //! 1135 //! @sa Lyt 1136 //! @sa Pane 1137 //! 1138 //! @since 2010/01/26 初版。 1139 //--------------------------------------------------------------------------- 1140 struct ExtUserDataList 1141 { 1142 //! ヘッダです。 1143 ut::BinaryBlockHeader blockHeader; 1144 1145 //! ユーザデータの数です。 1146 ut::ResU16 num; 1147 //! (未使用です) 1148 ut::ResU8 padding[2]; 1149 1150 /* Additional Info 1151 1152 ExtUserData extUserData[num]; 1153 1154 */ 1155 }; 1156 1157 //--------------------------------------------------------------------------- 1158 //! :category レイアウト・リソース 1159 //! 1160 //! @brief 子グループの定義を開始するデータブロックです。 1161 //! 1162 //! @details 1163 //! GroupBegin と GroupEnd により子グループ列が定義されます。 1164 //! 1165 //! GroupBegin の前の Group が親グループとなります。 1166 //! 1167 //! @sa Lyt 1168 //! 1169 //! @since 2010/01/26 初版。 1170 //--------------------------------------------------------------------------- 1171 struct GroupBegin 1172 { 1173 //! ヘッダです。 1174 ut::BinaryBlockHeader blockHeader; 1175 }; 1176 1177 //--------------------------------------------------------------------------- 1178 //! :category レイアウト・リソース 1179 //! 1180 //! @brief 子グループの定義を完了するデータブロックです。 1181 //! 1182 //! @details 1183 //! blockHeader の kind には res::DATABLOCKKIND_GROUPEND が指定されます。 1184 //! 1185 //! @sa Lyt 1186 //! @sa GroupBegin 1187 //! 1188 //! @since 2010/01/26 初版。 1189 //--------------------------------------------------------------------------- 1190 struct GroupEnd 1191 { 1192 //! ヘッダです。 1193 ut::BinaryBlockHeader blockHeader; 1194 }; 1195 1196 //--------------------------------------------------------------------------- 1197 //! :category レイアウト・リソース 1198 //! 1199 //! @brief グループを定義するデータブロックです。 1200 //! 1201 //! @details 1202 //! blockHeader の kind には res::DATABLOCKKIND_GROUP が指定されます。 1203 //! 1204 //! この構造体に以下のデータ構造が続きます。 1205 //! 1206 //! ・ char panes[paneNum][ResourceNameStrMax] 1207 //! 1208 //! panes にはグループに属するペインの名前が格納されます。 1209 //! 1210 //! @sa Lyt 1211 //! @sa GroupBegin 1212 //! 1213 //! @since 2010/01/26 初版。 1214 //--------------------------------------------------------------------------- 1215 struct Group 1216 { 1217 //! ヘッダです。 1218 ut::BinaryBlockHeader blockHeader; 1219 1220 //! グループ名です。 1221 char name[ResourceNameStrMax]; 1222 1223 //! グループに属するペインの数です。 1224 ut::ResU16 paneNum; 1225 //! (未使用です) 1226 ut::ResU8 padding[2]; 1227 1228 /* Additional Info 1229 1230 char panes[paneNum][ResourceNameStrMax]; 1231 1232 */ 1233 }; 1234 1235 //@} 1236 1237 //!--------------------------------------------------------------------------* 1238 //! @name アニメーション・リソース 1239 //@{ 1240 1241 //--------------------------------------------------------------------------- 1242 //! :category アニメーション・リソース 1243 //! 1244 //! @brief アニメーション・リソースファイルのヘッダです。 1245 //! 1246 //! @details 1247 //! fileHeader の kind には res::FILESIGNATURE_CLAN が指定されます。 1248 //! 1249 //! この構造体に以下のデータブロックの組み合わせが続きます。 1250 //! 1251 //! ・ AnimationTagBlock\n 1252 //! ・ AnimationShareBlock\n 1253 //! ・ AnimationBlock 1254 //! 1255 //! @since 2010/01/26 初版。 1256 //--------------------------------------------------------------------------- 1257 struct Lan 1258 { 1259 //! ファイルヘッダです。 1260 ut::BinaryFileHeader fileHeader; 1261 }; 1262 1263 //--------------------------------------------------------------------------- 1264 //! :category アニメーション・リソース 1265 //! 1266 //! @brief アニメーション区間タグを定義するデータブロックです。 1267 //! 1268 //! @details 1269 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMTAG が指定されます。 1270 //! 1271 //! この構造体に以下のデータ構造が続きます。 1272 //! 1273 //! ・ char name[]\n 1274 //! ・ AnimationGroupRef groups[groupNum] 1275 //! 1276 //! @sa Lan 1277 //! 1278 //! @since 2010/01/26 初版。 1279 //--------------------------------------------------------------------------- 1280 struct AnimationTagBlock 1281 { 1282 //! ヘッダです。 1283 ut::BinaryBlockHeader blockHeader; 1284 1285 //! アニメーション区間タグの通し番号です。 1286 ut::ResU16 tagOrder; 1287 //! アニメーション区間タグのグループ数です。 1288 ut::ResU16 groupNum; 1289 1290 //! name へのオフセットです(データブロック先頭から)。 1291 ut::ResU32 nameOffset; 1292 //! groups へのオフセットです(データブロック先頭から)。 1293 ut::ResU32 groupsOffset; 1294 1295 //! アニメーション区間の開始フレームです。 1296 ut::ResS16 startFrame; 1297 //! アニメーション区間の終了フレームです。 1298 ut::ResS16 endFrame; 1299 1300 //! フラグです(lyt::AnimTagFlag)。 1301 ut::ResU8 flag; 1302 //! (未使用です) 1303 ut::ResU8 padding[3]; 1304 1305 /* Additional Info 1306 1307 char name[]; 1308 AnimationGroupRef groups[groupNum]; 1309 1310 */ 1311 }; 1312 1313 //--------------------------------------------------------------------------- 1314 //! :category アニメーション・リソース 1315 //! 1316 //! @brief アニメーション共有情報を定義するデータブロックです。 1317 //! 1318 //! @details 1319 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMSHARE が指定されます。 1320 //! 1321 //! この構造体に以下のデータ構造が続きます。 1322 //! 1323 //! ・ AnimationShareInfo animShareInfos[shareNum] 1324 //! 1325 //! @sa Lan 1326 //! 1327 //! @since 2010/01/26 初版。 1328 //--------------------------------------------------------------------------- 1329 struct AnimationShareBlock 1330 { 1331 //! ヘッダです。 1332 ut::BinaryBlockHeader blockHeader; 1333 1334 //! animShareInfos へのオフセットです(データブロック先頭から)。 1335 ut::ResU32 animShareInfoOffset; 1336 1337 //! アニメーション共有情報の数です。 1338 ut::ResU16 shareNum; 1339 //! (未使用です) 1340 ut::ResU8 padding[2]; 1341 1342 /* Additional Info 1343 1344 AnimationShareInfo animShareInfos[shareNum]; 1345 1346 */ 1347 }; 1348 1349 //--------------------------------------------------------------------------- 1350 //! :category アニメーション・リソース 1351 //! 1352 //! @brief アニメーションを定義するデータブロックです。 1353 //! 1354 //! @details 1355 //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMINFO が指定されます。 1356 //! 1357 //! この構造体に以下のデータ構造が続きます。 1358 //! 1359 //! ・ ut::ResU32 fileNameOffsets[fileNum]\n 1360 //! ・ u8 namePool[]\n 1361 //! ・ ut::ResU32 animContOffsets[animContNum]\n 1362 //! ・ AnimationContent animCont0\n 1363 //! ・ … 1364 //! 1365 //! fileNameOffsets 配列には参照するテクスチャリソース名への 1366 //! オフセット(fileNameOffsetsより)を格納します。 1367 //! 1368 //! animContOffsets 配列にはアニメーション内容への 1369 //! オフセット(データブロック先頭より)を格納します。 1370 //! 1371 //! @sa Lan 1372 //! 1373 //! @since 2010/01/26 初版。 1374 //--------------------------------------------------------------------------- 1375 struct AnimationBlock 1376 { 1377 //! ヘッダです。 1378 ut::BinaryBlockHeader blockHeader; 1379 //! フレーム数です。 1380 ut::ResU16 frameSize; 1381 //! ループする場合は 1 を格納します。 1382 ut::ResU8 loop; 1383 //! (未使用です) 1384 ut::ResU8 padding[1]; 1385 1386 //! 参照するテクスチャリソースの数です。 1387 ut::ResU16 fileNum; 1388 //! アニメーション内容の数です。 1389 ut::ResU16 animContNum; 1390 1391 //! animContOffsets へのオフセットです(データブロック先頭から)。 1392 ut::ResU32 animContOffsetsOffset; 1393 1394 /* Additional Info 1395 1396 ut::ResU32 fileNameOffsets[fileNum]; 1397 u8 namePool[]; 1398 ut::ResU32 animContOffsets[animContNum]; 1399 1400 */ 1401 }; 1402 1403 //--------------------------------------------------------------------------- 1404 //! :category アニメーション・リソース 1405 //! 1406 //! @brief アニメーション内容を定義します。 1407 //! 1408 //! @details 1409 //! この構造体に以下のデータ構造が続きます。 1410 //! 1411 //! ・ ut::ResU32 animInfoOffsets[num]\n 1412 //! ・ AnimationInfo animInfo0\n 1413 //! ・ … 1414 //! 1415 //! @sa Lan 1416 //! @sa AnimationBlock 1417 //! 1418 //! @since 2010/01/26 初版。 1419 //--------------------------------------------------------------------------- 1420 struct AnimationContent 1421 { 1422 //! アニメーションの名前です。 1423 char name[MaterialNameStrMax]; // ペイン名とマテリアル名の長い方の文字数分確保 1424 1425 //! アニメーション情報の数です。 1426 ut::ResU8 num; 1427 //! タイプ(lyt::AnimContentType)です。 1428 ut::ResU8 type; 1429 //! (未使用です) 1430 ut::ResU8 padding[2]; 1431 1432 /* Additional Info 1433 1434 ut::ResU32 animInfoOffsets[num]; 1435 1436 */ 1437 }; 1438 1439 //--------------------------------------------------------------------------- 1440 //! :category アニメーション・リソース 1441 //! 1442 //! @brief アニメーション情報を定義します。 1443 //! 1444 //! @details 1445 //! kind には以下のアニメーションタイプのいずれかが指定されます。 1446 //! 1447 //! ・ lyt::ANIMATIONTYPE_PANESRT\n 1448 //! ・ lyt::ANIMATIONTYPE_VISIBILITY\n 1449 //! ・ lyt::ANIMATIONTYPE_VTXCOLOR\n 1450 //! ・ lyt::ANIMATIONTYPE_MATCOLOR\n 1451 //! ・ lyt::ANIMATIONTYPE_TEXSRT\n 1452 //! ・ lyt::ANIMATIONTYPE_TEXPATTERN 1453 //! 1454 //! この構造体に以下のデータ構造が続きます。 1455 //! 1456 //! ・ ut::ResU32 animTargetOffsets[num]\n 1457 //! ・ AnimationTarget animTarget0\n 1458 //! ・ … 1459 //! 1460 //! animTargetOffsets 配列は AnimationTarget へのオフセット(AnimationInfo 先頭から)を格納します。 1461 //! 1462 //! @sa Lan 1463 //! @sa AnimationContent 1464 //! 1465 //! @since 2010/01/26 初版。 1466 //--------------------------------------------------------------------------- 1467 struct AnimationInfo 1468 { 1469 //! アニメーションタイプです。 1470 ut::ResU32 kind; 1471 1472 //! アニメーション・ターゲットの数です。 1473 ut::ResU8 num; 1474 //! (未使用です) 1475 ut::ResU8 padding[3]; 1476 1477 /* Additional Info 1478 1479 ut::ResU32 animTargetOffsets[num]; 1480 1481 */ 1482 }; 1483 1484 //--------------------------------------------------------------------------- 1485 //! :category アニメーション・リソース 1486 //! 1487 //! @brief アニメーション・ターゲットを定義します。 1488 //! 1489 //! @details 1490 //! アニメーションの対象とカーブの情報です。 1491 //! 1492 //! target にはアニメーションの対象に応じて以下の列挙型のいずれかが指定されます。 1493 //! 1494 //! ・ lyt::AnimTargetPane\n 1495 //! ・ lyt::AnimTargetVisibility\n 1496 //! ・ lyt::AnimTargetPaneColor\n 1497 //! ・ lyt::AnimTargetMatColor\n 1498 //! ・ lyt::AnimTargetTexSRT\n 1499 //! ・ lyt::AnimTargetTexPattern 1500 //! 1501 //! この構造体に以下のデータ構造が続きます。 1502 //! 1503 //! ・ HermiteKey keys[keyNum] 1504 //! 1505 //! または 1506 //! 1507 //! ・ StepKey keys[keyNum] 1508 //! 1509 //! @sa Lan 1510 //! @sa AnimationInfo 1511 //! 1512 //! @since 2010/01/26 初版。 1513 //--------------------------------------------------------------------------- 1514 struct AnimationTarget 1515 { 1516 //! アニメーション対象が配列の場合のインデックスです。 1517 ut::ResU8 id; 1518 //! アニメーション対象の属性をあらわす列挙値です。 1519 ut::ResU8 target; 1520 //! カーブの種類です(lyt::AnimCurve)。 1521 ut::ResU8 curveType; 1522 //! (未使用です) 1523 ut::ResU8 padding[1]; 1524 1525 //! キーの数です。 1526 ut::ResU16 keyNum; 1527 //! (未使用です) 1528 ut::ResU8 padding2[2]; 1529 1530 //! keys へのオフセットです(AnimationTarget先頭から)。 1531 ut::ResU32 keysOffset; 1532 1533 /* Additional Info 1534 1535 HermiteKey|StepKey keys[keyNum]; 1536 1537 */ 1538 }; 1539 1540 //--------------------------------------------------------------------------- 1541 //! :category アニメーション・リソース 1542 //! 1543 //! @brief エルミート曲線のキーを定義します。 1544 //! 1545 //! @sa Lan 1546 //! @sa AnimationTarget 1547 //! 1548 //! @since 2010/01/26 初版。 1549 //--------------------------------------------------------------------------- 1550 struct HermiteKey 1551 { 1552 //! フレームです。 1553 ut::ResF32 frame; 1554 //! 値です。 1555 ut::ResF32 value; 1556 //! 傾きです。 1557 ut::ResF32 slope; 1558 }; 1559 1560 //--------------------------------------------------------------------------- 1561 //! :category アニメーション・リソース 1562 //! 1563 //! @brief 階段状に変化するアニメーションカーブのキーを定義します。 1564 //! 1565 //! @sa Lan 1566 //! @sa AnimationTarget 1567 //! 1568 //! @since 2010/01/26 初版。 1569 //--------------------------------------------------------------------------- 1570 struct StepKey 1571 { 1572 //! フレームです。 1573 ut::ResF32 frame; 1574 //! 値です。 1575 ut::ResU16 value; 1576 //! (未使用です) 1577 ut::ResU16 padding[1]; 1578 }; 1579 1580 //@} 1581 1582 //!--------------------------------------------------------------------------* 1583 //! @name テクスチャイメージ・リソース 1584 //@{ 1585 1586 //--------------------------------------------------------------------------- 1587 //! :category テクスチャイメージ・リソース 1588 //! 1589 //! @brief テクスチャイメージ・リソースファイルのヘッダです。 1590 //! 1591 //! @details 1592 //! fileHeader の kind には res::FILESIGNATURE_CLIM が指定されます。 1593 //! 1594 //! テクスチャイメージ・リソースファイルは以下のような構造になっています。 1595 //! 1596 //! ・ u8 textureImage[imageSize]\n 1597 //! ・ Lim limHeader\n 1598 //! ・ Image imageInfo\n 1599 //! ・ ImageSize imageSize 1600 //! 1601 //! テクスチャイメージはハードウェアによるアライメント制限があるため 1602 //! ファイルの先頭に配置されます。 1603 //! 1604 //! ファイルの末尾には ImageSize 構造体が格納されます。 1605 //! 1606 //! @since 2010/01/26 初版。 1607 //--------------------------------------------------------------------------- 1608 struct Lim 1609 { 1610 //! ファイルヘッダです。 1611 ut::BinaryFileHeader fileHeader; 1612 }; 1613 1614 //--------------------------------------------------------------------------- 1615 //! :category テクスチャイメージ・リソース 1616 //! 1617 //! @brief テクスチャイメージ情報のデータブロックです。 1618 //! 1619 //! @details 1620 //! blockHeader の kind には res::DATABLOCKKIND_IMAGE が指定されます。 1621 //! 1622 //! @sa Lim 1623 //! 1624 //! @since 2010/01/26 初版。 1625 //--------------------------------------------------------------------------- 1626 struct Image 1627 { 1628 //! ヘッダです。 1629 ut::BinaryBlockHeader blockHeader; 1630 1631 //! イメージの幅です。 1632 ut::ResU16 width; 1633 1634 //! イメージの高さです。 1635 ut::ResU16 height; 1636 1637 //! 画像データのフォーマットです(lyt::TexFormat)。 1638 ut::ResU8 format; 1639 1640 //! (未使用です) 1641 ut::ResU8 padding[3]; 1642 }; 1643 1644 //--------------------------------------------------------------------------- 1645 //! :category テクスチャイメージ・リソース 1646 //! 1647 //! @brief テクスチャイメージのサイズ情報です。 1648 //! 1649 //! @details 1650 //! テクスチャイメージ・リソースファイルの先頭に配置される画像データの 1651 //! バイト数の情報を持ちます。 1652 //! 1653 //! @sa Lim 1654 //! 1655 //! @since 2010/01/26 初版。 1656 //--------------------------------------------------------------------------- 1657 struct ImageSize 1658 { 1659 //! 画像データのバイト数です。(4の倍数) 1660 ut::ResU32 imageSize; 1661 }; 1662 1663 } // namespace nw::lyt::res 1664 } // namespace nw::lyt 1665 } // namespace nw 1666 1667 #endif // NW_LYT_RESOURCES_H_ 1668