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

CharacterModelAnimation.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 CHARACTER_MODEL_ANIMATION_H_
00026 #define CHARACTER_MODEL_ANIMATION_H_
00027 
00028 #include <Animation/System/ObjectAnimation.h>
00029 #include <Animation/Model/CharacterModelAnimationData.h>
00030 
00031 namespace Lamp{
00032 
00033 class CharacterModel;
00034 class Bone;
00035 
00036 //------------------------------------------------------------------------------
00037 /**
00038  * キャラクタモデルアニメーション
00039  */
00040 class CharacterModelAnimation : public ObjectAnimation{
00041 friend class AnimationManager;
00042 public:
00043     //--------------------------------------------------------------------------
00044     // アニメーションデータ
00045     //--------------------------------------------------------------------------
00046     /**
00047      * アニメーションデータの取得
00048      * @return アニメーションデータ
00049      */
00050     virtual AnimationData* getAnimationData(){ return animationData_; }
00051 
00052     /**
00053      * アニメーションデータの取得
00054      * @return アニメーションデータ
00055      */
00056     virtual const AnimationData* getAnimationData() const{
00057         return animationData_;
00058     }
00059 
00060     //--------------------------------------------------------------------------
00061     // キャラクタモデルアニメーションデータ
00062     //--------------------------------------------------------------------------
00063     /**
00064      * キャラクタモデルアニメーションデータの設定
00065      * @param animationData キャラクタモデルアニメーションデータ
00066      */
00067     virtual void setCharacterModelAnimationData(
00068         CharacterModelAnimationData* animationData){
00069         if(animationData_ != NULL){ animationData_->removeReference(); }
00070         animationData_ = animationData;
00071         if(animationData_ != NULL){ animationData_->addReference(); }
00072     }
00073 
00074     /**
00075      * キャラクタモデルアニメーションデータの取得
00076      */
00077     virtual CharacterModelAnimationData* getCharacterModelAnimationData(){
00078         return animationData_;
00079     }
00080 
00081     /**
00082      * キャラクタモデルアニメーションデータの取得
00083      */
00084     virtual const CharacterModelAnimationData*
00085         getCharacterModelAnimationData() const{
00086         return animationData_;
00087     }
00088 
00089     //--------------------------------------------------------------------------
00090     // バインド
00091     //--------------------------------------------------------------------------
00092     /**
00093      * バインド
00094      * @param scene バインド対象シーン
00095      * @return 成功すればtrue
00096      */
00097     virtual bool bind(Scene* scene);
00098 
00099     /**
00100      * バインド
00101      * @param model バインド対象キャラクタモデル
00102      * @return 成功すればtrue
00103      */
00104     virtual bool bind(CharacterModel* model);
00105 
00106     /**
00107      * バインド解除
00108      */
00109     virtual void unbind(){
00110         target_ = NULL;
00111         for(int i = 0; i < boneCount_; i++){ targetBones_[i] = NULL; }
00112     }
00113 
00114     /**
00115      * ターゲットの取得
00116      * @return ターゲット
00117      */
00118     virtual CharacterModel* getTarget() const{ return target_; }
00119 
00120     /**
00121      * ターゲットボーンの取得
00122      * @param index ターゲットボーンのインデックス
00123      */
00124     virtual Bone* getTargetBone(int index) const{
00125         Assert(index >= 0);
00126         Assert(index < boneCount_);
00127         return targetBones_[index];
00128     }
00129 
00130     //--------------------------------------------------------------------------
00131     // ボーン
00132     //--------------------------------------------------------------------------
00133     /**
00134      * ボーン数の設定
00135      * @param boneCount ボーン数
00136      */
00137     virtual void setBoneCount(int boneCount){
00138         boneCount_ = boneCount;
00139         SafeArrayDelete(targetBones_);
00140         SafeArrayDelete(boneNames_);
00141         if(boneCount_ != 0){
00142             boneNames_ = new String[boneCount_];
00143             targetBones_ = new Bone*[boneCount_];
00144             for(int i = 0; i < boneCount_; i++){ targetBones_[i] = NULL; }
00145         }
00146     }
00147 
00148     /**
00149      * ボーン数の取得
00150      * @return ボーン数
00151      */
00152     virtual int getBoneCount() const{ return boneCount_; }
00153 
00154     //--------------------------------------------------------------------------
00155     /**
00156      * ボーン名の設定
00157      * @param index ボーンのインデックス
00158      * @param boneName ボーン名
00159      */
00160     virtual void setBoneName(int index, const String& boneName){
00161         Assert(index >= 0);
00162         Assert(index < boneCount_);
00163         boneNames_[index] = boneName;
00164     }
00165 
00166     /**
00167      * ボーン名の取得
00168      * @param index ボーンのインデックス
00169      * @return ボーン名
00170      */
00171     virtual const String& getBoneName(int index) const{
00172         Assert(index >= 0);
00173         Assert(index < boneCount_);
00174         return boneNames_[index];
00175     }
00176 
00177     //--------------------------------------------------------------------------
00178     // アニメーション
00179     //--------------------------------------------------------------------------
00180     /**
00181      * アニメーション
00182      * @param deltaTime デルタタイム
00183      * @param mask アニメーションマスク
00184      * @return アニメーションが終了していればtrue
00185      */
00186     virtual bool animate(float deltaTime, AnimationMask mask);
00187 
00188     //--------------------------------------------------------------------------
00189     // コピー
00190     //--------------------------------------------------------------------------
00191     /**
00192      * コピー
00193      * @param dataCopyMask データコピーマスク
00194      * @return コピーされたアニメーション
00195      */
00196     virtual Animation* copy(DataCopyMask dataCopyMask = copyNone) const{
00197         return copyCharacterModelAnimation(dataCopyMask);
00198     }
00199 
00200     /**
00201      * キャラクタモデルアニメーションのコピー
00202      * @param dataCopyMask データコピーマスク
00203      * @return コピーされたアニメーション
00204      */
00205     virtual CharacterModelAnimation* copyCharacterModelAnimation(
00206         DataCopyMask dataCopyMask = copyNone) const;
00207 
00208     //--------------------------------------------------------------------------
00209     // RTTI
00210     //--------------------------------------------------------------------------
00211     /**
00212      * キャラクタモデルアニメーションかどうか
00213      * @return キャラクタモデルアニメーションならtrue
00214      */
00215     virtual bool isCharacterModelAnimation() const{ return true; }
00216 
00217     //--------------------------------------------------------------------------
00218 protected:
00219     /**
00220      * コンストラクタ
00221      * @param name 名前
00222      * @param manager アニメーションマネージャ
00223      */
00224     CharacterModelAnimation(String name, AnimationManager* manager);
00225 
00226     /**
00227      * デストラクタ
00228      */
00229     virtual ~CharacterModelAnimation();
00230 
00231 private:
00232     // アニメーションデータ
00233     CharacterModelAnimationData* animationData_;
00234     // ターゲット
00235     CharacterModel* target_;
00236     // ボーン数
00237     int boneCount_;
00238     // ボーン名
00239     String* boneNames_;
00240     // ターゲットボーン
00241     Bone** targetBones_;
00242 
00243 };
00244 
00245 //------------------------------------------------------------------------------
00246 } // End of namespace Lamp
00247 #endif // End of CHARACTER_MODEL_ANIMATION_H_
00248 //------------------------------------------------------------------------------
00249 

Generated on Wed Mar 16 10:29:29 2005 for Lamp by doxygen 1.3.2