Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

# AnimationManager.h

Go to the documentation of this file.

    00001 //------------------------------------------------------------------------------
    00002 // Lamp : Open source game middleware
    00003 // Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
    00004 //
    00005 // This library is free software; you can redistribute it and/or
    00006 // modify it under the terms of the GNU Lesser General Public
    00007 // License as published by the Free Software Foundation; either
    00008 // version 2.1 of the License, or (at your option) any later version.
    00009 //
    00010 // This library is distributed in the hope that it will be useful,
    00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013 // Lesser General Public License for more details.
    00014 //
    00015 // You should have received a copy of the GNU Lesser General Public
    00016 // License along with this library; if not, write to the Free Software
    00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    00018 //------------------------------------------------------------------------------
    00019
    00020 /** @file
    00021  * アニメーションマネージャヘッダ
    00022  * @author Junpee
    00023  */
    00024
    00025 #ifndef ANIMATION_MANAGER_H_
    00026 #define ANIMATION_MANAGER_H_
    00027
    00028 #include <Core/Renamer/Renamer.h>
    00029 #include <Core/Container/HashMap.h>
    00030 #include <Core/Container/ArrayList.h>
    00031
    00032 namespace Lamp{
    00033
    00034 class Animation;
    00035 class AnimationData;
    00036 class AnimationSet;
    00037 class CameraAnimation;
    00038 class CameraAnimationData;
    00039 class SceneNodeAnimation;
    00040 class SceneNodeAnimationData;
    00041 class CharacterModelAnimation;
    00042 class CharacterModelAnimationData;
    00043
    00044 //------------------------------------------------------------------------------
    00045 /**
    00046  * アニメーションマネージャ
    00047  */
    00048 class AnimationManager : public Renamer::Database{
    00049 public:
    00050     //--------------------------------------------------------------------------
    00051     /**
    00052      * コンストラクタ
    00053      */
    00054     AnimationManager();
    00055
    00056     /**
    00057      * デストラクタ
    00058      */
    00059     virtual ~AnimationManager();
    00060
    00061     //--------------------------------------------------------------------------
    00062     // アニメーションセット
    00063     //--------------------------------------------------------------------------
    00064     /**
    00065      * アニメーションセットの作成
    00066      *
    00067      * 空文字列を名前に指定するとエラーになります。
    00068      * @param name 名前
    00069      * @return アニメーションセット
    00070      */
    00071     virtual AnimationSet* createAnimationSet(const String& name);
    00072
    00073     //--------------------------------------------------------------------------
    00074     // カメラアニメーション
    00075     //--------------------------------------------------------------------------
    00076     /**
    00077      * カメラアニメーションの作成
    00078      *
    00079      * 空文字列を名前に指定するとエラーになります。
    00080      * @param name 名前
    00081      * @return カメラアニメーション
    00082      */
    00083     virtual CameraAnimation* createCamera(const String& name);
    00084
    00085     /**
    00086      * カメラアニメーションデータの作成
    00087      *
    00088      * 空文字列を名前に指定するとエラーになります。
    00089      * @param name 名前
    00090      * @return カメラアニメーションデータ
    00091      */
    00092     virtual CameraAnimationData* createCameraData(const String& name);
    00093
    00094     //--------------------------------------------------------------------------
    00095     // シーンノードアニメーション
    00096     //--------------------------------------------------------------------------
    00097     /**
    00098      * シーンノードアニメーションの作成
    00099      *
    00100      * 空文字列を名前に指定するとエラーになります。
    00101      * @param name 名前
    00102      * @return シーンノードアニメーション
    00103      */
    00104     virtual SceneNodeAnimation* createSceneNode(const String& name);
    00105
    00106     /**
    00107      * シーンノードアニメーションデータの作成
    00108      *
    00109      * 空文字列を名前に指定するとエラーになります。
    00110      * @param name 名前
    00111      * @return シーンノードアニメーションデータ
    00112      */
    00113     virtual SceneNodeAnimationData* createSceneNodeData(const String& name);
    00114
    00115     //--------------------------------------------------------------------------
    00116     // モデルアニメーション
    00117     //--------------------------------------------------------------------------
    00118     /**
    00119      * キャラクタモデルアニメーションの作成
    00120      *
    00121      * 空文字列を名前に指定するとエラーになります。
    00122      * @param name 名前
    00123      * @return キャラクタモデルアニメーション
    00124      */
    00125     virtual CharacterModelAnimation* createCharacterModel(
    00126         const String& name);
    00127
    00128     /**
    00129      * キャラクタモデルアニメーションデータの作成
    00130      *
    00131      * 空文字列を名前に指定するとエラーになります。
    00132      * @param name 名前
    00133      * @return キャラクタモデルアニメーションデータ
    00134      */
    00135     virtual CharacterModelAnimationData* createCharacterModelData(
    00136         const String& name);
    00137
    00138     //--------------------------------------------------------------------------
    00139     // 破棄、クリア
    00140     //--------------------------------------------------------------------------
    00141     /**
    00142      * アニメーションの破棄
    00143      *
    00144      * アニメーションセットの場合は含まれるアニメーションも破棄されます。
    00145      * @param animation 破棄するアニメーション
    00146      */
    00147     virtual void destroy(Animation* animation);
    00148
    00149     /**
    00150      * アニメーションデータの破棄
    00151      * @param animationData 破棄するアニメーションデータ
    00152      * @return リファレンスカウント
    00153      */
    00154     virtual int destroyData(AnimationData* animationData);
    00155
    00156     /**
    00157      * クリア
    00158      * @return 削除したオブジェクト数
    00159      */
    00160     virtual int clear();
    00161
    00162     //--------------------------------------------------------------------------
    00163     // アニメーション
    00164     //--------------------------------------------------------------------------
    00165     /**
    00166      * アニメーション数の取得
    00167      * @return アニメーション数
    00168      */
    00169     virtual int getCount(){ return animationArray_.getCount(); }
    00170
    00171     /**
    00172      * アニメーションの取得
    00173      * @param index アニメーションのインデクス
    00174      * @return アニメーション
    00175      */
    00176     virtual Animation* get(int index){ return animationArray_.get(index); }
    00177
    00178     /**
    00179      * アニメーションの検索
    00180      * @param name 検索するアニメーション名
    00181      * @return アニメーション
    00182      */
    00183     virtual Animation* search(String name){ return animationHash_.get(name); }
    00184
    00185     //--------------------------------------------------------------------------
    00186     // アニメーションデータ
    00187     //--------------------------------------------------------------------------
    00188     /**
    00189      * アニメーションデータ数の取得
    00190      * @return アニメーションデータ数
    00191      */
    00192     virtual int getDataCount(){ return animationDataArray_.getCount(); }
    00193
    00194     /**
    00195      * アニメーションデータの取得
    00196      * @param index アニメーションデータのインデクス
    00197      * @return アニメーションデータ
    00198      */
    00199     virtual AnimationData* getData(int index){
    00200         return animationDataArray_.get(index);
    00201     }
    00202
    00203     /**
    00204      * アニメーションデータの検索
    00205      * @param name 検索するアニメーションデータ名
    00206      * @return アニメーションデータ
    00207      */
    00208     virtual AnimationData* searchData(String name){
    00209         return animationDataHash_.get(name);
    00210     }
    00211
    00212     //--------------------------------------------------------------------------
    00213     // リネーム関係
    00214     //--------------------------------------------------------------------------
    00215     /**
    00216      * アニメーションリネーマの設定
    00217      * @param renamer 設定するアニメーションリネーマ
    00218      */
    00219     virtual void setRenamer(Renamer* renamer);
    00220
    00221     /**
    00222      * アニメーションリネーマの取得
    00223      * @return アニメーションリネーマ
    00224      */
    00225     virtual Renamer* getRenamer() const{ return animationRenamer_; }
    00226
    00227     /**
    00228      * アニメーション名が存在するかどうか
    00229      * @param name 存在するかどうか調べる名前
    00230      * @return 名前が存在すればtrue
    00231      */
    00232     virtual bool existName(const String& name){
    00233         return (search(name) != NULL);
    00234     }
    00235
    00236     /**
    00237      * アニメーションのリネーム
    00238      * @param sourceName 元となる名前
    00239      * @return 重複していない名前
    00240      */
    00241     virtual String rename(String sourceName){
    00242         if(sourceName.getSize() == 0){
    00243             ErrorOut("AnimationManager::rename() name.getSize() == 0");
    00244             sourceName = "invalid";
    00245         }
    00246         if(!existName(sourceName)){ return sourceName; }
    00247         return getRenamer()->rename(this, sourceName);
    00248     }
    00249
    00250     //--------------------------------------------------------------------------
    00251     /**
    00252      * アニメーションデータリネーマの設定
    00253      * @param renamer 設定するアニメーションデータリネーマ
    00254      */
    00255     virtual void setDataRenamer(Renamer* renamer);
    00256
    00257     /**
    00258      * アニメーションデータリネーマの取得
    00259      * @return アニメーションデータリネーマ
    00260      */
    00261     virtual Renamer* getDataRenamer() const{ return animationDataRenamer_; }
    00262
    00263     /**
    00264      * アニメーションデータ名が存在するかどうか
    00265      * @param name 存在するかどうか調べる名前
    00266      * @return 名前が存在すればtrue
    00267      */
    00268     virtual bool existDataName(const String& name){
    00269         return (searchData(name) != NULL);
    00270     }
    00271
    00272     /**
    00273      * アニメーションデータのリネーム
    00274      * @param sourceName 元となる名前
    00275      * @return 重複していない名前
    00276      */
    00277     virtual String renameData(String sourceName){
    00278         if(sourceName.getSize() == 0){
    00279             ErrorOut("AnimationManager::renameData() name.getSize() == 0");
    00280             sourceName = "invalid";
    00281         }
    00282         if(!existDataName(sourceName)){ return sourceName; }
    00283         return getDataRenamer()->rename(this, sourceName);
    00284     }
    00285
    00286     //--------------------------------------------------------------------------
    00287 private:
    00288     // コピーコンストラクタの隠蔽
    00289     AnimationManager(const AnimationManager& copy);
    00290
    00291     // 代入コピーの隠蔽
    00292     void operator =(const AnimationManager& copy);
    00293
    00294     // アニメーションハッシュ
    00295     HashMap<String, Animation*> animationHash_;
    00296     // アニメーション配列
    00297     ArrayList<Animation*> animationArray_;
    00298     // アニメーションリネーマ
    00299     Renamer* animationRenamer_;
    00300
    00301     // アニメーションデータハッシュ
    00302     HashMap<String, AnimationData*> animationDataHash_;
    00303     // アニメーションデータ配列
    00304     ArrayList<AnimationData*> animationDataArray_;
    00305     // アニメーションデータリネーマ
    00306     Renamer* animationDataRenamer_;
    00307
    00308 };
    00309
    00310 //------------------------------------------------------------------------------
    00311 } // End of namespace Lamp
    00312 #endif // End of ANIMATION_MANAGER_H_
    00313 //------------------------------------------------------------------------------
    00314