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