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