1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_Util.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: 18738 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_LYT_UTIL_H_
17 #define NW_LYT_UTIL_H_
18 
19 #include <nw/lyt/lyt_Types.h>
20 
21 namespace nw
22 {
23 namespace math
24 {
25 
26 struct VEC2;
27 struct MTX23;
28 
29 } // namespace nw::math
30 
31 namespace lyt
32 {
33 
34 class Pane;
35 class Layout;
36 class DrawInfo;
37 class Group;
38 class AnimTransform;
39 class TexMap;
40 
41 //----------------------------------------
42 //! @name アニメーション
43 //@{
44 
45 //---------------------------------------------------------------------------
46 //! @brief グループ内の個々のペインにアニメーションを関連付けます。
47 //!
48 //! @param pGroup グループへのポインタです。
49 //! @param pAnimTrans アニメーションへのポインタです。
50 //! @param bRecursive 子ペインも検索する場合は true を指定します。
51 //! @param bDisable アニメーションを無効状態で関連付ける場合は true を指定します。
52 //!
53 //! @details
54 //! bRecursive に true を渡して呼び出した場合は、関連付けるペインを
55 //! 子ペインからも検索します。
56 //!
57 //! bDisable に true を渡して呼び出した場合は、アニメーションを無効状態で
58 //! 関連付けます。
59 //! 有効にする場合は、 SetAnimationEnable() を使用してください。
60 //!
61 //! @sa nw::lyt::UnbindAnimation
62 //! @sa nw::lyt::Pane::BindAnimation
63 //! @sa nw::lyt::Pane::SetAnimationEnable
64 //!
65 //! @since 2009/09/18 初版。
66 //---------------------------------------------------------------------------
67 void                BindAnimation(
68                         Group*          pGroup,
69                         AnimTransform*  pAnimTrans,
70                         bool            bRecursive  = true,
71                         bool            bDisable    = false);
72 
73 //---------------------------------------------------------------------------
74 //! @brief グループ内の個々のペインからアニメーションの関連付けを解除します。
75 //!
76 //! @param pGroup グループへのポインタです。
77 //! @param pAnimTrans アニメーションへのポインタです。
78 //! @param bRecursive 子ペインも検索する場合は true を指定します。
79 //!
80 //! @sa nw::lyt::BindAnimation
81 //! @sa nw::lyt::Pane::UnbindAnimation
82 //!
83 //! @since 2009/09/18 初版。
84 //---------------------------------------------------------------------------
85 void                UnbindAnimation(
86                         Group*          pGroup,
87                         AnimTransform*  pAnimTrans,
88                         bool            bRecursive = true);
89 
90 //---------------------------------------------------------------------------
91 //! @brief グループ内の個々のペインに対して、アニメーションの
92 //! 有効/無効状態を設定します。
93 //!
94 //! @param pGroup グループへのポインタです。
95 //! @param pAnimTrans アニメーションへのポインタです。
96 //! @param bEnable 有効にする場合は true を指定します。
97 //! @param bRecursive 子ペインも検索する場合は true を指定します。
98 //!
99 //! @details
100 //! bRecursive に true を渡して呼び出した場合は、設定するペインを子ペイン
101 //! からも検索します。
102 //!
103 //! @since 2009/09/18 初版。
104 //---------------------------------------------------------------------------
105 void                SetAnimationEnable(
106                         Group*          pGroup,
107                         AnimTransform*  pAnimTrans,
108                         bool            bEnable,
109                         bool            bRecursive = true);
110 
111 //@}
112 
113 //----------------------------------------
114 //! @name ヒットチェック
115 //@{
116 
117 //---------------------------------------------------------------------------
118 //! @brief ペインが指定した点を含むかどうかを判定します。
119 //!
120 //! @param pPane ペインへのポインタです。
121 //! @param pos チェックする点の位置です。
122 //!
123 //! @return ペインが pos で指定した点を含む場合は true を返します。
124 //!
125 //! @details
126 //! ペインの で指定した点を含むかどうかを判別します。
127 //!
128 //! Pane::CalculateMtx() によって計算された行列の値を使用するため、
129 //! この関数を呼び出す前に、 Pane::CalculateMtx() が呼び出されている
130 //! 必要があります。
131 //!
132 //! この関数は、ペインの回転の x, y の値が 0 であることを前提にしています。
133 //! 0 以外の値の場合は正しく判定できません。
134 //!
135 //! @sa nw::lyt::FindHitPane
136 //!
137 //! @since 2009/09/18 初版。
138 //---------------------------------------------------------------------------
139 bool                IsContain(
140                         Pane*               pPane,
141                         const math::VEC2&   pos);
142 
143 //---------------------------------------------------------------------------
144 //! @brief 指定した点を含むペインを検索します。
145 //!
146 //! @param pPane ペインへのポインタです。
147 //! @param pos チェックする点の位置です。
148 //!
149 //! @return 指定した点を含む境界ペインが見つかった場合は境界ペインへの
150 //! ポインタを、見つからなかった場合は NULL を返します。
151 //!
152 //! @details
153 //! pos で指定した点を含む境界ペインを検索します。検索順は、描画順と逆の
154 //! 順序になります。非表示のペインとその子階層は検索対象になりません。
155 //!
156 //! pPane で指定したペインをルートとして検索します。
157 //!
158 //! @since 2009/09/18 初版。
159 //---------------------------------------------------------------------------
160 Pane*               FindHitPane(
161                         Pane*               pPane,
162                         const math::VEC2&   pos);
163 
164 //---------------------------------------------------------------------------
165 //! @brief 指定した点を含むペインを検索します。
166 //!
167 //! @param pLayout レイアウトへのポインタです。
168 //! @param pos チェックする点の位置です。
169 //!
170 //! @return 指定した点を含む境界ペインが見つかった場合は境界ペインへの
171 //! ポインタを、見つからなかった場合は NULL を返します。
172 //!
173 //! @details
174 //! pos で指定した点を含む境界ペインを検索します。検索順は、描画順と逆の
175 //! 順序になります。非表示のペインとその子階層は検索対象になりません。
176 //!
177 //! レイアウト全てのペインを検索対象とします。
178 //!
179 //! Pane::CalculateMtx() によって計算された行列の値を使用するため、
180 //! この関数を呼び出す前に、 Pane::CalculateMtx() が呼び出されている
181 //! 必要があります。
182 //!
183 //! この関数は、ペインの回転の x, y の値が 0 であることを前提にしています。」
184 //! 0 以外の値の場合は正しく判定できません。
185 //!
186 //! @since 2009/09/18 初版。
187 //---------------------------------------------------------------------------
188 Pane*               FindHitPane(
189                         Layout*             pLayout,
190                         const math::VEC2&   pos);
191 
192 //@}
193 
194 //---------------------------------------------------------------------------
195 //! @brief ペインの子供、あるいは兄弟のペインのポインタを返します。
196 //!
197 //! @param pPane ペインへのポインタです。
198 //!
199 //! @return ペインの子供、あるいは兄弟のペインのポインタを返します。
200 //! 該当するペインが無い場合は NULL を返します。
201 //!
202 //! @details
203 //! 引数 pPane で指定されたペインの子供、あるいは兄弟のペインを返します。
204 //! 最初にルートペインを引数にして呼び出し、以後 NULL が返るまで返り値を引数に
205 //! 設定して呼び出すことで、全てのペインを列挙することが出来ます。
206 //!
207 //! @since 2009/09/18 初版。
208 //---------------------------------------------------------------------------
209 Pane*               GetNextPane(Pane* pPane);
210 
211 //---------------------------------------------------------------------------
212 //! @brief テクスチャをOpenGLにロードします。
213 //!
214 //! @details
215 //! texLoadFlag がデフォルト値の場合には NN_GX_MEM_FCRAM | GL_NO_COPY_FCRAM_DMP
216 //! が指定されます。
217 //!
218 //! @param pImgRes リソースです。
219 //! @param size リソースのサイズです。
220 //! @param texLoadFlag ロード方法を制御するフラグです。
221 //!
222 //! @return テクスチャ情報を返します。
223 //!
224 //! @since 2009/09/18 初版。
225 //! @date 2010/06/18 texLoadFlag 引数を追加しました。
226 //---------------------------------------------------------------------------
227 const TextureInfo   LoadTexture(const void* pImgRes, u32 size, int texLoadFlag = 0);
228 
229 //---------------------------------------------------------------------------
230 //! @brief テクスチャの座標変換行列を求めます。
231 //!
232 //! @param[out] pTexMtx 計算結果の格納先です。
233 //! @param texSRT テクスチャのSRT情報です。
234 //! @param texMap テクスチャ情報です。
235 //!
236 //! @since 2010/03/26 初版。
237 //---------------------------------------------------------------------------
238 void CalcTextureMtx(math::MTX23* pTexMtx, const TexSRT& texSRT, const TexMap& texMap);
239 
240 } // namespace nw::lyt
241 } // namespace nw
242 
243 #endif // NW_LYT_UTIL_H_
244