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