/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_Pane.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 25594 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_PANE_H_ #define NW_LYT_PANE_H_ #include #include #include #include #include #include #include namespace nw { namespace lyt { namespace internal { class PaneBase { public: PaneBase(); virtual ~PaneBase(); public: //! @details :private ut::LinkListNode m_Link; }; } // namespace nw::lyt::internal class AnimTransform; class AnimationLin; class AnimResource; class Material; class DrawInfo; class Pane; //! @name 管理 //@{ //! @brief ペインの一覧を保持するリストの定義です。 //! //! @since 2009/09/18 初版。 //! typedef ut::LinkList PaneList; //@} //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief ペインの基底クラスです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class Pane : public internal::PaneBase { public: //! 実行時型情報です。 NW_UT_RUNTIME_TYPEINFO; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! デフォルト設定の状態で初期化します。 //! //! @since 2009/09/18 初版。 //! Pane(); //! @brief コンストラクタです。 //! //! @details //! データブロックの設定を反映した状態で初期化します。 //! //! @param pBlock ペインデータブロックへのポインタです。 //! //! @since 2009/09/18 初版。 //! Pane(const res::Pane* pBlock); //! @brief デストラクタです。 //! //! @since 2009/09/18 初版。 //! virtual ~Pane(); //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief ペインの名前を取得します。 //! //! @return ペインの名前を返します。 //! //! @sa SetName //! //! @since 2009/09/18 初版。 //! const char* GetName() const { return m_Name; } //! @brief ペインの名前を設定します。 //! //! @details //! セットできるペイン名文字列の最大長は lyt::ResourceNameStrMax です。 //! //! @param name 名前です。 //! //! @sa GetName //! //! @since 2009/09/18 初版。 //! void SetName(const char* name); //! @brief ユーザー情報を取得します。 //! //! @return ユーザー情報を返します。 //! //! @sa SetUserData //! //! @since 2009/09/18 初版。 //! const char* GetUserData() const { return m_UserData; } //! @brief ユーザー情報を設定します。 //! //! @details //! セットできるユーザー情報文字列の最大長は lyt::UserDataStrMax です。 //! //! @param userData ユーザー情報です。 //! //! @sa GetUserData //! //! @since 2009/09/18 初版。 //! void SetUserData(const char* userData); //! @brief 親のアルファ値の変化が子に影響するかどうかを判定します。 //! //! @return 親のアルファ値の変化が子に影響する場合は true を返します。 //! //! @sa SetInfluencedAlpha //! //! @since 2009/09/18 初版。 //! bool IsInfluencedAlpha() const { return internal::TestBit(m_Flag, PANEFLAG_INFLUENCEDALPHA); } //! @brief 親のアルファ値の変化が子に影響するかどうかを設定します。 //! //! @param bAlpha 親のアルファ値の変化が子に影響する場合には true を指定します。 //! //! @sa IsInfluencedAlpha //! //! @since 2009/09/18 初版。 //! void SetInfluencedAlpha(bool bAlpha) { internal::SetBit(&m_Flag, PANEFLAG_INFLUENCEDALPHA, bAlpha); } //! @brief 位置調整処理の対象となるかどうかを判定します。 //! //! @return 位置調整処理の対象となる場合は true を返します。 //! //! @sa SetLocationAdjust //! //! @since 2009/09/18 初版。 //! bool IsLocationAdjust() const { return internal::TestBit(m_Flag, PANEFLAG_LOCATIONADJUST); } //! @brief 位置調整処理の対象となるかどうかを設定します。 //! //! @param bAdjust 位置調整処理の対象となる場合には true を指定します。 //! //! @sa IsLocationAdjust //! @sa DrawInfo::SetLocationAdjust //! //! @since 2009/09/18 初版。 //! void SetLocationAdjust(bool bAdjust) { internal::SetBit(&m_Flag, PANEFLAG_LOCATIONADJUST, bAdjust); this->SetMtxDirty(); } //! @brief ペインの表示位置を取得します。 //! //! @return ペインの表示位置を返します。 //! //! @sa SetTranslate //! //! @since 2009/09/18 初版。 //! const math::VEC3& GetTranslate() const { return m_Translate; } //! @brief ペインの表示位置を設定します。 //! //! @param value ペインの表示位置です。 //! //! @sa GetTranslate //! //! @since 2009/09/18 初版。 //! void SetTranslate(const math::VEC3& value) { m_Translate = value; this->SetMtxDirty(); } //! @brief ペインの表示位置を設定します。 //! //! @details //! Z 成分は 0 に設定されます。 //! //! @param value ペインの表示位置です。 //! //! @sa GetTranslate //! //! @since 2009/09/18 初版。 //! void SetTranslate(const math::VEC2& value) { SetTranslate(math::VEC3(value.x, value.y, 0.f)); } //! @brief ペインの回転を取得します。 //! //! @return X, Y, Z軸まわりの回転角度(Degree)を格納したベクトルを返します。 //! //! @sa SetRotate //! //! @since 2009/09/18 初版。 //! const math::VEC3& GetRotate() const { return m_Rotate; } //! @brief ペインの回転を設定します。 //! //! @param value X, Y, Z軸まわりの回転角度(Degree)を格納したベクトルです。 //! //! @sa GetRotate //! //! @since 2009/09/18 初版。 //! void SetRotate(const math::VEC3& value) { m_Rotate = value; this->SetMtxDirty(); } //! @brief ペインの拡大率を取得します。 //! //! @return ペインの拡大率を返します。 //! //! @sa SetScale //! //! @since 2009/09/18 初版。 //! const math::VEC2& GetScale() const { return m_Scale; } //! @brief ペインの拡大率を設定します。 //! //! @param value ペインの拡大率です。 //! //! @sa GetScale //! //! @since 2009/09/18 初版。 //! void SetScale(const math::VEC2& value) { m_Scale = value; this->SetMtxDirty(); } //! @brief ペインのサイズを取得します。 //! //! @return ペインのサイズを返します。 //! //! @sa SetSize //! //! @since 2009/09/18 初版。 //! const Size& GetSize() const { return m_Size; } //! @brief ペインのサイズを設定します。 //! //! @param value ペインのサイズです。 //! //! @sa GetSize //! //! @since 2009/09/18 初版。 //! void SetSize(const Size& value) { m_Size = value; } //! @brief ペインの基準位置設定の水平位置指定を取得します。 //! //! @details //! 水平位置指定の値については lyt::HorizontalPosition を参照してください。 //! //! @return 水平位置指定の値を返します。 //! //! @sa SetBasePositionH //! @sa GetBasePositionV //! @sa lyt::HorizontalPosition //! //! @since 2009/09/18 初版。 //! u8 GetBasePositionH() const { return internal::GetHorizontalPosition(m_BasePosition); } //! @brief ペインの基準位置設定の水平位置指定を設定します。 //! //! @param val ペインの基準位置指定です。 lyt::HorizontalPosition を指定します。 //! //! @sa GetBasePositionH //! @sa SetBasePositionV //! @sa lyt::HorizontalPosition //! //! @since 2009/09/18 初版。 //! void SetBasePositionH(u8 val) { internal::SetHorizontalPosition(&m_BasePosition, val); } //! @brief ペインの基準位置設定の垂直位置指定を取得します。 //! //! @details //! 垂直位置指定の値については lyt::VerticalPosition を参照してください。 //! //! @return 垂直位置指定の値を返します。 //! //! @sa SetBasePositionV //! @sa GetBasePositionH //! @sa lyt::VerticalPosition //! //! @since 2009/09/18 初版。 //! u8 GetBasePositionV() const { return internal::GetVerticalPosition(m_BasePosition); } //! @brief ペインの基準位置設定の垂直位置指定を設定します。 //! //! @param val ペインの基準位置指定です。 lyt::VerticalPosition を指定します。 //! //! @sa GetBasePositionV //! @sa SetBasePositionH //! @sa lyt::VerticalPosition //! //! @since 2009/09/18 初版。 //! void SetBasePositionV(u8 val) { internal::SetVerticalPosition(&m_BasePosition, val); } //! @brief ペインの SRT 行列を取得します。 //! //! @details //! SRT 行列は通常、 CalculateMtx() で計算されます。 //! //! @sa SetMtx //! @sa CalculateMtx //! //! @since 2009/09/18 初版。 //! const math::MTX34& GetMtx() const { return m_Mtx; } //! @brief ペインの SRT 行列を設定します。 //! //! @details //! SRT 行列は通常は CalculateMtx() で計算されます。 //! //! この関数で行列を指定すると、設定した行列がそのまま使用されます。 //! //! CalculateMtx() による計算に戻すには ResetMtx() を使用します。 //! //! SetGlobalMtx() を使用した場合には、そちらの設定が優先されます。 //! //! @param mtx SRT 行列です。 //! //! @sa GetMtx //! @sa CalculateMtx //! @sa ResetMtx //! @sa SetGlobalMtx //! //! @date 2010/04/09 設定の状態を記憶するようにしました。 //! @since 2009/09/18 初版。 //! void SetMtx(const math::MTX34& mtx) { m_Mtx = mtx; m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERMTX, true); } //! @brief ペインの SRT 行列がユーザによって設定されているか調べます。 //! //! @return //! SRT 行列がユーザによって設定されている場合は true を返します。 //! //! @sa SetMtx //! //! @since 2010/04/09 初版。 //! bool IsUserMtx() { return internal::TestBit(m_Flag, PANEFLAG_USERMTX); } //! @brief SRT 行列の設定を解除します。 //! //! @details //! SRT 行列は CalculateMtx() で計算されます。 //! //! @sa SetMtx //! //! @since 2010/04/09 初版。 //! void ResetMtx() { m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERMTX, false); } //! @brief 親子での計算後の SRT 行列を取得します。 //! //! @details //! SRT 行列は通常、 CalculateMtx() で計算されます。 //! //! @return 親子での計算後の SRT 行列を返します。 //! //! @sa SetGlobalMtx //! @sa CalculateMtx //! //! @since 2009/09/18 初版。 //! const math::MTX34& GetGlobalMtx() const { return m_GlbMtx; } //! @brief グローバル行列を設定します。 //! //! @details //! グローバル行列はペインのローカル座標系からビュー座標系への //! 変換行列です。 //! //! グローバル行列は通常は CalculateMtx() で計算されます。 //! //! この関数で行列を指定すると、設定した行列がそのまま使用されます。 //! //! CalculateMtx() による計算に戻すには ResetGlobalMtx() を //! 使用します。 //! //! @param mtx SRT 行列です。 //! //! @sa GetGlobalMtx //! @sa ResetGlobalMtx //! @sa CalculateMtx //! //! @date 2010/04/23 設定の状態を記憶するようにしました。 //! @since 2009/09/18 初版。 //! void SetGlobalMtx(const math::MTX34& mtx) { m_GlbMtx = mtx; m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERGLOBALMTX, true); } //! @brief グローバル行列がユーザによって設定されているか調べます。 //! //! @return //! グローバル行列がユーザによって設定されている場合は true を返します。 //! //! @sa SetGlobalMtx //! //! @since 2010/04/09 初版。 //! bool IsUserGlobalMtx() { return internal::TestBit(m_Flag, PANEFLAG_USERGLOBALMTX); } //! @brief グローバル行列の設定を解除します。 //! //! @details //! グローバル行列は CalculateMtx() で計算されます。 //! //! @sa SetGlobalMtx //! //! @since 2010/04/09 初版。 //! void ResetGlobalMtx() { m_Flag = internal::SetBit(m_Flag, PANEFLAG_USERGLOBALMTX, false); } //! @brief ペインのローカル座標系での矩形を取得します。 //! //! @return 矩形を返します。 //! //! @since 2009/09/18 初版。 //! const ut::Rect GetPaneRect() const; //! @brief 頂点カラーを取得します。 //! //! @details //! 派生クラスで実装します。 //! //! このクラスでは idx の指定にかかわらず ut::Color8::WHITE を返します。 //! //! @param idx インデックスです。 lyt::VertexColor を指定します。 //! //! @return ペインの四隅の頂点カラーを返します。 //! //! @sa SetVtxColor //! @sa GetVtxColorElement //! @sa lyt::VertexColor //! //! @since 2009/09/18 初版。 //! virtual const ut::Color8 GetVtxColor(u32 idx) const; //! @brief 頂点カラーを設定します。 //! //! @details //! idx の指定には lyt::VERTEXCOLOR_* を使用してください。 //! //! 派生クラスでオーバーライドされます。基底クラスではなにもしません。 //! //! @param idx インデックスです。 lyt::VertexColor を指定します。 //! @param value 頂点カラーです。 //! //! @sa GetVtxColor //! @sa SetVtxColorElement //! @sa lyt::VertexColor //! //! @since 2009/09/18 初版。 //! virtual void SetVtxColor(u32 idx, ut::Color8 value); //! @brief ペインのアルファ値を取得します。 //! //! @return ペインのアルファ値を返します。 //! //! @sa SetAlpha //! @sa GetGlobalAlpha //! //! @since 2009/09/18 初版。 //! u8 GetAlpha() const { return m_Alpha; } //! @brief ペインのアルファ値を設定します。 //! //! @param alpha アルファ値です。 //! //! @sa GetAlpha //! @sa SetGlobalAlpha //! //! @since 2009/09/18 初版。 //! void SetAlpha(u8 alpha) { m_Alpha = alpha; } //! @brief ペインのグローバルアルファ値を取得します。 //! //! @details //! グローバルアルファ値は親ペインのアルファ値の影響を受けた //! 状態でのペインのアルファ値です。 //! //! @return ペインのグローバルアルファ値を返します。 //! //! @sa SetAlpha //! @sa GetAlpha //! //! @since 2009/09/18 初版。 //! u8 GetGlobalAlpha() const { return m_GlbAlpha; } //! @brief ペインのグローバルアルファ値を設定します。 //! //! @details //! グローバルアルファ値は親ペインのアルファ値の影響を受けた状態でのペインのアルファ値です。 //! //! グローバルアルファ値は通常、 CalculateMtx() で計算されます。 //! //! @param alpha グローバルアルファ値です。 //! //! @sa GetGlobalAlpha //! @sa SetAlpha //! @sa CalculateMtx //! //! @since 2009/09/18 初版。 //! void SetGlobalAlpha(u8 alpha) { m_GlbAlpha = alpha; } //! @brief インデックスを指定してペインの SRT 要素を取得します。 //! //! @details //! idx で取得したいペインの表示位置、回転、拡大率、サイズの要素を指定します。 //! //! @param idx インデックスです。 lyt::AnimTargetPane を指定します。 //! //! @return 指定された要素の値を返します。 //! //! @sa SetSRTElement //! @sa GetTranslate //! @sa GetRotate //! @sa GetScale //! @sa GetSize //! @sa lyt::AnimTargetPane //! //! @since 2009/09/18 初版。 //! f32 GetSRTElement(u32 idx) const { NW_ASSERT(idx < ANIMTARGET_PANE_MAX); const f32* srtAry = &m_Translate.x; return srtAry[idx]; } //! @brief インデックスを指定してペインの SRT 要素を設定します。 //! //! @details //! ペインの表示位置、回転、拡大率、サイズの要素を設定します。 //! //! @param idx インデックスです。 lyt::AnimTargetPane() を指定します。 //! @param value 要素の値です。 //! //! @sa GetSRTElement //! @sa SetTranslate //! @sa SetRotate //! @sa SetScale //! @sa SetSize //! @sa lyt::AnimTargetPane //! //! @since 2009/09/18 初版。 //! void SetSRTElement(u32 idx, f32 value) { NW_ASSERT(idx < ANIMTARGET_PANE_MAX); f32* srtAry = &m_Translate.x; srtAry[idx] = value; if (idx < ANIMTARGET_PANE_SIZEW) { this->SetMtxDirty(); } } //! @brief ペインのアルファ値または頂点カラーの各カラー成分を取得します。 //! //! @details //! ペインのアルファ値または四隅の頂点カラーの各成分を返します。 //! //! このクラスでは idx の指定に lyt::ANIMTARGET_PANE_ALPHA を指定した場合は //! ペインのアルファ値を返しますが、その他の指定では必ず 255 を返します。 //! //! 他のカラー成分を持つ派生クラスでは本関数はオーバーライドされます。 //! //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。 //! //! @return ペインのアルファ値または四隅の頂点カラーの各成分を返します。 //! //! @sa SetColorElement //! @sa GetVtxColorElement //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual u8 GetColorElement(u32 idx) const; //! @brief ペインのアルファ値または頂点カラーの各カラー成分を設定します。 //! //! @details //! 導出クラスでオーバライドされます。 //! //! このクラスではペインのアルファ値のみ設定することができます。 //! //! @param idx インデックスです。 lyt::AnimTargetPaneColor を指定します。 //! @param value アルファ値またはカラーの成分値です。 //! //! @sa GetColorElement //! @sa SetVtxColorElement //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual void SetColorElement(u32 idx, u8 value); //! @brief 頂点カラーの各カラー成分を取得します。 //! //! @details //! 派生クラスでオーバーライドされます。 //! このクラスでは idx の指定にかかわらず 255 を返します。 //! //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 //! //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。 //! //! @return ペイン四隅の頂点カラーの各成分を返します。 //! //! @sa GetColorElement //! @sa SetVtxColorElement //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual u8 GetVtxColorElement(u32 idx) const; //! @brief 頂点カラーの各カラー成分を設定します。 //! //! @details //! 派生クラスでオーバーライドされます。 //! このクラスでは何もしません。 //! //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 //! //! @param idx インデックスです。 lyt::AnimTargetPaneColor の値を指定します。 //! @param value カラーの成分値です。 //! //! @sa GetVtxColorElement //! @sa SetVtxColor //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual void SetVtxColorElement(u32 idx, u8 value); //! @brief ペインのマテリアルを取得します。 //! //! @details //! 複数のマテリアルを持つペインは最初のマテリアル (インデックスが0) を返します。 //! //! マテリアルを持たない場合はNULLを返します。 //! //! @return マテリアルへのポインタを返します。 //! //! @since 2009/09/18 初版。 //! Material* GetMaterial() const; //! @brief ペインが持つマテリアルの数を取得します。 //! //! @return マテリアルの数を返します。 //! //! @sa GetMaterial //! //! @since 2009/09/18 初版。 //! virtual u8 GetMaterialNum() const; //! @brief ペインのマテリアルを取得します。 //! //! @details //! インデックスに対応するマテリアルが返されます。 //! //! インデックスの意味は導出されたクラスによって異なります。 //! //! インデックスは GetMaterialNum() が返す値よりも小さくなければなりません。 //! //! マテリアルを持たない場合は NULL を返します。 //! //! @param idx インデックスです。 //! //! @return マテリアルへのポインタを返します。 //! //! @sa GetMaterialNum //! //! @since 2009/09/18 初版。 //! virtual Material* GetMaterial(u32 idx) const; //! @brief 拡張ユーザデータの個数を取得します。 //! //! @return 拡張ユーザデータの個数を返します。 //! //! @sa GetExtUserDataArray //! //! @since 2009/09/18 初版。 //! u16 GetExtUserDataNum() const; //! @brief 拡張ユーザデータ配列を取得します。 //! //! @return 拡張ユーザデータ配列の先頭要素のポインタを返します。 //! //! @sa GetExtUserDataNum //! //! @since 2009/09/18 初版。 //! const ExtUserData* GetExtUserDataArray() const; //! @brief 拡張ユーザデータを名前をもとに検索します。 //! //! @param name 検索する拡張ユーザデータ名です。 //! //! @return 見つかった場合は拡張ユーザデータへのポインタ、 //! 見つからなかった場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! const ExtUserData* FindExtUserDataByName(const char* name); //@} //---------------------------------------- //! @name 親子関係 //@{ //! @brief 親ペインを取得します。 //! //! @return //! 親ペインへのポインタを返します。親ペインが存在しない場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! __forceinline Pane* GetParent() const { return m_pParent; } //! :private //! //! @brief 最初の子ペインを取得します。 //! //! @return //! 最初の子ペインへのポインタを返します。最初の子ペインが存在しない場合は NULL を返します。 //! //! @since 2010/04/09 初版。 //! __forceinline Pane* GetFirstChild() const { const PaneList& list = this->GetChildList(); if (!list.IsEmpty()) { return const_cast(&list.front()); } else { return NULL; } } //! :private //! //! @brief 次の子ペインを取得します。 //! //! @details //! pChild の次の子ペインを取得します。 //! //! param pChild ペインへのポインタです。 //! //! @return //! 次の子ペインへのポインタを返します。次の子ペインが存在しない場合は NULL を返します。 //! //! @since 2010/04/09 初版。 //! __forceinline Pane* GetNextChild(const Pane* pChild) const { const PaneList& list = this->GetChildList(); return const_cast(list.GetNext(pChild)); } //! @brief 子ペインの一覧を取得します。 //! //! @return 子ペインの一覧を返します。 //! //! @since 2009/09/18 初版。 //! __forceinline const PaneList & GetChildList() const { return m_ChildList; } //! @brief 子ペインの一覧を取得します。 //! //! @return 子ペインの一覧を返します。 //! //! @since 2009/09/18 初版。 //! __forceinline PaneList& GetChildList() { return m_ChildList; } //! @brief ペインを子供ペインリストの末尾に追加します。 //! //! @details //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。 //! //! @param pChild 追加するペインです。 //! //! @sa PrependChild //! @sa InsertChild //! @sa RemoveChild //! //! @since 2009/09/18 初版。 //! void AppendChild(Pane* pChild); //! @brief ペインを子供ペインリストの先頭に追加します。 //! //! @details //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。 //! //! @param pChild 追加するペインです。 //! //! @sa AppendChild //! @sa InsertChild //! @sa RemoveChild //! //! @since 2009/09/18 初版。 //! void PrependChild(Pane* pChild); //! @brief 子ペインを指定した位置に挿入します。 //! //! @details //! pChild で指定したペインをこのペインの子として追加します。 //! pNext で指定したペインの次の位置に挿入します。 //! //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。 //! //! @param pNext 挿入する位置の1つ前となるペインです。 //! @param pChild 追加するペインです。 //! //! @sa AppendChild //! @sa PrependChild //! @sa RemoveChild //! //! @since 2009/09/18 初版。 //! void InsertChild( Pane* pNext, Pane* pChild); //! @brief 子ペインを指定した位置に挿入します。 //! //! @details //! pChild で指定したペインをこのペインの子として追加します。 //! next で指定したイテレータの次の位置に挿入します。 //! //! このペインやこのペインを子ペインに持つペインを追加しないように注意してください。 //! //! @param next 挿入する位置の1つ前となるイテレータです。 //! @param pChild 追加するペインです。 //! //! @sa AppendChild //! @sa PrependChild //! @sa RemoveChild //! //! @since 2009/09/18 初版。 //! void InsertChild( PaneList::Iterator next, Pane* pChild); //! @brief ペインを子供ペインリストから削除します。 //! //! @param pChild 削除するペインです。 //! //! @sa AppendChild //! @sa PrependChild //! @sa InsertChild //! //! @since 2009/09/18 初版。 //! void RemoveChild(Pane* pChild); //@} //---------------------------------------- //! @name 検索 //@{ //! @brief 名前でペインを検索します。 //! //! @details //! findName のペイン名を持つペインを検索します。 //! //! bRecursive に true を渡した場合は子ペインと、 //! 子ペインが子を持つ場合はさらにその子ペインからも検索します。 //! @param findName 検索するペイン名です。 //! @param bRecursive 子ペインも検索する場合は true を指定します。 //! //! @return //! findName のペイン名を持つペインが見つかった場合はペインへのポインタを、 //! 見つからなかった場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! virtual Pane* FindPaneByName( const char* findName, bool bRecursive = true); //! @brief 名前でマテリアルを検索します。 //! //! @details //! findName のマテリアル名を持つマテリアルを検索します。 //! //! bRecursive に true を渡した場合は子ペインと、 //! 子ペインが子を持つ場合はさらにその子ペインからも検索します。 //! //! @param findName 検索するマテリアル名です。 //! @param bRecursive 子ペインも検索する場合は true を指定します。 //! //! @return //! findName のマテリアル名を持つマテリアルが見つかった場合は //! マテリアルへのポインタを、見つからなかった場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! virtual Material* FindMaterialByName( const char* findName, bool bRecursive = true); //@} //---------------------------------------- //! @name アニメーション //@{ //! @brief 自分と子供以下のアニメーションの結果を計算します。 //! //! @details //! opiton に lyt::ANIMATEOPT_NOANIMATEINVISIBLE を指定した場合、 //! 非表示のペイン(IsVisible() が false)とその子供以下の //! ペインのアニメーションの計算を省略します。 //! //! @param option オプションです。 lyt::AnimateOpt を指定します。 //! //! @sa lyt::AnimateOpt //! @sa IsVisible //! //! @since 2009/09/18 初版。 //! virtual void Animate(u32 option); //! @brief 自分のアニメーションの結果を計算します。 //! //! @details //! opiton に lyt::ANIMATEOPT_NOANIMATEINVISIBLE を指定した場合、 //! 非表示のペイン(IsVisible() が false)とその子供以下の //! ペインのアニメーションの計算を省略します。 //! //! @param option オプションです。 lyt::AnimateOpt を指定します。 //! //! @sa lyt::AnimateOpt //! @sa IsVisible //! //! @since 2009/09/18 初版。 //! virtual void AnimateSelf(u32 option); //! @brief 関連付けられているアニメーションのリストを取得します。 //! //! @return アニメーションリンク情報のリストを返します。 //! //! @sa AnimationLink //! //! @since 2009/09/18 初版。 //! const AnimationList& GetAnimationList() const { return m_AnimList; } //! @brief 関連付けられているアニメーションのリストを取得します。 //! //! @since 2009/09/18 初版。 //! AnimationList& GetAnimationList() { return m_AnimList; } //! @brief アニメーションを関連付けます。 //! //! @details //! bRecursive に true を渡して呼び出した場合は、 //! 関連付けるペインを子ペインからも検索します。 //! //! bDisable に true を渡して呼び出した場合は、 //! アニメーションを無効状態で関連付けます。 //! 有効にする場合は SetAnimationEnable() を使用してください。 //! //! @param pAnimTrans アニメーションへのポインタです。 //! @param bRecursive 子ペインも検索する場合は true を指定します。 //! @param bDisable アニメーションを無効状態で関連付ける場合は true を指定します。 //! //! @sa UnbindAnimation //! @sa UnbindAnimationSelf //! @sa UnbindAllAnimation //! @sa SetAnimationEnable //! //! @since 2009/09/18 初版。 //! virtual void BindAnimation( AnimTransform* pAnimTrans, bool bRecursive = true, bool bDisable = false); //! @brief アニメーションの関連付けを解除します。 //! //! @details //! pAnimTrans に NULL を渡した場合はすべての関連付けが解除されます。 //! (UnbindAllAnimation() と同義) //! //! @param pAnimTrans アニメーションへのポインタです。 //! @param bRecursive 子ペインも検索する場合は true を指定します。 //! //! @sa BindAnimation //! @sa UnbindAnimationSelf //! @sa UnbindAllAnimation //! //! @since 2009/09/18 初版。 //! virtual void UnbindAnimation( AnimTransform* pAnimTrans, bool bRecursive = true); //! @brief すべてのアニメーションの関連付けを解除します。 //! //! @details //! BindAnimation() の引数に NULL を渡すのと同義です。 //! //! @param bRecursive 子ペインも検索する場合は true を指定します。 //! //! @sa BindAnimation //! @sa UnbindAnimation //! @sa UnbindAnimationSelf //! //! @since 2009/09/18 初版。 //! virtual void UnbindAllAnimation(bool bRecursive = true); //! @brief 自身のアニメーションの関連付けを解除します。 //! //! @details //! pAnimTrans に NULL を渡した場合はすべてのアニメーションとの関連付けが解除されます。 //! //! @param pAnimTrans アニメーションへのポインタです。 //! //! @sa BindAnimation //! @sa UnbindAnimation //! @sa UnbindAllAnimation //! //! @since 2009/09/18 初版。 //! virtual void UnbindAnimationSelf(AnimTransform* pAnimTrans); //! @brief アニメーションリンク情報を追加します。 //! //! @param pAnimationLink アニメーションリンク情報へのポインタです。 //! //! @since 2009/09/18 初版。 //! void AddAnimationLink(AnimationLink* pAnimationLink); //! @brief アニメーションリンク情報を検索します。 //! //! @details //! 指定されたアニメーションを持つアニメーションリンク情報を検索します。 //! //! @param pAnimTrans アニメーションへのポインタです。 //! //! @return //! 見つかった場合はアニメーションリンク情報へのポインタを、 //! 見つからなかった場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! virtual AnimationLink* FindAnimationLinkSelf(AnimTransform* pAnimTrans); //! @brief アニメーションリンク情報を検索します。 //! //! @details //! 指定されたアニメーションリソースを使用するアニメーション(AnimTransform)を //! 持つアニメーションリンク情報を検索します。 //! //! @param animRes アニメーションリソースオブジェクトです。 //! //! @return //! 見つかった場合はアニメーションリンク情報へのポインタを、 //! 見つからなかった場合は NULL を返します。 //! //! @sa AnimTransform //! //! @since 2009/09/18 初版。 //! virtual AnimationLink* FindAnimationLinkSelf(const AnimResource& animRes); //! @brief アニメーションの有効/無効状態を設定します。 //! //! @details //! bRecursive に true を渡して呼び出した場合は、設定するペインを子ペインからも検索します。 //! //! 指定されたアニメーションの有効/無効状態を設定します。 //! //! @param pAnimTrans 有効/無効にする AnimTransform インスタンスへのポインタです。 //! @param bEnable セットするアニメーションの状態です。 //! true の場合は有効、falseの場合は無効に設定します。 //! @param bRecursive true の場合は、子供のペインに再帰的に処理します。 //! //! @since 2009/09/18 初版。 //! virtual void SetAnimationEnable( AnimTransform* pAnimTrans, bool bEnable, bool bRecursive = true); //! @brief アニメーションの有効/無効状態を設定します。 //! //! @details //! bRecursive に true を渡して呼び出した場合は、設定するペインを子ペインからも検索します。 //! //! 指定されたアニメーションリソースを使用する //! アニメーション(AnimTransform)の有効/無効状態を設定します。 //! //! @param animRes アニメーションリソースオブジェクトです。 //! @param bEnable セットするアニメーションの状態です。 //! true の場合は有効、falseの場合は無効に設定します。 //! @param bRecursive true の場合は、子供のペインに再帰的に処理します。 //! //! @sa AnimTransform //! //! @since 2009/09/18 初版。 //! virtual void SetAnimationEnable( const AnimResource& animRes, bool bEnable, bool bRecursive = true); //@} //---------------------------------------- //! @name 描画 //@{ //! @brief ペインが表示されるかどうかを判定します。 //! //! @return ペインが表示される場合は true を、表示されない場合は false を返します。 //! //! @sa SetVisible //! //! @since 2009/09/18 初版。 //! bool IsVisible() const { return internal::TestBit(m_Flag, PANEFLAG_VISIBLE); } //! @brief ペインの表示/非表示を設定します。 //! //! @param bVisible ペインを表示させる場合は true を指定します。 //! //! @sa IsVisible //! //! @since 2009/09/18 初版。 //! void SetVisible(bool bVisible) { internal::SetBit(&m_Flag, PANEFLAG_VISIBLE, bVisible); } //! @brief 描画のための行列を計算します。 //! //! @param drawInfo 描画情報です。 //! //! @since 2009/09/18 初版。 //! virtual void CalculateMtx(const DrawInfo& drawInfo); //@} //! @brief ユーザーがペインを構築したかどうかを判定します。 //! //! @return ペインをユーザーが構築した場合は true を返します。 //! //! @since 2009/09/18 初版。 //! bool IsUserAllocated() const { return internal::TestBit(m_Flag, PANEFLAG_USERALLOCATED); } //! @brief ユーザーが構築したペインであることを宣言します。 //! //! @details //! ユーザが構築したと宣言されたペインはライブラリによって解放されません。 //! //! @since 2010/03/26 初版。 //! void SetUserAllocated() { internal::SetBit(&m_Flag, PANEFLAG_USERALLOCATED, true); } //! @brief 拡張ユーザデータリストを設定します。 //! //! @param pBlock 拡張ユーザデータリソースへのポインタです。 //! //! @since 2009/09/18 初版。 //! void SetExtUserDataList(const res::ExtUserDataList* pBlock) { m_pExtUserDataList = pBlock; } #ifdef NW_LYT_DMPGL_ENABLED //! @brief ペイン自身と子ペインの描画処理を行います。 //! //! @details //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを //! ビルドした場合にのみ利用可能です。 //! //! Layout および親ペインから呼ばれます。 //! //! DrawSelf() でペイン自身の描画を行い、次に子ペインの Draw() を //! 呼び出します。 //! //! @param drawInfo 描画情報です。 //! //! @since 2009/09/18 初版。 //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。 //! virtual void Draw(const DrawInfo& drawInfo); //! @brief 自身の描画処理を行います。 //! //! @details //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを //! ビルドした場合にのみ利用可能です。 //! //! Layout および親ペインから呼ばれます。 //! //! @param drawInfo 描画情報です。 //! //! @since 2009/09/18 初版。 //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。 //! virtual void DrawSelf(const DrawInfo& drawInfo); #endif #ifdef NW_LYT_DRAWER_ENABLE //! @details :private void MakeUniformData( DrawInfo* pDrawInfo, Drawer* pDrawer ) const; //! @details :private virtual void MakeUniformDataSelf( DrawInfo* pDrawInfo, Drawer* pDrawer ) const; #endif //! @brief SRT行列の再計算を要求します。 //! //! @since 2010/04/09 初版。 //! __forceinline void SetMtxDirty() { this->SetMtxCondition(MTXCONDITION_DIRTY); } protected: #ifdef NW_LYT_DMPGL_ENABLED //! @brief モデルビュー行列を計算し GraphicsResource に設定します。 //! //! @details //! 本関数は NW_LYT_DMPGL_ENABLED マクロを定義してライブラリを //! ビルドした場合にのみ利用可能です。 //! //! @param drawInfo 描画情報です。 //! //! @since 2009/09/18 初版。 //! @date 2010/10/20 NW_LYT_DMPGL_ENABLED マクロを定義してライブラリをビルドした場合にのみ利用できるようにしました。 //! virtual void LoadMtx(const DrawInfo& drawInfo); #endif //! @brief ペインの左上の座標を取得します。 //! //! @return 座標を返します。 //! //! @since 2009/09/18 初版。 //! const math::VEC2 GetVtxPos() const; //! @brief ローカル行列の状態を取得します。 //! //! @return ローカル行列の状態を返します。 //! //! @since 2010/04/09 初版。 //! __forceinline MtxCondition GetMtxCondition() const { return static_cast(internal::GetBits(m_Flag, PANEFLAG_MTXCONDITION, PANEFLAG_MTXCONDITION_LENGTH)); } //! @brief ローカル行列の状態を設定します。 //! //! @param mtxCondition ローカル行列の状態です。 //! //! @since 2010/04/09 初版。 //! __forceinline void SetMtxCondition(MtxCondition mtxCondition) { m_Flag = internal::SetBits(m_Flag, PANEFLAG_MTXCONDITION, PANEFLAG_MTXCONDITION_LENGTH, static_cast(mtxCondition)); } private: Pane* m_pParent; PaneList m_ChildList; AnimationList m_AnimList; math::VEC3 m_Translate; math::VEC3 m_Rotate; math::VEC2 m_Scale; Size m_Size; // ペインのSRT行列 math::MTX34 m_Mtx; // ペインのSRT行列 (親子での計算後) math::MTX34 m_GlbMtx; const res::ExtUserDataList* m_pExtUserDataList; u8 m_Alpha; u8 m_GlbAlpha; u8 m_BasePosition; u8 m_Flag; char m_Name[ResourceNameStrMax + 1]; char m_UserData[UserDataStrMax + 1]; private: // コピーコンストラクタと代入演算子の呼び出しを禁止します。実装してはいけません。 Pane(const Pane& other); Pane& operator = (const Pane& other); void Init(); void CalculateMtxChild(const DrawInfo& drawInfo); }; } // namespace nw::lyt } // namespace nw #endif // NW_LYT_PANE_H_