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