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