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