1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_Pane.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: 25594 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_LYT_PANE_H_
17 #define NW_LYT_PANE_H_
18 
19 #include <cstddef>
20 #include <nw/ut/ut_LinkList.h>
21 #include <nw/ut/ut_Rect.h>
22 #include <nw/ut/ut_RuntimeTypeInfo.h>
23 
24 #include <nw/lyt/lyt_Common.h>
25 #include <nw/lyt/lyt_Resources.h>
26 #include <nw/lyt/lyt_Types.h>
27 
28 namespace nw
29 {
30 namespace lyt
31 {
32 namespace internal
33 {
34 
35 class PaneBase
36 {
37 public:
38     PaneBase();
39     virtual ~PaneBase();
40 
41 public:
42     //! @details :private
43     ut::LinkListNode m_Link;
44 };
45 
46 } // namespace nw::lyt::internal
47 
48 class AnimTransform;
49 class AnimationLin;
50 class AnimResource;
51 class Material;
52 class DrawInfo;
53 class Pane;
54 
55 //! @name 管理
56 //@{
57 
58 //! @brief ペインの一覧を保持するリストの定義です。
59 //!
60 //! @since 2009/09/18 初版。
61 //!
62 typedef ut::LinkList<Pane, offsetof(internal::PaneBase, m_Link)>   PaneList;
63 
64 //@}
65 
66 //---------------------------------------------------------------------------
67 //! :category 描画
68 //!
69 //! @brief ペインの基底クラスです。
70 //!
71 //! @since 2009/09/18 初版。
72 //---------------------------------------------------------------------------
73 class Pane : public internal::PaneBase
74 {
75 public:
76     //! 実行時型情報です。
77     NW_UT_RUNTIME_TYPEINFO;
78 
79     //----------------------------------------
80     //! @name コンストラクタ/デストラクタ
81     //@{
82 
83     //! @brief コンストラクタです。
84     //!
85     //! @details
86     //! デフォルト設定の状態で初期化します。
87     //!
88     //! @since 2009/09/18 初版。
89     //!
90     Pane();
91 
92     //! @brief コンストラクタです。
93     //!
94     //! @details
95     //! データブロックの設定を反映した状態で初期化します。
96     //!
97     //! @param pBlock ペインデータブロックへのポインタです。
98     //!
99     //! @since 2009/09/18 初版。
100     //!
101     Pane(const res::Pane* pBlock);
102 
103     //! @brief デストラクタです。
104     //!
105     //! @since 2009/09/18 初版。
106     //!
107     virtual ~Pane();
108 
109     //@}
110 
111     //----------------------------------------
112     //! @name 取得/設定
113     //@{
114 
115     //! @brief ペインの名前を取得します。
116     //!
117     //! @return ペインの名前を返します。
118     //!
119     //! @sa SetName
120     //!
121     //! @since 2009/09/18 初版。
122     //!
GetName()123     const char* GetName() const
124     {
125         return m_Name;
126     }
127 
128     //! @brief ペインの名前を設定します。
129     //!
130     //! @details
131     //! セットできるペイン名文字列の最大長は lyt::ResourceNameStrMax です。
132     //!
133     //! @param name 名前です。
134     //!
135     //! @sa GetName
136     //!
137     //! @since 2009/09/18 初版。
138     //!
139     void SetName(const char* name);
140 
141     //! @brief ユーザー情報を取得します。
142     //!
143     //! @return ユーザー情報を返します。
144     //!
145     //! @sa SetUserData
146     //!
147     //! @since 2009/09/18 初版。
148     //!
GetUserData()149     const char* GetUserData() const
150     {
151         return m_UserData;
152     }
153 
154     //! @brief ユーザー情報を設定します。
155     //!
156     //! @details
157     //! セットできるユーザー情報文字列の最大長は lyt::UserDataStrMax です。
158     //!
159     //! @param userData ユーザー情報です。
160     //!
161     //! @sa GetUserData
162     //!
163     //! @since 2009/09/18 初版。
164     //!
165     void SetUserData(const char* userData);
166 
167     //! @brief 親のアルファ値の変化が子に影響するかどうかを判定します。
168     //!
169     //! @return 親のアルファ値の変化が子に影響する場合は true を返します。
170     //!
171     //! @sa SetInfluencedAlpha
172     //!
173     //! @since 2009/09/18 初版。
174     //!
IsInfluencedAlpha()175     bool IsInfluencedAlpha() const
176     {
177         return internal::TestBit(m_Flag, PANEFLAG_INFLUENCEDALPHA);
178     }
179 
180     //! @brief 親のアルファ値の変化が子に影響するかどうかを設定します。
181     //!
182     //! @param bAlpha 親のアルファ値の変化が子に影響する場合には true を指定します。
183     //!
184     //! @sa IsInfluencedAlpha
185     //!
186     //! @since 2009/09/18 初版。
187     //!
SetInfluencedAlpha(bool bAlpha)188     void SetInfluencedAlpha(bool bAlpha)
189     {
190         internal::SetBit(&m_Flag, PANEFLAG_INFLUENCEDALPHA, bAlpha);
191     }
192 
193     //! @brief 位置調整処理の対象となるかどうかを判定します。
194     //!
195     //! @return 位置調整処理の対象となる場合は true を返します。
196     //!
197     //! @sa SetLocationAdjust
198     //!
199     //! @since 2009/09/18 初版。
200     //!
IsLocationAdjust()201     bool IsLocationAdjust() const
202     {
203         return internal::TestBit(m_Flag, PANEFLAG_LOCATIONADJUST);
204     }
205 
206     //! @brief 位置調整処理の対象となるかどうかを設定します。
207     //!
208     //! @param bAdjust 位置調整処理の対象となる場合には true を指定します。
209     //!
210     //! @sa IsLocationAdjust
211     //! @sa DrawInfo::SetLocationAdjust
212     //!
213     //! @since 2009/09/18 初版。
214     //!
SetLocationAdjust(bool bAdjust)215     void SetLocationAdjust(bool bAdjust)
216     {
217         internal::SetBit(&m_Flag, PANEFLAG_LOCATIONADJUST, bAdjust);
218         this->SetMtxDirty();
219     }
220 
221     //! @brief ペインの表示位置を取得します。
222     //!
223     //! @return ペインの表示位置を返します。
224     //!
225     //! @sa SetTranslate
226     //!
227     //! @since 2009/09/18 初版。
228     //!
GetTranslate()229     const math::VEC3& GetTranslate() const
230     {
231         return m_Translate;
232     }
233 
234     //! @brief ペインの表示位置を設定します。
235     //!
236     //! @param value ペインの表示位置です。
237     //!
238     //! @sa GetTranslate
239     //!
240     //! @since 2009/09/18 初版。
241     //!
SetTranslate(const math::VEC3 & value)242     void SetTranslate(const math::VEC3& value)
243     {
244         m_Translate = value;
245         this->SetMtxDirty();
246     }
247 
248     //! @brief ペインの表示位置を設定します。
249     //!
250     //! @details
251     //! Z 成分は 0 に設定されます。
252     //!
253     //! @param value ペインの表示位置です。
254     //!
255     //! @sa GetTranslate
256     //!
257     //! @since 2009/09/18 初版。
258     //!
SetTranslate(const math::VEC2 & value)259     void SetTranslate(const math::VEC2& value)
260     {
261         SetTranslate(math::VEC3(value.x, value.y, 0.f));
262     }
263 
264     //! @brief ペインの回転を取得します。
265     //!
266     //! @return X, Y, Z軸まわりの回転角度(Degree)を格納したベクトルを返します。
267     //!
268     //! @sa SetRotate
269     //!
270     //! @since 2009/09/18 初版。
271     //!
GetRotate()272     const math::VEC3& GetRotate() const
273     {
274         return m_Rotate;
275     }
276 
277     //! @brief ペインの回転を設定します。
278     //!
279     //! @param value X, Y, Z軸まわりの回転角度(Degree)を格納したベクトルです。
280     //!
281     //! @sa GetRotate
282     //!
283     //! @since 2009/09/18 初版。
284     //!
SetRotate(const math::VEC3 & value)285     void SetRotate(const math::VEC3& value)
286     {
287         m_Rotate = value;
288         this->SetMtxDirty();
289     }
290 
291     //! @brief ペインの拡大率を取得します。
292     //!
293     //! @return ペインの拡大率を返します。
294     //!
295     //! @sa SetScale
296     //!
297     //! @since 2009/09/18 初版。
298     //!
GetScale()299     const math::VEC2& GetScale() const
300     {
301         return m_Scale;
302     }
303 
304     //! @brief ペインの拡大率を設定します。
305     //!
306     //! @param value ペインの拡大率です。
307     //!
308     //! @sa GetScale
309     //!
310     //! @since 2009/09/18 初版。
311     //!
SetScale(const math::VEC2 & value)312     void SetScale(const math::VEC2& value)
313     {
314         m_Scale = value;
315         this->SetMtxDirty();
316     }
317 
318     //! @brief ペインのサイズを取得します。
319     //!
320     //! @return ペインのサイズを返します。
321     //!
322     //! @sa SetSize
323     //!
324     //! @since 2009/09/18 初版。
325     //!
GetSize()326     const Size& GetSize() const
327     {
328         return m_Size;
329     }
330 
331     //! @brief ペインのサイズを設定します。
332     //!
333     //! @param value ペインのサイズです。
334     //!
335     //! @sa GetSize
336     //!
337     //! @since 2009/09/18 初版。
338     //!
SetSize(const Size & value)339     void SetSize(const Size& value)
340     {
341         m_Size = value;
342     }
343 
344     //! @brief ペインの基準位置設定の水平位置指定を取得します。
345     //!
346     //! @details
347     //! 水平位置指定の値については lyt::HorizontalPosition を参照してください。
348     //!
349     //! @return 水平位置指定の値を返します。
350     //!
351     //! @sa SetBasePositionH
352     //! @sa GetBasePositionV
353     //! @sa lyt::HorizontalPosition
354     //!
355     //! @since 2009/09/18 初版。
356     //!
GetBasePositionH()357     u8 GetBasePositionH() const
358     {
359         return internal::GetHorizontalPosition(m_BasePosition);
360     }
361 
362     //! @brief ペインの基準位置設定の水平位置指定を設定します。
363     //!
364     //! @param val ペインの基準位置指定です。 lyt::HorizontalPosition を指定します。
365     //!
366     //! @sa GetBasePositionH
367     //! @sa SetBasePositionV
368     //! @sa lyt::HorizontalPosition
369     //!
370     //! @since 2009/09/18 初版。
371     //!
SetBasePositionH(u8 val)372     void SetBasePositionH(u8 val)
373     {
374         internal::SetHorizontalPosition(&m_BasePosition, val);
375     }
376 
377     //! @brief ペインの基準位置設定の垂直位置指定を取得します。
378     //!
379     //! @details
380     //! 垂直位置指定の値については lyt::VerticalPosition を参照してください。
381     //!
382     //! @return 垂直位置指定の値を返します。
383     //!
384     //! @sa SetBasePositionV
385     //! @sa GetBasePositionH
386     //! @sa lyt::VerticalPosition
387     //!
388     //! @since 2009/09/18 初版。
389     //!
GetBasePositionV()390     u8 GetBasePositionV() const
391     {
392         return internal::GetVerticalPosition(m_BasePosition);
393     }
394 
395     //! @brief ペインの基準位置設定の垂直位置指定を設定します。
396     //!
397     //! @param val ペインの基準位置指定です。 lyt::VerticalPosition を指定します。
398     //!
399     //! @sa GetBasePositionV
400     //! @sa SetBasePositionH
401     //! @sa lyt::VerticalPosition
402     //!
403     //! @since 2009/09/18 初版。
404     //!
SetBasePositionV(u8 val)405     void SetBasePositionV(u8 val)
406     {
407         internal::SetVerticalPosition(&m_BasePosition, val);
408     }
409 
410     //! @brief ペインの SRT 行列を取得します。
411     //!
412     //! @details
413     //! SRT 行列は通常、 CalculateMtx() で計算されます。
414     //!
415     //! @sa SetMtx
416     //! @sa CalculateMtx
417     //!
418     //! @since 2009/09/18 初版。
419     //!
GetMtx()420     const math::MTX34& GetMtx() const
421     {
422         return m_Mtx;
423     }
424 
425     //! @brief ペインの SRT 行列を設定します。
426     //!
427     //! @details
428     //! SRT 行列は通常は CalculateMtx() で計算されます。
429     //!
430     //! この関数で行列を指定すると、設定した行列がそのまま使用されます。
431     //!
432     //! CalculateMtx() による計算に戻すには ResetMtx() を使用します。
433     //!
434     //! SetGlobalMtx() を使用した場合には、そちらの設定が優先されます。
435     //!
436     //! @param mtx SRT 行列です。
437     //!
438     //! @sa GetMtx
439     //! @sa CalculateMtx
440     //! @sa ResetMtx
441     //! @sa SetGlobalMtx
442     //!
443     //! @date 2010/04/09 設定の状態を記憶するようにしました。
444     //! @since 2009/09/18 初版。
445     //!
SetMtx(const math::MTX34 & mtx)446     void SetMtx(const math::MTX34& mtx)
447     {
448         m_Mtx = mtx;
449         m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERMTX, true);
450     }
451 
452     //! @brief ペインの SRT 行列がユーザによって設定されているか調べます。
453     //!
454     //! @return
455     //! SRT 行列がユーザによって設定されている場合は true を返します。
456     //!
457     //! @sa SetMtx
458     //!
459     //! @since 2010/04/09 初版。
460     //!
IsUserMtx()461     bool IsUserMtx()
462     {
463         return internal::TestBit(m_Flag, PANEFLAG_USERMTX);
464     }
465 
466     //! @brief SRT 行列の設定を解除します。
467     //!
468     //! @details
469     //! SRT 行列は CalculateMtx() で計算されます。
470     //!
471     //! @sa SetMtx
472     //!
473     //! @since 2010/04/09 初版。
474     //!
ResetMtx()475     void ResetMtx()
476     {
477         m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERMTX, false);
478     }
479 
480     //! @brief 親子での計算後の SRT 行列を取得します。
481     //!
482     //! @details
483     //! SRT 行列は通常、 CalculateMtx() で計算されます。
484     //!
485     //! @return 親子での計算後の SRT 行列を返します。
486     //!
487     //! @sa SetGlobalMtx
488     //! @sa CalculateMtx
489     //!
490     //! @since 2009/09/18 初版。
491     //!
GetGlobalMtx()492     const math::MTX34& GetGlobalMtx() const
493     {
494         return m_GlbMtx;
495     }
496 
497     //! @brief グローバル行列を設定します。
498     //!
499     //! @details
500     //! グローバル行列はペインのローカル座標系からビュー座標系への
501     //! 変換行列です。
502     //!
503     //! グローバル行列は通常は CalculateMtx() で計算されます。
504     //!
505     //! この関数で行列を指定すると、設定した行列がそのまま使用されます。
506     //!
507     //! CalculateMtx() による計算に戻すには ResetGlobalMtx() を
508     //! 使用します。
509     //!
510     //! @param mtx SRT 行列です。
511     //!
512     //! @sa GetGlobalMtx
513     //! @sa ResetGlobalMtx
514     //! @sa CalculateMtx
515     //!
516     //! @date 2010/04/23 設定の状態を記憶するようにしました。
517     //! @since 2009/09/18 初版。
518     //!
SetGlobalMtx(const math::MTX34 & mtx)519     void SetGlobalMtx(const math::MTX34& mtx)
520     {
521         m_GlbMtx = mtx;
522         m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERGLOBALMTX, true);
523     }
524 
525     //! @brief グローバル行列がユーザによって設定されているか調べます。
526     //!
527     //! @return
528     //! グローバル行列がユーザによって設定されている場合は true を返します。
529     //!
530     //! @sa SetGlobalMtx
531     //!
532     //! @since 2010/04/09 初版。
533     //!
IsUserGlobalMtx()534     bool IsUserGlobalMtx()
535     {
536         return internal::TestBit(m_Flag, PANEFLAG_USERGLOBALMTX);
537     }
538 
539     //! @brief グローバル行列の設定を解除します。
540     //!
541     //! @details
542     //! グローバル行列は CalculateMtx() で計算されます。
543     //!
544     //! @sa SetGlobalMtx
545     //!
546     //! @since 2010/04/09 初版。
547     //!
ResetGlobalMtx()548     void ResetGlobalMtx()
549     {
550         m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERGLOBALMTX, false);
551     }
552 
553     //! @brief ペインのローカル座標系での矩形を取得します。
554     //!
555     //! @return 矩形を返します。
556     //!
557     //! @since 2009/09/18 初版。
558     //!
559     const ut::Rect GetPaneRect() const;
560 
561     //! @brief 頂点カラーを取得します。
562     //!
563     //! @details
564     //! 派生クラスで実装します。
565     //!
566     //! このクラスでは idx の指定にかかわらず ut::Color8::WHITE を返します。
567     //!
568     //! @param idx インデックスです。 lyt::VertexColor を指定します。
569     //!
570     //! @return ペインの四隅の頂点カラーを返します。
571     //!
572     //! @sa SetVtxColor
573     //! @sa GetVtxColorElement
574     //! @sa lyt::VertexColor
575     //!
576     //! @since 2009/09/18 初版。
577     //!
578     virtual const ut::Color8 GetVtxColor(u32 idx) const;
579 
580     //! @brief 頂点カラーを設定します。
581     //!
582     //! @details
583     //! idx の指定には lyt::VERTEXCOLOR_* を使用してください。
584     //!
585     //! 派生クラスでオーバーライドされます。基底クラスではなにもしません。
586     //!
587     //! @param idx インデックスです。 lyt::VertexColor を指定します。
588     //! @param value 頂点カラーです。
589     //!
590     //! @sa GetVtxColor
591     //! @sa SetVtxColorElement
592     //! @sa lyt::VertexColor
593     //!
594     //! @since 2009/09/18 初版。
595     //!
596     virtual void SetVtxColor(u32 idx, ut::Color8 value);
597 
598     //! @brief ペインのアルファ値を取得します。
599     //!
600     //! @return ペインのアルファ値を返します。
601     //!
602     //! @sa SetAlpha
603     //! @sa GetGlobalAlpha
604     //!
605     //! @since 2009/09/18 初版。
606     //!
GetAlpha()607     u8 GetAlpha() const
608     {
609         return m_Alpha;
610     }
611 
612     //! @brief ペインのアルファ値を設定します。
613     //!
614     //! @param alpha アルファ値です。
615     //!
616     //! @sa GetAlpha
617     //! @sa SetGlobalAlpha
618     //!
619     //! @since 2009/09/18 初版。
620     //!
SetAlpha(u8 alpha)621     void SetAlpha(u8 alpha)
622     {
623         m_Alpha = alpha;
624     }
625 
626     //! @brief ペインのグローバルアルファ値を取得します。
627     //!
628     //! @details
629     //! グローバルアルファ値は親ペインのアルファ値の影響を受けた
630     //! 状態でのペインのアルファ値です。
631     //!
632     //! @return ペインのグローバルアルファ値を返します。
633     //!
634     //! @sa SetAlpha
635     //! @sa GetAlpha
636     //!
637     //! @since 2009/09/18 初版。
638     //!
GetGlobalAlpha()639     u8 GetGlobalAlpha() const
640     {
641         return m_GlbAlpha;
642     }
643 
644     //! @brief ペインのグローバルアルファ値を設定します。
645     //!
646     //! @details
647     //! グローバルアルファ値は親ペインのアルファ値の影響を受けた状態でのペインのアルファ値です。
648     //!
649     //! グローバルアルファ値は通常、 CalculateMtx() で計算されます。
650     //!
651     //! @param alpha グローバルアルファ値です。
652     //!
653     //! @sa GetGlobalAlpha
654     //! @sa SetAlpha
655     //! @sa CalculateMtx
656     //!
657     //! @since 2009/09/18 初版。
658     //!
SetGlobalAlpha(u8 alpha)659     void SetGlobalAlpha(u8 alpha)
660     {
661         m_GlbAlpha = alpha;
662     }
663 
664     //! @brief インデックスを指定してペインの SRT 要素を取得します。
665     //!
666     //! @details
667     //! idx で取得したいペインの表示位置、回転、拡大率、サイズの要素を指定します。
668     //!
669     //! @param idx インデックスです。 lyt::AnimTargetPane を指定します。
670     //!
671     //! @return 指定された要素の値を返します。
672     //!
673     //! @sa SetSRTElement
674     //! @sa GetTranslate
675     //! @sa GetRotate
676     //! @sa GetScale
677     //! @sa GetSize
678     //! @sa lyt::AnimTargetPane
679     //!
680     //! @since 2009/09/18 初版。
681     //!
GetSRTElement(u32 idx)682     f32 GetSRTElement(u32 idx) const
683     {
684         NW_ASSERT(idx < ANIMTARGET_PANE_MAX);
685 
686         const f32* srtAry = &m_Translate.x;
687         return srtAry[idx];
688     }
689 
690     //! @brief インデックスを指定してペインの SRT 要素を設定します。
691     //!
692     //! @details
693     //! ペインの表示位置、回転、拡大率、サイズの要素を設定します。
694     //!
695     //! @param idx インデックスです。 lyt::AnimTargetPane() を指定します。
696     //! @param value 要素の値です。
697     //!
698     //! @sa GetSRTElement
699     //! @sa SetTranslate
700     //! @sa SetRotate
701     //! @sa SetScale
702     //! @sa SetSize
703     //! @sa lyt::AnimTargetPane
704     //!
705     //! @since 2009/09/18 初版。
706     //!
SetSRTElement(u32 idx,f32 value)707     void SetSRTElement(u32 idx, f32 value)
708     {
709         NW_ASSERT(idx < ANIMTARGET_PANE_MAX);
710 
711         f32* srtAry = &m_Translate.x;
712         srtAry[idx] = value;
713         if (idx < ANIMTARGET_PANE_SIZEW)
714         {
715             this->SetMtxDirty();
716         }
717     }
718 
719     //! @brief ペインのアルファ値または頂点カラーの各カラー成分を取得します。
720     //!
721     //! @details
722     //! ペインのアルファ値または四隅の頂点カラーの各成分を返します。
723     //!
724     //! このクラスでは idx の指定に lyt::ANIMTARGET_PANE_ALPHA を指定した場合は
725     //! ペインのアルファ値を返しますが、その他の指定では必ず 255 を返します。
726     //!
727     //! 他のカラー成分を持つ派生クラスでは本関数はオーバーライドされます。
728     //!
729     //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。
730     //!
731     //! @return ペインのアルファ値または四隅の頂点カラーの各成分を返します。
732     //!
733     //! @sa SetColorElement
734     //! @sa GetVtxColorElement
735     //! @sa lyt::AnimTargetPaneColor
736     //!
737     //! @since 2009/09/18 初版。
738     //!
739     virtual u8 GetColorElement(u32 idx) const;
740 
741     //! @brief ペインのアルファ値または頂点カラーの各カラー成分を設定します。
742     //!
743     //! @details
744     //! 導出クラスでオーバライドされます。
745     //!
746     //! このクラスではペインのアルファ値のみ設定することができます。
747     //!
748     //! @param idx インデックスです。 lyt::AnimTargetPaneColor を指定します。
749     //! @param value アルファ値またはカラーの成分値です。
750     //!
751     //! @sa GetColorElement
752     //! @sa SetVtxColorElement
753     //! @sa lyt::AnimTargetPaneColor
754     //!
755     //! @since 2009/09/18 初版。
756     //!
757     virtual void SetColorElement(u32 idx, u8 value);
758 
759     //! @brief 頂点カラーの各カラー成分を取得します。
760     //!
761     //! @details
762     //! 派生クラスでオーバーライドされます。
763     //! このクラスでは idx の指定にかかわらず 255 を返します。
764     //!
765     //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。
766     //!
767     //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。
768     //!
769     //! @return ペイン四隅の頂点カラーの各成分を返します。
770     //!
771     //! @sa GetColorElement
772     //! @sa SetVtxColorElement
773     //! @sa lyt::AnimTargetPaneColor
774     //!
775     //! @since 2009/09/18 初版。
776     //!
777     virtual u8 GetVtxColorElement(u32 idx) const;
778 
779     //! @brief 頂点カラーの各カラー成分を設定します。
780     //!
781     //! @details
782     //! 派生クラスでオーバーライドされます。
783     //! このクラスでは何もしません。
784     //!
785     //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。
786     //!
787     //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。
788     //! @param value カラーの成分値です。
789     //!
790     //! @sa GetVtxColorElement
791     //! @sa SetVtxColor
792     //! @sa lyt::AnimTargetPaneColor
793     //!
794     //! @since 2009/09/18 初版。
795     //!
796     virtual void SetVtxColorElement(u32 idx, u8 value);
797 
798     //! @brief ペインのマテリアルを取得します。
799     //!
800     //! @details
801     //! 複数のマテリアルを持つペインは最初のマテリアル (インデックスが0) を返します。
802     //!
803     //! マテリアルを持たない場合はNULLを返します。
804     //!
805     //! @return マテリアルへのポインタを返します。
806     //!
807     //! @since 2009/09/18 初版。
808     //!
809     Material* GetMaterial() const;
810 
811     //! @brief ペインが持つマテリアルの数を取得します。
812     //!
813     //! @return マテリアルの数を返します。
814     //!
815     //! @sa GetMaterial
816     //!
817     //! @since 2009/09/18 初版。
818     //!
819     virtual u8 GetMaterialNum() const;
820 
821     //! @brief ペインのマテリアルを取得します。
822     //!
823     //! @details
824     //! インデックスに対応するマテリアルが返されます。
825     //!
826     //! インデックスの意味は導出されたクラスによって異なります。
827     //!
828     //! インデックスは GetMaterialNum() が返す値よりも小さくなければなりません。
829     //!
830     //! マテリアルを持たない場合は NULL を返します。
831     //!
832     //! @param idx インデックスです。
833     //!
834     //! @return マテリアルへのポインタを返します。
835     //!
836     //! @sa GetMaterialNum
837     //!
838     //! @since 2009/09/18 初版。
839     //!
840     virtual Material* GetMaterial(u32 idx) const;
841 
842     //! @brief 拡張ユーザデータの個数を取得します。
843     //!
844     //! @return 拡張ユーザデータの個数を返します。
845     //!
846     //! @sa GetExtUserDataArray
847     //!
848     //! @since 2009/09/18 初版。
849     //!
850     u16 GetExtUserDataNum() const;
851 
852     //! @brief 拡張ユーザデータ配列を取得します。
853     //!
854     //! @return 拡張ユーザデータ配列の先頭要素のポインタを返します。
855     //!
856     //! @sa GetExtUserDataNum
857     //!
858     //! @since 2009/09/18 初版。
859     //!
860     const ExtUserData* GetExtUserDataArray() const;
861 
862     //! @brief 拡張ユーザデータを名前をもとに検索します。
863     //!
864     //! @param name 検索する拡張ユーザデータ名です。
865     //!
866     //! @return 見つかった場合は拡張ユーザデータへのポインタ、
867     //! 見つからなかった場合は NULL を返します。
868     //!
869     //! @since 2009/09/18 初版。
870     //!
871     const ExtUserData* FindExtUserDataByName(const char* name);
872 
873     //@}
874 
875     //----------------------------------------
876     //! @name 親子関係
877     //@{
878 
879     //! @brief 親ペインを取得します。
880     //!
881     //! @return
882     //! 親ペインへのポインタを返します。親ペインが存在しない場合は NULL を返します。
883     //!
884     //! @since 2009/09/18 初版。
885     //!
GetParent()886     __forceinline Pane* GetParent() const
887     {
888         return m_pParent;
889     }
890 
891     //! :private
892     //!
893     //! @brief 最初の子ペインを取得します。
894     //!
895     //! @return
896     //! 最初の子ペインへのポインタを返します。最初の子ペインが存在しない場合は NULL を返します。
897     //!
898     //! @since 2010/04/09 初版。
899     //!
GetFirstChild()900     __forceinline Pane* GetFirstChild() const
901     {
902         const PaneList& list = this->GetChildList();
903         if (!list.IsEmpty())
904         {
905             return const_cast<Pane*>(&list.front());
906         }
907         else
908         {
909             return NULL;
910         }
911     }
912 
913     //! :private
914     //!
915     //! @brief 次の子ペインを取得します。
916     //!
917     //! @details
918     //! pChild の次の子ペインを取得します。
919     //!
920     //! param pChild ペインへのポインタです。
921     //!
922     //! @return
923     //! 次の子ペインへのポインタを返します。次の子ペインが存在しない場合は NULL を返します。
924     //!
925     //! @since 2010/04/09 初版。
926     //!
GetNextChild(const Pane * pChild)927     __forceinline Pane* GetNextChild(const Pane* pChild) const
928     {
929         const PaneList& list = this->GetChildList();
930         return const_cast<Pane*>(list.GetNext(pChild));
931     }
932 
933     //! @brief 子ペインの一覧を取得します。
934     //!
935     //! @return 子ペインの一覧を返します。
936     //!
937     //! @since 2009/09/18 初版。
938     //!
GetChildList()939     __forceinline const PaneList & GetChildList() const
940     {
941         return m_ChildList;
942     }
943 
944     //! @brief 子ペインの一覧を取得します。
945     //!
946     //! @return 子ペインの一覧を返します。
947     //!
948     //! @since 2009/09/18 初版。
949     //!
GetChildList()950     __forceinline PaneList& GetChildList()
951     {
952         return m_ChildList;
953     }
954 
955     //! @brief ペインを子供ペインリストの末尾に追加します。
956     //!
957     //! @details
958     //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。
959     //!
960     //! @param pChild 追加するペインです。
961     //!
962     //! @sa PrependChild
963     //! @sa InsertChild
964     //! @sa RemoveChild
965     //!
966     //! @since 2009/09/18 初版。
967     //!
968     void AppendChild(Pane* pChild);
969 
970     //! @brief ペインを子供ペインリストの先頭に追加します。
971     //!
972     //! @details
973     //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。
974     //!
975     //! @param pChild 追加するペインです。
976     //!
977     //! @sa AppendChild
978     //! @sa InsertChild
979     //! @sa RemoveChild
980     //!
981     //! @since 2009/09/18 初版。
982     //!
983     void PrependChild(Pane* pChild);
984 
985     //! @brief 子ペインを指定した位置に挿入します。
986     //!
987     //! @details
988     //! pChild で指定したペインをこのペインの子として追加します。
989     //! pNext で指定したペインの次の位置に挿入します。
990     //!
991     //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。
992     //!
993     //! @param pNext 挿入する位置の1つ前となるペインです。
994     //! @param pChild 追加するペインです。
995     //!
996     //! @sa AppendChild
997     //! @sa PrependChild
998     //! @sa RemoveChild
999     //!
1000     //! @since 2009/09/18 初版。
1001     //!
1002     void InsertChild(
1003         Pane* pNext,
1004         Pane* pChild);
1005 
1006     //! @brief 子ペインを指定した位置に挿入します。
1007     //!
1008     //! @details
1009     //! pChild で指定したペインをこのペインの子として追加します。
1010     //! next で指定したイテレータの次の位置に挿入します。
1011     //!
1012     //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。
1013     //!
1014     //! @param next 挿入する位置の1つ前となるイテレータです。
1015     //! @param pChild 追加するペインです。
1016     //!
1017     //! @sa AppendChild
1018     //! @sa PrependChild
1019     //! @sa RemoveChild
1020     //!
1021     //! @since 2009/09/18 初版。
1022     //!
1023     void InsertChild(
1024         PaneList::Iterator next,
1025         Pane* pChild);
1026 
1027     //! @brief ペインを子供ペインリストから削除します。
1028     //!
1029     //! @param pChild 削除するペインです。
1030     //!
1031     //! @sa AppendChild
1032     //! @sa PrependChild
1033     //! @sa InsertChild
1034     //!
1035     //! @since 2009/09/18 初版。
1036     //!
1037     void RemoveChild(Pane* pChild);
1038 
1039     //@}
1040 
1041     //----------------------------------------
1042     //! @name 検索
1043     //@{
1044 
1045     //! @brief 名前でペインを検索します。
1046     //!
1047     //! @details
1048     //! findName のペイン名を持つペインを検索します。
1049     //!
1050     //! bRecursive に true を渡した場合は子ペインと、
1051     //! 子ペインが子を持つ場合はさらにその子ペインからも検索します。
1052 
1053     //! @param findName 検索するペイン名です。
1054     //! @param bRecursive 子ペインも検索する場合は true を指定します。
1055     //!
1056     //! @return
1057     //! findName のペイン名を持つペインが見つかった場合はペインへのポインタを、
1058     //! 見つからなかった場合は NULL を返します。
1059     //!
1060     //! @since 2009/09/18 初版。
1061     //!
1062     virtual Pane* FindPaneByName(
1063         const char* findName,
1064         bool bRecursive = true);
1065 
1066     //! @brief 名前でマテリアルを検索します。
1067     //!
1068     //! @details
1069     //! findName のマテリアル名を持つマテリアルを検索します。
1070     //!
1071     //! bRecursive に true を渡した場合は子ペインと、
1072     //! 子ペインが子を持つ場合はさらにその子ペインからも検索します。
1073     //!
1074     //! @param findName 検索するマテリアル名です。
1075     //! @param bRecursive 子ペインも検索する場合は true を指定します。
1076     //!
1077     //! @return
1078     //! findName のマテリアル名を持つマテリアルが見つかった場合は
1079     //! マテリアルへのポインタを、見つからなかった場合は NULL を返します。
1080     //!
1081     //! @since 2009/09/18 初版。
1082     //!
1083     virtual Material* FindMaterialByName(
1084         const char* findName,
1085         bool bRecursive = true);
1086 
1087     //@}
1088 
1089     //----------------------------------------
1090     //! @name アニメーション
1091     //@{
1092 
1093     //! @brief 自分と子供以下のアニメーションの結果を計算します。
1094     //!
1095     //! @details
1096     //! opiton に lyt::ANIMATEOPT_NOANIMATEINVISIBLE を指定した場合、
1097     //! 非表示のペイン(IsVisible() が false)とその子供以下の
1098     //! ペインのアニメーションの計算を省略します。
1099     //!
1100     //! @param option オプションです。 lyt::AnimateOpt を指定します。
1101     //!
1102     //! @sa lyt::AnimateOpt
1103     //! @sa IsVisible
1104     //!
1105     //! @since 2009/09/18 初版。
1106     //!
1107     virtual void Animate(u32 option);
1108 
1109     //! @brief 自分のアニメーションの結果を計算します。
1110     //!
1111     //! @details
1112     //! opiton に lyt::ANIMATEOPT_NOANIMATEINVISIBLE を指定した場合、
1113     //! 非表示のペイン(IsVisible() が false)とその子供以下の
1114     //! ペインのアニメーションの計算を省略します。
1115     //!
1116     //! @param option オプションです。 lyt::AnimateOpt を指定します。
1117     //!
1118     //! @sa lyt::AnimateOpt
1119     //! @sa IsVisible
1120     //!
1121     //! @since 2009/09/18 初版。
1122     //!
1123     virtual void AnimateSelf(u32 option);
1124 
1125     //! @brief 関連付けられているアニメーションのリストを取得します。
1126     //!
1127     //! @return アニメーションリンク情報のリストを返します。
1128     //!
1129     //! @sa AnimationLink
1130     //!
1131     //! @since 2009/09/18 初版。
1132     //!
GetAnimationList()1133     const AnimationList& GetAnimationList() const
1134     {
1135         return m_AnimList;
1136     }
1137 
1138     //! @brief 関連付けられているアニメーションのリストを取得します。
1139     //!
1140     //! @since 2009/09/18 初版。
1141     //!
GetAnimationList()1142     AnimationList& GetAnimationList()
1143     {
1144         return m_AnimList;
1145     }
1146 
1147     //! @brief アニメーションを関連付けます。
1148     //!
1149     //! @details
1150     //! bRecursive に true を渡して呼び出した場合は、
1151     //! 関連付けるペインを子ペインからも検索します。
1152     //!
1153     //! bDisable に true を渡して呼び出した場合は、
1154     //! アニメーションを無効状態で関連付けます。
1155     //! 有効にする場合は SetAnimationEnable() を使用してください。
1156     //!
1157     //! @param pAnimTrans アニメーションへのポインタです。
1158     //! @param bRecursive 子ペインも検索する場合は true を指定します。
1159     //! @param bDisable アニメーションを無効状態で関連付ける場合は true を指定します。
1160     //!
1161     //! @sa UnbindAnimation
1162     //! @sa UnbindAnimationSelf
1163     //! @sa UnbindAllAnimation
1164     //! @sa SetAnimationEnable
1165     //!
1166     //! @since 2009/09/18 初版。
1167     //!
1168     virtual void BindAnimation(
1169         AnimTransform* pAnimTrans,
1170         bool bRecursive = true,
1171         bool bDisable = false);
1172 
1173     //! @brief アニメーションの関連付けを解除します。
1174     //!
1175     //! @details
1176     //! pAnimTrans に NULL を渡した場合はすべての関連付けが解除されます。
1177     //! (UnbindAllAnimation() と同義)
1178     //!
1179     //! @param pAnimTrans アニメーションへのポインタです。
1180     //! @param bRecursive 子ペインも検索する場合は true を指定します。
1181     //!
1182     //! @sa BindAnimation
1183     //! @sa UnbindAnimationSelf
1184     //! @sa UnbindAllAnimation
1185     //!
1186     //! @since 2009/09/18 初版。
1187     //!
1188     virtual void UnbindAnimation(
1189         AnimTransform* pAnimTrans,
1190         bool bRecursive = true);
1191 
1192     //! @brief すべてのアニメーションの関連付けを解除します。
1193     //!
1194     //! @details
1195     //! BindAnimation() の引数に NULL を渡すのと同義です。
1196     //!
1197     //! @param bRecursive 子ペインも検索する場合は true を指定します。
1198     //!
1199     //! @sa BindAnimation
1200     //! @sa UnbindAnimation
1201     //! @sa UnbindAnimationSelf
1202     //!
1203     //! @since 2009/09/18 初版。
1204     //!
1205     virtual void UnbindAllAnimation(bool bRecursive = true);
1206 
1207     //! @brief 自身のアニメーションの関連付けを解除します。
1208     //!
1209     //! @details
1210     //! pAnimTrans に NULL を渡した場合はすべてのアニメーションとの関連付けが解除されます。
1211     //!
1212     //! @param pAnimTrans アニメーションへのポインタです。
1213     //!
1214     //! @sa BindAnimation
1215     //! @sa UnbindAnimation
1216     //! @sa UnbindAllAnimation
1217     //!
1218     //! @since 2009/09/18 初版。
1219     //!
1220     virtual void UnbindAnimationSelf(AnimTransform* pAnimTrans);
1221 
1222     //! @brief アニメーションリンク情報を追加します。
1223     //!
1224     //! @param pAnimationLink アニメーションリンク情報へのポインタです。
1225     //!
1226     //! @since 2009/09/18 初版。
1227     //!
1228     void AddAnimationLink(AnimationLink* pAnimationLink);
1229 
1230     //! @brief アニメーションリンク情報を検索します。
1231     //!
1232     //! @details
1233     //! 指定されたアニメーションを持つアニメーションリンク情報を検索します。
1234     //!
1235     //! @param pAnimTrans アニメーションへのポインタです。
1236     //!
1237     //! @return
1238     //! 見つかった場合はアニメーションリンク情報へのポインタを、
1239     //! 見つからなかった場合は NULL を返します。
1240     //!
1241     //! @since 2009/09/18 初版。
1242     //!
1243     virtual AnimationLink* FindAnimationLinkSelf(AnimTransform* pAnimTrans);
1244 
1245     //! @brief アニメーションリンク情報を検索します。
1246     //!
1247     //! @details
1248     //! 指定されたアニメーションリソースを使用するアニメーション(AnimTransform)を
1249     //! 持つアニメーションリンク情報を検索します。
1250     //!
1251     //! @param animRes アニメーションリソースオブジェクトです。
1252     //!
1253     //! @return
1254     //! 見つかった場合はアニメーションリンク情報へのポインタを、
1255     //! 見つからなかった場合は NULL を返します。
1256     //!
1257     //! @sa AnimTransform
1258     //!
1259     //! @since 2009/09/18 初版。
1260     //!
1261     virtual AnimationLink* FindAnimationLinkSelf(const AnimResource& animRes);
1262 
1263     //! @brief アニメーションの有効/無効状態を設定します。
1264     //!
1265     //! @details
1266     //! bRecursive に true を渡して呼び出した場合は、設定するペインを子ペインからも検索します。
1267     //!
1268     //! 指定されたアニメーションの有効/無効状態を設定します。
1269     //!
1270     //! @param pAnimTrans 有効/無効にする AnimTransform インスタンスへのポインタです。
1271     //! @param bEnable セットするアニメーションの状態です。
1272     //!                true の場合は有効、falseの場合は無効に設定します。
1273     //! @param bRecursive true の場合は、子供のペインに再帰的に処理します。
1274     //!
1275     //! @since 2009/09/18 初版。
1276     //!
1277     virtual void SetAnimationEnable(
1278         AnimTransform* pAnimTrans,
1279         bool bEnable,
1280         bool bRecursive = true);
1281 
1282     //! @brief アニメーションの有効/無効状態を設定します。
1283     //!
1284     //! @details
1285     //! bRecursive に true を渡して呼び出した場合は、設定するペインを子ペインからも検索します。
1286     //!
1287     //! 指定されたアニメーションリソースを使用する
1288     //! アニメーション(AnimTransform)の有効/無効状態を設定します。
1289     //!
1290     //! @param animRes アニメーションリソースオブジェクトです。
1291     //! @param bEnable セットするアニメーションの状態です。
1292     //!                true の場合は有効、falseの場合は無効に設定します。
1293     //! @param bRecursive true の場合は、子供のペインに再帰的に処理します。
1294     //!
1295     //! @sa AnimTransform
1296     //!
1297     //! @since 2009/09/18 初版。
1298     //!
1299     virtual void SetAnimationEnable(
1300         const AnimResource& animRes,
1301         bool bEnable,
1302         bool bRecursive  = true);
1303 
1304     //@}
1305 
1306     //----------------------------------------
1307     //! @name 描画
1308     //@{
1309 
1310     //! @brief ペインが表示されるかどうかを判定します。
1311     //!
1312     //! @return ペインが表示される場合は true を、表示されない場合は false を返します。
1313     //!
1314     //! @sa SetVisible
1315     //!
1316     //! @since 2009/09/18 初版。
1317     //!
IsVisible()1318     bool IsVisible() const
1319     {
1320         return internal::TestBit(m_Flag, PANEFLAG_VISIBLE);
1321     }
1322 
1323     //! @brief ペインの表示/非表示を設定します。
1324     //!
1325     //! @param bVisible ペインを表示させる場合は true を指定します。
1326     //!
1327     //! @sa IsVisible
1328     //!
1329     //! @since 2009/09/18 初版。
1330     //!
SetVisible(bool bVisible)1331     void SetVisible(bool bVisible)
1332     {
1333         internal::SetBit(&m_Flag, PANEFLAG_VISIBLE, bVisible);
1334     }
1335 
1336     //! @brief 描画のための行列を計算します。
1337     //!
1338     //! @param drawInfo 描画情報です。
1339     //!
1340     //! @since 2009/09/18 初版。
1341     //!
1342     virtual void CalculateMtx(const DrawInfo& drawInfo);
1343 
1344     //@}
1345 
1346     //! @brief ユーザーがペインを構築したかどうかを判定します。
1347     //!
1348     //! @return ペインをユーザーが構築した場合は true を返します。
1349     //!
1350     //! @since 2009/09/18 初版。
1351     //!
IsUserAllocated()1352     bool IsUserAllocated() const
1353     {
1354         return internal::TestBit(m_Flag, PANEFLAG_USERALLOCATED);
1355     }
1356 
1357     //! @brief ユーザーが構築したペインであることを宣言します。
1358     //!
1359     //! @details
1360     //! ユーザが構築したと宣言されたペインはライブラリによって解放されません。
1361     //!
1362     //! @since 2010/03/26 初版。
1363     //!
SetUserAllocated()1364     void SetUserAllocated()
1365     {
1366         internal::SetBit(&m_Flag, PANEFLAG_USERALLOCATED, true);
1367     }
1368 
1369     //! @brief 拡張ユーザデータリストを設定します。
1370     //!
1371     //! @param pBlock 拡張ユーザデータリソースへのポインタです。
1372     //!
1373     //! @since 2009/09/18 初版。
1374     //!
SetExtUserDataList(const res::ExtUserDataList * pBlock)1375     void SetExtUserDataList(const res::ExtUserDataList* pBlock)
1376     {
1377         m_pExtUserDataList = pBlock;
1378     }
1379 
1380 #ifdef NW_LYT_DMPGL_ENABLED
1381     //! @brief ペイン自身と子ペインの描画処理を行います。
1382     //!
1383     //! @details
1384     //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを
1385     //! ビルドした場合にのみ利用可能です。
1386     //!
1387     //! Layout および親ペインから呼ばれます。
1388     //!
1389     //! DrawSelf() でペイン自身の描画を行い、次に子ペインの Draw() を
1390     //! 呼び出します。
1391     //!
1392     //! @param drawInfo 描画情報です。
1393     //!
1394     //! @since 2009/09/18 初版。
1395     //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。
1396     //!
1397     virtual void Draw(const DrawInfo& drawInfo);
1398 
1399     //! @brief 自身の描画処理を行います。
1400     //!
1401     //! @details
1402     //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを
1403     //! ビルドした場合にのみ利用可能です。
1404     //!
1405     //! Layout および親ペインから呼ばれます。
1406     //!
1407     //! @param drawInfo 描画情報です。
1408     //!
1409     //! @since 2009/09/18 初版。
1410     //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。
1411     //!
1412     virtual void DrawSelf(const DrawInfo& drawInfo);
1413 #endif
1414 
1415 #ifdef NW_LYT_DRAWER_ENABLE
1416     //! @details :private
1417     void MakeUniformData( DrawInfo* pDrawInfo, Drawer* pDrawer ) const;
1418 
1419     //! @details :private
1420     virtual void MakeUniformDataSelf( DrawInfo* pDrawInfo, Drawer* pDrawer ) const;
1421 #endif
1422 
1423 
1424     //! @brief SRT行列の再計算を要求します。
1425     //!
1426     //! @since 2010/04/09 初版。
1427     //!
SetMtxDirty()1428     __forceinline void SetMtxDirty()
1429     {
1430         this->SetMtxCondition(MTXCONDITION_DIRTY);
1431     }
1432 
1433 protected:
1434 #ifdef NW_LYT_DMPGL_ENABLED
1435     //! @brief モデルビュー行列を計算し GraphicsResource に設定します。
1436     //!
1437     //! @details
1438     //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを
1439     //! ビルドした場合にのみ利用可能です。
1440     //!
1441     //! @param drawInfo 描画情報です。
1442     //!
1443     //! @since 2009/09/18 初版。
1444     //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。
1445     //!
1446     virtual void LoadMtx(const DrawInfo& drawInfo);
1447 #endif
1448 
1449     //! @brief ペインの左上の座標を取得します。
1450     //!
1451     //! @return 座標を返します。
1452     //!
1453     //! @since 2009/09/18 初版。
1454     //!
1455     const math::VEC2 GetVtxPos() const;
1456 
1457     //! @brief ローカル行列の状態を取得します。
1458     //!
1459     //! @return ローカル行列の状態を返します。
1460     //!
1461     //! @since 2010/04/09 初版。
1462     //!
GetMtxCondition()1463     __forceinline MtxCondition GetMtxCondition() const
1464     {
1465         return static_cast<MtxCondition>(internal::GetBits(m_Flag, PANEFLAG_MTXCONDITION, PANEFLAG_MTXCONDITION_LENGTH));
1466     }
1467 
1468     //! @brief ローカル行列の状態を設定します。
1469     //!
1470     //! @param mtxCondition ローカル行列の状態です。
1471     //!
1472     //! @since 2010/04/09 初版。
1473     //!
SetMtxCondition(MtxCondition mtxCondition)1474     __forceinline void SetMtxCondition(MtxCondition mtxCondition)
1475     {
1476         m_Flag = internal::SetBits(m_Flag, PANEFLAG_MTXCONDITION, PANEFLAG_MTXCONDITION_LENGTH, static_cast<u8>(mtxCondition));
1477     }
1478 
1479 private:
1480     Pane* m_pParent;
1481     PaneList m_ChildList;
1482     AnimationList m_AnimList;
1483 
1484     math::VEC3 m_Translate;
1485     math::VEC3 m_Rotate;
1486     math::VEC2 m_Scale;
1487     Size m_Size;
1488 
1489     // ペインのSRT行列
1490     math::MTX34 m_Mtx;
1491     // ペインのSRT行列 (親子での計算後)
1492     math::MTX34 m_GlbMtx;
1493 
1494     const res::ExtUserDataList* m_pExtUserDataList;
1495 
1496     u8 m_Alpha;
1497     u8 m_GlbAlpha;
1498     u8 m_BasePosition;
1499     u8 m_Flag;
1500 
1501     char m_Name[ResourceNameStrMax + 1];
1502     char m_UserData[UserDataStrMax + 1];
1503 
1504 private:
1505     // コピーコンストラクタと代入演算子の呼び出しを禁止します。実装してはいけません。
1506     Pane(const Pane& other);
1507     Pane& operator = (const Pane& other);
1508 
1509     void Init();
1510     void CalculateMtxChild(const DrawInfo& drawInfo);
1511 };
1512 
1513 } // namespace nw::lyt
1514 } // namespace nw
1515 
1516 #endif // NW_LYT_PANE_H_
1517 
1518