/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_ArcResourceAccessor.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: 23638 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_ARCRESOURCEACCESSOR_H_ #define NW_LYT_ARCRESOURCEACCESSOR_H_ #include #include #include #include #include #include #include namespace nw { namespace lyt { //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief アーカイブリソースにアクセスするためのクラスです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class ArcResourceAccessor : public ResourceAccessor { public: //! パス名の最大長です。 static const int ROOTPATH_MAX = 64; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! ArcResourceAccessor(); //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief アーカイブデータを登録します。 //! //! @param archiveStart アーカイブデータへのポインタです。 //! @param resourceRootDirectory リソース検索のルートとなるディレクトリ名です。 //! //! @return 登録に成功したら true、失敗したら falseを返します。 //! //! @since 2009/09/18 初版。 //! bool Attach( void* archiveStart, const char* resourceRootDirectory ); //! @brief 登録したアーカイブデータの登録を解除します。 //! //! @return 登録されていたアーカイブデータへのポインタを返します。 //! //! @since 2009/09/18 初版。 //! void* Detach(); virtual void* GetResource( ResType resType, const char* name, u32* pSize = 0 ); //! @brief アクセサにアーカイブが設定されているかどうかを判定します。 //! //! @return すでにアーカイブが設定されている場合は true を返します。 //! //! @since 2009/09/18 初版。 //! bool IsAttached() const { return m_ArcBuf != 0; } //! @brief アーカイブの先頭アドレスを取得します。 //! //! @return //! 設定されているアーカイブの先頭アドレスを返します。 //! アーカイブが設定されていない場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! const void* GetArchiveDataStart() const { return m_ArcBuf; } //! @brief フォントオブジェクトを登録します。 //! //! @details //! フォントオブジェクトをリソースアクセサに設定し、 //! GetFont() の検索対象に含まれるようにします。 //! //! @param name フォントリソースの名前です。 //! @param pFont フォントオブジェクトへのポインタです。 //! //! @return 登録キーを返します。キーは登録の抹消に使用します。 //! //! @sa UnregistFont //! //! @since 2010/01/26 初版。 //! FontKey RegistFont(const char* name, font::Font* pFont); //! @brief フォントオブジェクトの登録を解除します。 //! //! @param key フォントの登録時に取得した登録キーを指定します。 //! //! @sa RegistFont //! //! @since 2010/01/26 初版。 //! void UnregistFont(FontKey key); //! @brief テクスチャを登録します。 //! //! @details //! テクスチャをリソースアクセサに設定し、 //! GetTexture() の検索対象に含まれるようにします。 //! //! @param name テクスチャの名前です。 //! @param textureInfo テクスチャ情報です。 //! //! @return 登録キーを返します。キーは登録の抹消に使用します。 //! //! @sa UnregistTexture //! //! @since 2010/01/26 初版。 //! TextureKey RegistTexture(const char* name, const TextureInfo& textureInfo); //! @brief テクスチャの登録を解除します。 //! //! @param key テクスチャの登録時に取得した登録キーを指定します。 //! //! @sa RegistTexture //! //! @since 2010/01/26 初版。 //! void UnregistTexture(TextureKey key); //! @brief テクスチャ情報を取得します。 //! //! @details //! name で指定したテクスチャリソース名と関連付けられた //! テクスチャ情報を取得します。 //! //! テクスチャを所有していない場合には LoadTexture() でロードを試みます。 //! //! @param name テクスチャリソースの名前です。 //! //! @return テクスチャ情報を返します。 //! テクスチャを所有していない場合にはロードを試みます。 //! ロードできなかった場合にはテクスチャオブジェクトには無効な値 //! (TextureInfo::INVALID) が設定されます。 //! //! @sa LoadTexture //! //! @since 2010/06/18 初版。 //! virtual const TextureInfo GetTexture(const char* name); //! @brief フォントを取得します。 //! //! @details //! name で指定したフォントリソース名と関連付けられた //! フォントオブジェクトを取得します。 //! //! 指定されたフォントが登録されていなかった場合には //! LoadFont() により生成したフォントを登録します。 //! //! @param name フォントリソースの名前です。 //! //! @return フォントへのポインタを返します。 //! //! @sa LoadFont //! //! @since 2010/07/16 初版。 //! virtual font::Font* GetFont(const char* name); //@} private: ARCHandle m_ArcHandle; void* m_ArcBuf; FontContainer m_FontList; TextureContainer m_TextureList; wchar_t m_ResRootDir[ROOTPATH_MAX]; wchar_t m_ResNameWork[ROOTPATH_MAX]; }; class MultiArcResourceAccessor; //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief アーカイブの情報を保持するためのクラスです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class ArcResourceLink { friend class MultiArcResourceAccessor; public: //! パス名の最大長です。 static const int ROOTPATH_MAX = ArcResourceAccessor::ROOTPATH_MAX; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! ArcResourceLink() { } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief アーカイブを設定し、初期化します。 //! //! @details //! アーカイブのフォーマットが正しくなければ失敗します。 //! //! @param archiveStart アーカイブの先頭アドレスです。 //! @param resourceRootDirectory リソースのルートディレクトリ名です。 //! //! @return アーカイブの設定が成功した場合は true を、失敗した場合は false を返します。 //! //! @since 2009/09/18 初版。 //! bool Set( void* archiveStart, const char* resourceRootDirectory ); //! @brief アーカイブの先頭アドレスを取得します。 //! //! @return 設定されているアーカイブの先頭アドレスを返します。 //! //! @since 2009/09/18 初版。 //! const void* GetArchiveDataStart() const; //! @brief リソースのルートディレクトリ名を取得します。 //! //! @return リソースのルートディレクトリ名を返します。 //! //! @since 2009/09/18 初版。 //! const wchar_t* GetResRootDir() const { return m_ResRootDir; } //@} //! :private //! リストのリンク情報です。 ut::LinkListNode m_Link; private: ARCHandle* GetArcHandle() { return &m_ArcHandle; } ARCHandle m_ArcHandle; wchar_t m_ResRootDir[ROOTPATH_MAX]; }; namespace internal { typedef ut::LinkList ArcResourceList; } // namespace internal //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief 複数のアーカイブリソースにアクセスするためのクラスです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class MultiArcResourceAccessor : public ResourceAccessor { public: //! パス名の最大長です。 static const int ROOTPATH_MAX = ArcResourceAccessor::ROOTPATH_MAX; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! MultiArcResourceAccessor(); //! @brief デストラクタです。 //! //! @since 2009/09/18 初版。 //! virtual ~MultiArcResourceAccessor(); //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief アーカイブ情報を登録します。 //! //! @details //! ArcResourceLink を登録します。 //! //! @param pLink ArcResourceLinkオブジェクトへのポインタです。 //! //! @since 2009/09/18 初版。 //! void Attach(ArcResourceLink* pLink); //! @brief 指定したアーカイブデータの登録を解除します。 //! //! @param archiveStart アーカイブデータへのポインタ。 //! //! @return 登録が解除できた場合、ArcResourceLink オブジェクトへのポインタを //! 返します。解除できなかった場合、NULLを返します。 //! //! @since 2009/09/18 初版。 //! ArcResourceLink* Detach(const void* archiveStart); //! @brief 指定したアーカイブ情報の登録を解除します。 //! //! @details //! ArcResourceLink の登録を解除します。 //! //! @param pLink ArcResourceLink オブジェクトへのポインタです。 //! //! @since 2009/09/18 初版。 //! void Detach(ArcResourceLink* pLink); //! @brief 登録されているすべてのアーカイブ情報を登録解除します。 //! //! @sa Detach //! //! @since 2009/09/18 初版。 //! void DetachAll(); virtual void* GetResource( ResType resType, const char* name, u32* pSize = 0 ); //! @brief フォントオブジェクトを登録します。 //! //! @details //! フォントオブジェクトをリソースアクセサに設定し、 //! GetFont() の検索対象に含まれるようにします。 //! //! @param name フォントリソースの名前です。 //! @param pFont フォントオブジェクトへのポインタです。 //! //! @return 登録キーを返します。キーは登録の抹消に使用します。 //! //! @sa UnregistFont //! //! @since 2010/01/26 初版。 //! FontKey RegistFont(const char* name, font::Font* pFont); //! @brief フォントオブジェクトの登録を解除します。 //! //! @param key フォントの登録時に取得した登録キーを指定します。 //! //! @sa RegistFont //! //! @since 2010/01/26 初版。 //! void UnregistFont(FontKey key); //! @brief テクスチャを登録します。 //! //! @details //! テクスチャをリソースアクセサに設定し、 //! GetTexture() の検索対象に含まれるようにします。 //! //! @param name テクスチャの名前です。 //! @param textureInfo テクスチャ情報です。 //! //! @return 登録キーを返します。キーは登録の抹消に使用します。 //! //! @sa UnregistTexture //! //! @since 2010/01/26 初版。 //! TextureKey RegistTexture(const char* name, const TextureInfo& textureInfo); //! @brief テクスチャの登録を解除します。 //! //! @param key テクスチャの登録時に取得した登録キーを指定します。 //! //! @sa RegistTexture //! //! @since 2010/01/26 初版。 //! void UnregistTexture(TextureKey key); //! @brief テクスチャ情報を取得します。 //! //! @details //! name で指定したテクスチャリソース名と関連付けられた //! テクスチャ情報を取得します。 //! //! テクスチャを所有していない場合には LoadTexture() でロードを試みます。 //! //! @param name テクスチャリソースの名前です。 //! //! @return テクスチャ情報を返します。 //! テクスチャを所有していない場合にはロードを試みます。 //! ロードできなかった場合にはテクスチャオブジェクトには無効な値 //! (TextureInfo::INVALID) が設定されます。 //! //! @sa LoadTexture //! //! @since 2010/06/18 初版。 //! virtual const TextureInfo GetTexture(const char* name); //! @brief フォントを取得します。 //! //! @details //! name で指定したフォントリソース名と関連付けられた //! フォントオブジェクトを取得します。 //! //! 指定されたフォントが登録されていなかった場合には //! LoadFont() により生成したフォントを登録します。 //! //! @param name フォントリソースの名前です。 //! //! @return フォントへのポインタを返します。 //! //! @sa LoadFont //! //! @since 2010/07/16 初版。 //! virtual font::Font* GetFont(const char* name); //@} private: internal::ArcResourceList m_ArcList; FontContainer m_FontList; TextureContainer m_TextureList; wchar_t m_ResNameWork[ROOTPATH_MAX]; }; } // namespace lyt } // namespace nw /* NW_LYT_ARCRESOURCEACCESSOR_H_ */ #endif