/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_Resources.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 26780 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_RESOURCES_H_ #define NW_LYT_RESOURCES_H_ #include #include #include #include //! @namespace nw::lyt::res //! //! @brief レイアウトのリソースデータ型を定義する名前空間です。 //! //! @details //! リソースファイルの構造については以下を参照してください。 //! //! ・ nw::lyt::res::Lyt\n //! ・ nw::lyt::res::Lan\n //! ・ nw::lyt::res::Lim namespace nw { namespace lyt { namespace res { /* ======================================================================== 定数定義 ======================================================================== */ //! @name バージョン //@{ //! @brief リソースのメジャーバージョンです。 //! //! @details //! 互換性のない変更を表します。 //! const u8 MajorVersion = 2; //! @brief リソースのマイナーバージョンです。 //! //! @details //! 後方互換のある変更を表します。新しいライブラリは古いリソースを解釈できます。 //! const u8 MinorVersion = 2; //! @brief リソースのマイクロバージョンです。 //! //! @details //! 両互換の変更を表します。新旧のライブラリでお互いのリソースを解釈できます。 //! const u8 MicroVersion = 0; //! @brief リソースのバグフィックスバージョンです。 //! //! @details //! 前方互換のみの変更を表します。新しいライブラリで古いリソースが解釈できないことを表します。 //! const u8 BugfixVersion = 0; //! @brief リソースのバージョンです。 const u32 BinaryFileFormatVersion = NW_UT_MAKE_VERSION(MajorVersion, MinorVersion, MicroVersion, BugfixVersion); //@} //! @name レイアウト・リソース //@{ //! @brief レイアウト・リソースファイルのシグニチャです。 //! @sa Lyt const u32 FILESIGNATURE_CLYT = NW_UT_MAKE_SIGWORD('C', 'L', 'Y', 'T'); //! @brief Layout データブロックのシグニチャです。 const u32 DATABLOCKKIND_LAYOUT = NW_UT_MAKE_SIGWORD('l', 'y', 't', '1'); //! @brief PaneBegin データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANEBEGIN = NW_UT_MAKE_SIGWORD('p', 'a', 's', '1'); //! @brief PaneEnd データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANEEND = NW_UT_MAKE_SIGWORD('p', 'a', 'e', '1'); //! @brief Pane データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANE = NW_UT_MAKE_SIGWORD('p', 'a', 'n', '1'); //! @brief Picture データブロックのシグニチャです。 const u32 DATABLOCKKIND_PICTURE = NW_UT_MAKE_SIGWORD('p', 'i', 'c', '1'); //! @brief TextBox データブロックのシグニチャです。 const u32 DATABLOCKKIND_TEXTBOX = NW_UT_MAKE_SIGWORD('t', 'x', 't', '1'); //! @brief Window データブロックのシグニチャです。 const u32 DATABLOCKKIND_WINDOW = NW_UT_MAKE_SIGWORD('w', 'n', 'd', '1'); //! @brief Bounding データブロックのシグニチャです。 const u32 DATABLOCKKIND_BOUNDING = NW_UT_MAKE_SIGWORD('b', 'n', 'd', '1'); //! @brief GroupBegin データブロックのシグニチャです。 const u32 DATABLOCKKIND_GROUPBEGIN = NW_UT_MAKE_SIGWORD('g', 'r', 's', '1'); //! @brief GroupEnd データブロックのシグニチャです。 const u32 DATABLOCKKIND_GROUPEND = NW_UT_MAKE_SIGWORD('g', 'r', 'e', '1'); //! @brief Group データブロックのシグニチャです。 const u32 DATABLOCKKIND_GROUP = NW_UT_MAKE_SIGWORD('g', 'r', 'p', '1'); //! @brief FontList データブロックのシグニチャです。 const u32 DATABLOCKKIND_FONTLIST = NW_UT_MAKE_SIGWORD('f', 'n', 'l', '1'); //! @brief TextureList データブロックのシグニチャです。 const u32 DATABLOCKKIND_TEXTURELIST = NW_UT_MAKE_SIGWORD('t', 'x', 'l', '1'); //! @brief MaterialList データブロックのシグニチャです。 const u32 DATABLOCKKIND_MATERIALLIST = NW_UT_MAKE_SIGWORD('m', 'a', 't', '1'); //! @brief ExtUserDataList データブロックのシグニチャです。 const u32 DATABLOCKKIND_USERDATALIST = NW_UT_MAKE_SIGWORD('u', 's', 'd', '1'); //@} //! @name アニメーション・リソース //@{ //! @brief アニメーション・リソースファイルのシグニチャです。 //! @sa Lan const u32 FILESIGNATURE_CLAN = NW_UT_MAKE_SIGWORD('C', 'L', 'A', 'N'); //! @brief AnimationTagBlock データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANEANIMTAG = NW_UT_MAKE_SIGWORD('p', 'a', 't', '1'); //! @brief AnimationShareBlock データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANEANIMSHARE = NW_UT_MAKE_SIGWORD('p', 'a', 'h', '1'); //! @brief AnimationBlock データブロックのシグニチャです。 const u32 DATABLOCKKIND_PANEANIMINFO = NW_UT_MAKE_SIGWORD('p', 'a', 'i', '1'); //@} //! @name アニメーション・タイプ //@{ //! @brief アニメーションの対象はペインのSRTアニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_PANESRT = NW_UT_MAKE_SIGWORD('C', 'L', 'P', 'A'); //! @brief アニメーションの対象はビジビリティ・アニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_VISIBILITY = NW_UT_MAKE_SIGWORD('C', 'L', 'V', 'I'); //! @brief アニメーションの対象は頂点カラー・アニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_VTXCOLOR = NW_UT_MAKE_SIGWORD('C', 'L', 'V', 'C'); //! @brief アニメーションの対象はマテリアル・アニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_MATCOLOR = NW_UT_MAKE_SIGWORD('C', 'L', 'M', 'C'); //! @brief アニメーションの対象はテクスチャのSRTアニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_TEXSRT = NW_UT_MAKE_SIGWORD('C', 'L', 'T', 'S'); //! @brief アニメーションの対象はテクスチャパターン・アニメーションです。 //! @sa AnimationInfo const u32 ANIMATIONTYPE_TEXPATTERN = NW_UT_MAKE_SIGWORD('C', 'L', 'T', 'P'); //@} //! @name テクスチャイメージ・リソース //@{ //! @brief テクスチャイメージ・リソースファイルのシグニチャです。 //! @sa Lim const u32 FILESIGNATURE_CLIM = NW_UT_MAKE_SIGWORD('C', 'L', 'I', 'M'); //! @brief res::Image データブロックのシグニチャです。 const u32 DATABLOCKKIND_IMAGE = NW_UT_MAKE_SIGWORD('i', 'm', 'a', 'g'); //@} //! @name リソースタイプ //@{ //! @brief リソースはレイアウトです。 //! @sa ResType const u32 RESOURCETYPE_LAYOUT = 'blyt'; //! @brief リソースはアニメーションです。 //! @sa ResType const u32 RESOURCETYPE_ANIMATION = 'anim'; //! @brief リソースはテクスチャイメージです。 //! @sa ResType const u32 RESOURCETYPE_TEXTURE = 'timg'; //! @brief リソースはリソースフォントです。 //! @sa ResType const u32 RESOURCETYPE_FONT = 'font'; //! @brief リソースはアーカイブフォントです。 //! @sa ResType const u32 RESOURCETYPE_ARCHIVEFONT = 'fnta'; //@} /* ======================================================================== 型定義 ======================================================================== */ //!--------------------------------------------------------------------------* //! @name レイアウト・リソース //@{ //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief レイアウト・リソースファイルのヘッダです。 //! //! @details //! fileHeader の kind には res::FILESIGNATURE_CLYT が指定されます。 //! //! この構造体に以下のデータブロックの組み合わせが続きます。 //! //! ・ Layout\n //! ・ FontList\n //! ・ TextureList\n //! ・ MaterialList\n //! ・ ExtUserDataList\n //! ・ PaneBegin\n //! ・ PaneEnd\n //! ・ Pane\n //! ・ Picture\n //! ・ TextBox\n //! ・ Window\n //! ・ Bounding\n //! ・ GroupBegin\n //! ・ GroupEnd\n //! ・ Group //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Lyt { //! ファイルヘッダです。 ut::BinaryFileHeader fileHeader; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief レイアウトを定義するデータブロックです。 //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Layout { //! @brief ヘッダです。 //! //! @details //! kind には res::DATABLOCKKIND_LAYOUT が指定されます。 //! ut::BinaryBlockHeader blockHeader; //! @brief スクリーンの向きです。(未使用です) //! @sa ScreenOriginType ut::ResU8 originType; //! @brief (未使用です) ut::ResU8 padding[3]; //! @brief レイアウトの画面サイズです。 Size layoutSize; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief フォントの参照情報です。 //! //! @sa FontList //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Font { //! @brief リソース名のオフセットです(FontList の次のアドレスから)。 internal::ResU32 nameStrOffset; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief フォントの参照情報のリストを格納したデータブロックです。 //! //! @details //! ペインが参照するフォントのリストをペインに先立って定義します。 //! //! blockHeader の kind には res::DATABLOCKKIND_FONTLIST が指定されます。 //! //! blockHeader の size は nameStrPool までを含みます。 //! //! この構造体には以下のデータ構造が続きます。 //! //! ・ res::Font fonts[fontNum]\n //! ・ u8 nameStrPool[] //! //! @sa Layout //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct FontList { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! リストに含まれるフォント参照の総数です。 ut::ResU16 fontNum; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info Font fonts[fontNum]; u8 nameStrPool[]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief テクスチャイメージの参照情報です。 //! //! @sa TextureList //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Texture { //! @brief リソース名のオフセットです(TextureList の次のアドレスから)。 internal::ResU32 nameStrOffset; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief テクスチャイメージの参照情報のリストを格納したデータブロックです。 //! //! @details //! ペインが参照するテクスチャのリストをペインに先立って定義します。 //! //! blockHeader の kind には res::DATABLOCKKIND_TEXTURELIST が指定されます。 //! //! blockHeader の size は nameStrPool までを含みます。 //! //! この構造体には以下のデータ構造が続きます。 //! //! ・ res::Texture textures[texNum]\n //! ・ u8 nameStrPool[] //! //! @sa Layout //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct TextureList { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! リストに含まれるテクスチャイメージ参照の総数です。 ut::ResU16 texNum; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info Texture textures[texNum]; u8 nameStrPool[]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief テクスチャのマッピング情報です。 //! //! @sa Material //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct TexMap { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2010/01/26 初版。 //! TexMap() : texIdx(0), wrapSflt(0), wrapTflt(0) {} //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief S方向のラップモードを取得します。 //! //! @return S方向のラップモードを返します。 //! //! @since 2010/01/26 初版。 //! TexWrap GetWarpModeS() const { return TexWrap(internal::GetBits(wrapSflt, 0, 2)); } //! @brief T方向のラップモードを取得します。 //! //! @return T方向のラップモードを返します。 //! //! @since 2010/01/26 初版。 //! TexWrap GetWarpModeT() const { return TexWrap(internal::GetBits(wrapTflt, 0, 2)); } //! @brief 縮小フィルタの設定を取得します。 //! //! @return 縮小フィルタの設定を返します。 //! //! @since 2010/01/26 初版。 //! TexFilter GetMinFilter() const { return TexFilter(internal::GetBits(wrapSflt, 2, 2)); } //! @brief 拡大フィルタの設定を取得します。 //! //! @return 拡大フィルタの設定を返します。 //! //! @since 2010/01/26 初版。 //! TexFilter GetMagFilter() const { return TexFilter(internal::GetBits(wrapTflt, 2, 2)); } //! @brief S方向のラップモードを設定します。 //! //! @param value S方向のラップモードです。 lyt::TexWrap を指定します。 //! //! @since 2010/01/26 初版。 //! void SetWarpModeS(u8 value) { NW_ASSERT(value < TEXWRAP_MAX); internal::SetBits(&wrapSflt, 0, 2, value); } //! @brief T方向のラップモードを設定します。 //! //! @param value T方向のラップモードです。 lyt::TexWrap を指定します。 //! //! @since 2010/01/26 初版。 //! void SetWarpModeT(u8 value) { NW_ASSERT(value < TEXWRAP_MAX); internal::SetBits(&wrapTflt, 0, 2, value); } //! @brief 縮小フィルタを設定します。 //! //! @param value 縮小フィルタの設定です。 lyt::TexFilter を指定します。 //! //! @since 2010/01/26 初版。 //! void SetMinFilter(u8 value) { NW_ASSERT(value < TEXFILTER_MAX); internal::SetBits(&wrapSflt, 2, 2, value); } //! @brief 拡大フィルタを設定します。 //! //! @param value 拡大フィルタの設定です。 lyt::TexFilter を指定します。 //! //! @since 2010/01/26 初版。 //! void SetMagFilter(u8 value) { NW_ASSERT(value < TEXFILTER_MAX); internal::SetBits(&wrapTflt, 2, 2, value); } //@} //! @details :private ut::ResU16 texIdx; //! @details :private ut::ResU8 wrapSflt; // TexWrap, TexFilter //! @details :private ut::ResU8 wrapTflt; // TexWrap, TexFilter }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief マテリアルが持つ情報の数です。 //! //! @sa Material //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct MaterialResourceNum { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2010/01/26 初版。 //! MaterialResourceNum() : bits(0) {} //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief テクスチャの数を取得します。 //! //! @return テクスチャの数を返します。 //! //! @since 2010/01/26 初版。 //! u8 GetTexMapNum() const { return u8(internal::GetBits(bits, 0, 2)); } //! @brief TexSRT の数を取得します。 //! //! @return TexSRT の数を返します。 //! //! @since 2010/01/26 初版。 //! u8 GetTexSRTNum() const { return u8(internal::GetBits(bits, 2, 2)); } //! @brief TexCoordGen の数を取得します。 //! //! @return TexCoordGen の数を返します。 //! //! @since 2010/01/26 初版。 //! u8 GetTexCoordGenNum() const { return u8(internal::GetBits(bits, 4, 2)); } //! @brief TevStage の数を取得します。 //! //! @return TevStage の数を返します。 //! //! @since 2010/01/26 初版。 //! u8 GetTevStageNum() const { return u8(internal::GetBits(bits, 6, 3)); } //! @brief AlphaCompare を持っているか調べます。 //! //! @return AlphaCompare を持っていれば true を返します。 //! //! @since 2010/01/26 初版。 //! bool HasAlphaCompare() const { return internal::TestBit(bits, 9); } //! @brief BlendMode を持っているか調べます。 //! //! @return BlendMode を持っていれば true を返します。 //! //! @since 2010/01/26 初版。 //! bool HasBlendMode() const { return internal::TestBit(bits, 10); } //! @brief テクスチャのみを使うか調べます。 //! //! @return テクスチャのみを使う場合は true を返します。 //! //! @since 2010/04/23 初版。 //! bool IsTextureOnly() const { return internal::TestBit(bits, 11); } //! @brief TexMap の数を設定します。 //! //! @param value TexMap の数です。 //! //! @since 2010/01/26 初版。 //! void SetTexMapNum(u32 value) { NW_ASSERT(value <= TexMapMax); this->SetBits(0, 2, value); } //! @brief TexSRT の数を設定します。 //! //! @param value TexSRT の数です。 //! //! @since 2010/01/26 初版。 //! void SetTexSRTNum(u32 value) { NW_ASSERT(value <= TexMapMax); this->SetBits(2, 2, value); } //! @brief TexCoordGen の数を設定します。 //! //! @param value TexCoordGen の数です。 //! //! @since 2010/01/26 初版。 //! void SetTexCoordGenNum(u32 value) { NW_ASSERT(value <= TexMapMax); this->SetBits(4, 2, value); } //! @brief TevStage の数を設定します。 //! //! @param value TevStage の数です。 //! //! @since 2010/01/26 初版。 //! void SetTevStageNum(u32 value) { NW_ASSERT(value <= TevStageMax); this->SetBits(6, 3, value); } //! @brief AlphaCompare を持つかを設定します。 //! //! @param b AlphaCompare を持つ場合には true を指定します。 //! //! @since 2010/01/26 初版。 //! void SetAlphaCompare(bool b) { this->SetBit(9, b); } //! @brief BlendMode を持つかを設定します。 //! //! @param b BlendMode を持つ場合には true を指定します。 //! //! @since 2010/01/26 初版。 //! void SetBlendMode(bool b) { this->SetBit(10, b); } //! @brief テクスチャのみを使うかを設定します。 //! //! @param b テクスチャのみを使う場合には true を指定します。 //! //! @since 2010/04/23 初版。 //! void SetTextureOnly(bool b) { this->SetBit(11, b); } //@} //! @details :private ut::ResU32 bits; protected: //! @details :private void SetBits(int pos, int len, u32 value) { u32 work = bits; internal::SetBits(&work, pos, len, value); bits = work; } //! @details :private void SetBit(int pos, bool value) { u32 work = bits; internal::SetBit(&work, pos, value); bits = work; } }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief カラー情報です。 //! //! @sa Lyt //! @sa Material //! @sa Picture //! @sa WindowContent //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Color { //! @brief 型変換を行います。 //! //! @return ut::Color8 型のオブジェクトを返します。 //! //! @since 2010/01/26 初版。 //! operator ut::Color8() const { return ut::Color8(r,g,b,a); } //! 赤色の成分です。 ut::ResU8 r; //! 緑色の成分です。 ut::ResU8 g; //! 青色の成分です。 ut::ResU8 b; //! アルファ成分です。 ut::ResU8 a; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief マテリアル情報です。 //! //! @details //! この構造体に続いて、詳細情報の構造体が続きます。 //! //! ・ TexMap resTexMaps[texNum]\n //! ・ TexSRT texSRTs[texSRTNum]\n //! ・ TexCoordGen texCoordGen[texCoordGenNum]\n //! ・ TevStage tevStages[tevStageNum]\n //! ・ AlphaCompare alphaCompare\n //! ・ BlendMode blendMode //! //! どの詳細情報をいくつ持つかは resNum の値によって決まります。 //! //! @sa MaterialList //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Material { //! 名前です。 char name[MaterialNameStrMax]; //! カラー情報です。 Color colors[MatColorMax]; //! 詳細設定の数です。 MaterialResourceNum resNum; /* Additional Info TexMap resTexMaps[texNum]; TexSRT texSRTs[texSRTNum]; TexCoordGen texCoordGen[texCoordGenNum]; TevStage tevStages[tevStageNum]; AlphaCompare alphaCompare; BlendMode blendMode; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief マテリアル情報のリストです。 //! //! @details //! ペインが参照するマテリアルのリストをペインに先立って定義します。 //! //! blockHeader の kind には res::DATABLOCKKIND_MATERIALLIST が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ ut::ResU32 materialOffsetTable[materialNum]\n //! ・ Material material0\n //! ・ … //! //! materialOffsetTable は各マテリアル情報へのオフセット(データブロック先頭から)です。 //! //! @sa Layout //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct MaterialList { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! マテリアルの数です。 ut::ResU16 materialNum; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info ut::ResU32 materialOffsetTable[materialNum]; Material materials[materialNum]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief 子ペインの定義を開始するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANEBEGIN が指定されます。 //! //! PaneBegin と PaneEnd により子ペイン列が定義されます。 //! //! PaneBegin の前の Pane が親ペインとなります。 //! //! ・ Pane : pane0\n //! ・ PaneBegin\n //! ・ Pane : pane1\n //! ・ Pane : pane2\n //! ・ PaneEnd //! //! この場合、 pane1 と pane2 は pane0 の子ペインとなります。 //! //! Pane の代わりに Picture, Window, TextBox, Bounding も指定可能です。 //! //! @sa Lyt //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct PaneBegin { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief 子ペインの定義を完了するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANEEND が指定されます。 //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct PaneEnd { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Nullペインを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANE が指定されます。 //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Pane { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! フラグです (lyt::PaneFlag)。 ut::ResU8 flag; //! 位置基準です (lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 ut::ResU8 basePosition; //! アルファ値です。 ut::ResU8 alpha; //! (未使用です) ut::ResU8 padding[1]; //! ペインの名前です。 char name[ResourceNameStrMax]; //! ユーザデータです。 char userData[UserDataStrMax]; //! トランスレート値です。 Vec3 translate; //! ローテート値です。 Vec3 rotate; //! スケール値です。 Vec2 scale; //! サイズです。 Size size; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Pictureペインを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PICTURE が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Picture : public Pane { //! 頂点カラーです。 Color vtxCols[VERTEXCOLOR_MAX]; //! マテリアルのインデックスです。 ut::ResU16 materialIdx; //! テクスチャ座標の数です。 ut::ResU8 texCoordNum; //! (未使用です) ut::ResU8 padding[1]; /* Additional Info res::Vec2 texCoords[texCoordNum][VERTEX_MAX]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief TextBoxペインを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_TEXTBOX が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ wchar_t text[]; //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct TextBox : public Pane { //! 文字列用バッファに確保するサイズです。 ut::ResU16 textBufBytes; //! 初期テキスト文字列のバイト数です。 ut::ResU16 textStrBytes; //! マテリアルのインデックスです。 ut::ResU16 materialIdx; //! フォントへのインデックスです。 ut::ResU16 fontIdx; //! テキスト表示位置基準です(lyt::HorizontalPosition * HORIZONTALPOSITION_MAX + lyt::VerticalPosition)。 ut::ResU8 textPosition; //! 行そろえ指定です(TextAlignment)。 ut::ResU8 textAlignment; //! (未使用です) ut::ResU8 padding[2]; //! text へのオフセットです(データブロック先頭から)。 ut::ResU32 textStrOffset; //! テキストの表示色です。 Color textCols[TEXTCOLOR_MAX]; //! フォントのサイズです。 Size fontSize; //! テキストの文字間隔です。 ut::ResF32 charSpace; //! テキストの行間隔です。 ut::ResF32 lineSpace; /* Additional Info wchar_t text[]; // テキスト */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Windowのフレーム情報です。 //! //! @sa Window //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct WindowFrame { //! マテリアルのインデックスです。 ut::ResU16 materialIdx; //! テクスチャの反転表示の指定です(lyt::TextureFlip)。 ut::ResU8 textureFlip; //! (未使用です) ut::ResU8 padding[1]; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Windowのコンテント情報です。 //! //! @details //! この構造体に以下のデータ構造が続きます。 //! //! ・ res::Vec2 texCoords[texCoordNum][VERTEX_MAX] //! //! @sa Window //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct WindowContent { //! 頂点カラーです。 Color vtxCols[VERTEXCOLOR_MAX]; //! マテリアルのインデックスです。 ut::ResU16 materialIdx; //! テクスチャ座標の数です。 ut::ResU8 texCoordNum; //! (未使用です) ut::ResU8 padding[1]; /* Additional Info math::VEC2 texCoords[texCoordNum][VERTEX_MAX]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Windowペインを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_WINDOW が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ WindowContent content\n //! ・ ut::ResU32 frameOffsetTable[frameNum]\n //! ・ WindowFrame frame0\n //! ・ … //! //! frameOffsetTable は WindowFrame へのオフセット(データブロック先頭から)です。 //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Window : public Pane { //! ペインの各辺の拡大量です。 InflationLRTB inflation; //! フレーム数です。 ut::ResU8 frameNum; //! (未使用です) ut::ResU8 padding[3]; //! content へのオフセットです(データブロック先頭から)。 ut::ResU32 contentOffset; //! frameOffsetTable へのオフセットです(データブロック先頭から)。 ut::ResU32 frameOffsetTableOffset; /* Additional Info WindowContent content; internal::ResU32 frameOffsetTable[frameNum]; WindowFrame frames; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief Boundingペインを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_BOUNDING が指定されます。 //! //! @sa Lyt //! @sa PaneBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Bounding : public Pane { }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief 拡張ユーザデータを定義するデータブロックです。 //! //! @details //! 直近に定義されたペインに拡張ユーザデータを設定します。 //! //! blockHeader の kind には res::DATABLOCKKIND_USERDATALIST が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ ExtUserData extUserData[num]\n //! ・ u8 data[] //! //! @sa Lyt //! @sa Pane //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct ExtUserDataList { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! ユーザデータの数です。 ut::ResU16 num; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info ExtUserData extUserData[num]; */ }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief 子グループの定義を開始するデータブロックです。 //! //! @details //! GroupBegin と GroupEnd により子グループ列が定義されます。 //! //! GroupBegin の前の Group が親グループとなります。 //! //! @sa Lyt //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct GroupBegin { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief 子グループの定義を完了するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_GROUPEND が指定されます。 //! //! @sa Lyt //! @sa GroupBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct GroupEnd { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; }; //--------------------------------------------------------------------------- //! :category レイアウト・リソース //! //! @brief グループを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_GROUP が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ char panes[paneNum][ResourceNameStrMax] //! //! panes にはグループに属するペインの名前が格納されます。 //! //! @sa Lyt //! @sa GroupBegin //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Group { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! グループ名です。 char name[ResourceNameStrMax]; //! グループに属するペインの数です。 ut::ResU16 paneNum; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info char panes[paneNum][ResourceNameStrMax]; */ }; //@} //!--------------------------------------------------------------------------* //! @name アニメーション・リソース //@{ //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション・リソースファイルのヘッダです。 //! //! @details //! fileHeader の kind には res::FILESIGNATURE_CLAN が指定されます。 //! //! この構造体に以下のデータブロックの組み合わせが続きます。 //! //! ・ AnimationTagBlock\n //! ・ AnimationShareBlock\n //! ・ AnimationBlock //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Lan { //! ファイルヘッダです。 ut::BinaryFileHeader fileHeader; }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション区間タグを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMTAG が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ char name[]\n //! ・ AnimationGroupRef groups[groupNum] //! //! @sa Lan //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationTagBlock { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! アニメーション区間タグの通し番号です。 ut::ResU16 tagOrder; //! アニメーション区間タグのグループ数です。 ut::ResU16 groupNum; //! name へのオフセットです(データブロック先頭から)。 ut::ResU32 nameOffset; //! groups へのオフセットです(データブロック先頭から)。 ut::ResU32 groupsOffset; //! アニメーション区間の開始フレームです。 ut::ResS16 startFrame; //! アニメーション区間の終了フレームです。 ut::ResS16 endFrame; //! フラグです(lyt::AnimTagFlag)。 ut::ResU8 flag; //! (未使用です) ut::ResU8 padding[3]; /* Additional Info char name[]; AnimationGroupRef groups[groupNum]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション共有情報を定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMSHARE が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ AnimationShareInfo animShareInfos[shareNum] //! //! @sa Lan //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationShareBlock { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! animShareInfos へのオフセットです(データブロック先頭から)。 ut::ResU32 animShareInfoOffset; //! アニメーション共有情報の数です。 ut::ResU16 shareNum; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info AnimationShareInfo animShareInfos[shareNum]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーションを定義するデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_PANEANIMINFO が指定されます。 //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ ut::ResU32 fileNameOffsets[fileNum]\n //! ・ u8 namePool[]\n //! ・ ut::ResU32 animContOffsets[animContNum]\n //! ・ AnimationContent animCont0\n //! ・ … //! //! fileNameOffsets 配列には参照するテクスチャリソース名への //! オフセット(fileNameOffsetsより)を格納します。 //! //! animContOffsets 配列にはアニメーション内容への //! オフセット(データブロック先頭より)を格納します。 //! //! @sa Lan //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationBlock { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! フレーム数です。 ut::ResU16 frameSize; //! ループする場合は 1 を格納します。 ut::ResU8 loop; //! (未使用です) ut::ResU8 padding[1]; //! 参照するテクスチャリソースの数です。 ut::ResU16 fileNum; //! アニメーション内容の数です。 ut::ResU16 animContNum; //! animContOffsets へのオフセットです(データブロック先頭から)。 ut::ResU32 animContOffsetsOffset; /* Additional Info ut::ResU32 fileNameOffsets[fileNum]; u8 namePool[]; ut::ResU32 animContOffsets[animContNum]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション内容を定義します。 //! //! @details //! この構造体に以下のデータ構造が続きます。 //! //! ・ ut::ResU32 animInfoOffsets[num]\n //! ・ AnimationInfo animInfo0\n //! ・ … //! //! @sa Lan //! @sa AnimationBlock //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationContent { //! アニメーションの名前です。 char name[MaterialNameStrMax]; // ペイン名とマテリアル名の長い方の文字数分確保 //! アニメーション情報の数です。 ut::ResU8 num; //! タイプ(lyt::AnimContentType)です。 ut::ResU8 type; //! (未使用です) ut::ResU8 padding[2]; /* Additional Info ut::ResU32 animInfoOffsets[num]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション情報を定義します。 //! //! @details //! kind には以下のアニメーションタイプのいずれかが指定されます。 //! //! ・ lyt::ANIMATIONTYPE_PANESRT\n //! ・ lyt::ANIMATIONTYPE_VISIBILITY\n //! ・ lyt::ANIMATIONTYPE_VTXCOLOR\n //! ・ lyt::ANIMATIONTYPE_MATCOLOR\n //! ・ lyt::ANIMATIONTYPE_TEXSRT\n //! ・ lyt::ANIMATIONTYPE_TEXPATTERN //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ ut::ResU32 animTargetOffsets[num]\n //! ・ AnimationTarget animTarget0\n //! ・ … //! //! animTargetOffsets 配列は AnimationTarget へのオフセット(AnimationInfo 先頭から)を格納します。 //! //! @sa Lan //! @sa AnimationContent //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationInfo { //! アニメーションタイプです。 ut::ResU32 kind; //! アニメーション・ターゲットの数です。 ut::ResU8 num; //! (未使用です) ut::ResU8 padding[3]; /* Additional Info ut::ResU32 animTargetOffsets[num]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief アニメーション・ターゲットを定義します。 //! //! @details //! アニメーションの対象とカーブの情報です。 //! //! target にはアニメーションの対象に応じて以下の列挙型のいずれかが指定されます。 //! //! ・ lyt::AnimTargetPane\n //! ・ lyt::AnimTargetVisibility\n //! ・ lyt::AnimTargetPaneColor\n //! ・ lyt::AnimTargetMatColor\n //! ・ lyt::AnimTargetTexSRT\n //! ・ lyt::AnimTargetTexPattern //! //! この構造体に以下のデータ構造が続きます。 //! //! ・ HermiteKey keys[keyNum] //! //! または //! //! ・ StepKey keys[keyNum] //! //! @sa Lan //! @sa AnimationInfo //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct AnimationTarget { //! アニメーション対象が配列の場合のインデックスです。 ut::ResU8 id; //! アニメーション対象の属性をあらわす列挙値です。 ut::ResU8 target; //! カーブの種類です(lyt::AnimCurve)。 ut::ResU8 curveType; //! (未使用です) ut::ResU8 padding[1]; //! キーの数です。 ut::ResU16 keyNum; //! (未使用です) ut::ResU8 padding2[2]; //! keys へのオフセットです(AnimationTarget先頭から)。 ut::ResU32 keysOffset; /* Additional Info HermiteKey|StepKey keys[keyNum]; */ }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief エルミート曲線のキーを定義します。 //! //! @sa Lan //! @sa AnimationTarget //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct HermiteKey { //! フレームです。 ut::ResF32 frame; //! 値です。 ut::ResF32 value; //! 傾きです。 ut::ResF32 slope; }; //--------------------------------------------------------------------------- //! :category アニメーション・リソース //! //! @brief 階段状に変化するアニメーションカーブのキーを定義します。 //! //! @sa Lan //! @sa AnimationTarget //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct StepKey { //! フレームです。 ut::ResF32 frame; //! 値です。 ut::ResU16 value; //! (未使用です) ut::ResU16 padding[1]; }; //@} //!--------------------------------------------------------------------------* //! @name テクスチャイメージ・リソース //@{ //--------------------------------------------------------------------------- //! :category テクスチャイメージ・リソース //! //! @brief テクスチャイメージ・リソースファイルのヘッダです。 //! //! @details //! fileHeader の kind には res::FILESIGNATURE_CLIM が指定されます。 //! //! テクスチャイメージ・リソースファイルは以下のような構造になっています。 //! //! ・ u8 textureImage[imageSize]\n //! ・ Lim limHeader\n //! ・ Image imageInfo\n //! ・ ImageSize imageSize //! //! テクスチャイメージはハードウェアによるアライメント制限があるため //! ファイルの先頭に配置されます。 //! //! ファイルの末尾には ImageSize 構造体が格納されます。 //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Lim { //! ファイルヘッダです。 ut::BinaryFileHeader fileHeader; }; //--------------------------------------------------------------------------- //! :category テクスチャイメージ・リソース //! //! @brief テクスチャイメージ情報のデータブロックです。 //! //! @details //! blockHeader の kind には res::DATABLOCKKIND_IMAGE が指定されます。 //! //! @sa Lim //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct Image { //! ヘッダです。 ut::BinaryBlockHeader blockHeader; //! イメージの幅です。 ut::ResU16 width; //! イメージの高さです。 ut::ResU16 height; //! 画像データのフォーマットです(lyt::TexFormat)。 ut::ResU8 format; //! (未使用です) ut::ResU8 padding[3]; }; //--------------------------------------------------------------------------- //! :category テクスチャイメージ・リソース //! //! @brief テクスチャイメージのサイズ情報です。 //! //! @details //! テクスチャイメージ・リソースファイルの先頭に配置される画像データの //! バイト数の情報を持ちます。 //! //! @sa Lim //! //! @since 2010/01/26 初版。 //--------------------------------------------------------------------------- struct ImageSize { //! 画像データのバイト数です。(4の倍数) ut::ResU32 imageSize; }; } // namespace nw::lyt::res } // namespace nw::lyt } // namespace nw #endif // NW_LYT_RESOURCES_H_