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