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

CameraAnimationData.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 CAMERA_ANIMATION_DATA_H_
00026 #define CAMERA_ANIMATION_DATA_H_
00027 
00028 #include <Animation/System/AnimationData.h>
00029 #include <Animation/VectorInterpolator/VectorInterpolator.h>
00030 #include <Animation/RotationInterpolator/RotationInterpolator.h>
00031 
00032 namespace Lamp{
00033 
00034 //------------------------------------------------------------------------------
00035 /**
00036  * カメラアニメーションデータ
00037  */
00038 class CameraAnimationData : public AnimationData{
00039 friend class AnimationManager;
00040 protected:
00041     //--------------------------------------------------------------------------
00042     /**
00043      * カメラシーケンス
00044      */
00045     class CameraSequence : public Sequence{
00046     public:
00047         /**
00048          * コンストラクタ
00049          */
00050         CameraSequence() : Sequence(),
00051             rotation_(NULL), translation_(NULL){}
00052 
00053         /**
00054          * デストラクタ
00055          */
00056         virtual ~CameraSequence(){
00057             SafeDelete(translation_);
00058             SafeDelete(rotation_);
00059         }
00060 
00061         /**
00062          * 代入コピー
00063          * @param copy コピー元
00064          */
00065         virtual void operator =(const CameraSequence& copy){
00066             Sequence::operator=(copy);
00067             SafeDelete(translation_);
00068             SafeDelete(rotation_);
00069             if(copy.rotation_ != NULL){ 
00070                 rotation_ = copy.rotation_->duplicate();
00071             }
00072             if(copy.translation_ != NULL){
00073                 translation_ = copy.translation_->duplicate();
00074             }
00075         }
00076 
00077         /**
00078          * 長さの計算
00079          */
00080         virtual void calcLength(){
00081             length_ = 0.f;
00082             if((rotation_ != NULL) && (rotation_->getLength() > length_)){
00083                 length_ = rotation_->getLength();
00084             }
00085             if((translation_ != NULL) &&
00086                 (translation_->getLength() > length_)){
00087                 length_ = translation_->getLength();
00088             }
00089         }
00090 
00091         /// 回転
00092         RotationInterpolator* rotation_;
00093         /// 移動
00094         VectorInterpolator* translation_;
00095 
00096     };
00097 
00098 public:
00099     //--------------------------------------------------------------------------
00100     // コピー
00101     //--------------------------------------------------------------------------
00102     /**
00103      * コピー
00104      * @return コピーされたアニメーションデータ
00105      */
00106     virtual AnimationData* copy() const{ return copyCameraAnimationData(); }
00107 
00108     /**
00109      * カメラアニメーションデータのコピー
00110      */
00111     virtual CameraAnimationData* copyCameraAnimationData() const;
00112 
00113     //--------------------------------------------------------------------------
00114     // シーケンス
00115     //--------------------------------------------------------------------------
00116     /**
00117      * シーケンス数の設定
00118      * @param sequenceCount シーケンス数
00119      */
00120     virtual void setSequenceCount(int sequenceCount){
00121         SafeArrayDelete(sequences_);
00122         sequenceCount_ = sequenceCount;
00123         if(sequenceCount_ == 0){ return; }
00124         sequences_ = new CameraSequence[sequenceCount_];
00125     }
00126 
00127     /**
00128      * シーケンス数の取得
00129      * @return シーケンス数
00130      */
00131     virtual int getSequenceCount() const{ return sequenceCount_; }
00132 
00133     //--------------------------------------------------------------------------
00134     // 回転
00135     //--------------------------------------------------------------------------
00136     /**
00137      * 回転の設定
00138      * @param sequence シーケンス
00139      * @param rotation 設定する回転
00140      */
00141     virtual void setRotation(int sequence, RotationInterpolator* rotation){
00142         Assert(sequence >= 0);
00143         Assert(sequence < sequenceCount_);
00144         CameraSequence& data = sequences_[sequence];
00145         SafeDelete(data.rotation_);
00146         data.rotation_ = rotation;
00147         data.calcLength();
00148     }
00149 
00150     /**
00151      * 回転の取得
00152      * @param sequence シーケンス
00153      * @return 回転
00154      */
00155     virtual RotationInterpolator* getRotation(int sequence) const{
00156         Assert(sequence >= 0);
00157         Assert(sequence < sequenceCount_);
00158         return sequences_[sequence].rotation_;
00159     }
00160 
00161     //--------------------------------------------------------------------------
00162     // 移動
00163     //--------------------------------------------------------------------------
00164     /**
00165      * 移動の設定
00166      * @param sequence シーケンス
00167      * @param translation 設定する移動
00168      */
00169     virtual void setTranslation(
00170         int sequence, VectorInterpolator* translation){
00171         Assert(sequence >= 0);
00172         Assert(sequence < sequenceCount_);
00173         CameraSequence& data = sequences_[sequence];
00174         SafeDelete(data.translation_);
00175         data.translation_ = translation;
00176         data.calcLength();
00177     }
00178 
00179     /**
00180      * 移動の取得
00181      * @param sequence シーケンス
00182      * @return 移動
00183      */
00184     virtual VectorInterpolator* getTranslation(int sequence) const{
00185         Assert(sequence >= 0);
00186         Assert(sequence < sequenceCount_);
00187         return sequences_[sequence].translation_;
00188     }
00189 
00190     //--------------------------------------------------------------------------
00191     // RTTI
00192     //--------------------------------------------------------------------------
00193     /**
00194      * カメラアニメーションデータかどうか
00195      * @return カメラアニメーションデータならtrue
00196      */
00197     virtual bool isCameraAnimationData() const{ return true; }
00198 
00199     //--------------------------------------------------------------------------
00200 protected:
00201     /**
00202      * コンストラクタ
00203      * @param name 名前
00204      * @param manager アニメーションマネージャ
00205      */
00206     CameraAnimationData(const String& name, AnimationManager* manager) :
00207         AnimationData(name, manager), sequenceCount_(0), sequences_(NULL){
00208     }
00209 
00210     /**
00211      * デストラクタ
00212      */
00213     virtual ~CameraAnimationData(){
00214         SafeArrayDelete(sequences_);
00215     }
00216 
00217     //--------------------------------------------------------------------------
00218     /**
00219      * シーケンスの取得
00220      * @param sequence シーケンス
00221      * @return シーケンス
00222      */
00223     virtual Sequence* getSequence(int sequence){
00224         Assert(sequence >= 0);
00225         Assert(sequence < sequenceCount_);
00226         return &sequences_[sequence];
00227     }
00228 
00229     /**
00230      * シーケンスの取得
00231      * @param sequence シーケンス
00232      * @return シーケンス
00233      */
00234     virtual const Sequence* getSequence(int sequence) const{
00235         Assert(sequence >= 0);
00236         Assert(sequence < sequenceCount_);
00237         return &sequences_[sequence];
00238     }
00239 
00240     //--------------------------------------------------------------------------
00241 private:
00242     // シーケンス数
00243     int sequenceCount_;
00244     // シーケンス
00245     CameraSequence* sequences_;
00246 
00247 };
00248 
00249 //------------------------------------------------------------------------------
00250 } // End of namespace Lamp
00251 #endif // End of CAMERA_ANIMATION_DATA_H_
00252 //------------------------------------------------------------------------------

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