メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

PHChangeObject.h

00001 #ifndef PHCHANGEOBJECT_H
00002 #define PHCHANGEOBJECT_H
00003 
00004 #include <Collision/CDFramePair.h>
00005 #include <Collision/CDCollisionEngine.h>
00006 #include "PHSolid.h"
00007 
00008 namespace Spr{;
00009 
00010 /** Solidの入れ替えを行うクラスの基本クラス.PHChangeObjectContainerが持つ */
00011 class PHChangeObject:public SGObject{
00012     SGOBJECTDEFABST(PHChangeObject);
00013 protected:
00014 
00015 public:
00016     UTRef<PHSolid> solid[2];        ///<    入れ替え前[0]と入れ替え後[1]の剛体
00017 
00018     /// IsChange()の結果に応じてChange()を実行する.PHChangeObjectContainer::Step()から呼ばれる
00019     void Step();
00020     /// Solidの入れ替えを行う
00021     void Change();
00022     /// 入れ替え処理を行うかどうか判断する
00023     virtual bool IsChange()=0;
00024     /// クリア
00025     virtual void Clear()=0;
00026 };
00027 
00028 /// PHChangeObjectの配列
00029 class PHChangeObjects:public std::vector< UTRef<PHChangeObject> >{
00030 };
00031 
00032 /** チェンジオブジェクトコンテナ.BehaviorEngineの一種 */
00033 class PHChangeObjectContainer:public SGBehaviorEngine{
00034     SGOBJECTDEF(PHChangeObjectContainer);
00035     public:
00036         PHChangeObjects cos;
00037         /// 
00038         bool AddChildObject(SGObject* o, SGScene* s);
00039         ///
00040         int GetPriority() const {return SGBP_CHANGEOBJECT;}
00041         virtual void Step(SGScene* s);
00042         virtual void Loaded(SGScene* scene);
00043         virtual void Clear(SGScene* s){ cos.clear(); }
00044         virtual size_t NChildObjects(){ return cos.size(); }
00045         virtual SGObject* ChildObject(size_t i){ return cos[i]; }
00046 };
00047 
00048 /** 指定フレームへの衝突の有無で,入れ替え処理を行うか判断 */
00049 class PHChangeObjectCollision:public PHChangeObject, CDCollisionListener {
00050     SGOBJECTDEF(PHChangeObjectCollision);
00051 
00052 public:
00053     UTRef<SGFrame> detectorFrame;   ///<    検出用フレーム
00054     bool bCollision;                ///<    接触フラグ
00055 protected:
00056     int listenerPos;                ///<    リスナの位置
00057 
00058 public:
00059     ///
00060     bool AddChildObject(SGObject* o, SGScene* s);
00061     /// 接触時にCDCollisionEngine::Step()から呼ばれるコールバック.接触フラグをTRUEにする
00062     void After(SGScene* scene, CDFramePairWithRecord* fr);
00063     /// クリア
00064     virtual void Clear();
00065     /// 接触フラグの結果を返し,次のステップに備えてフラグをFALSEに初期化する
00066     virtual bool IsChange();
00067     /// ロード完了時の処理,CDCollisionEngine にコールバックを登録する.CDCollisionEngine がなければ作る.
00068     virtual void Loaded(SGScene* scene);
00069 };
00070 
00071 /** Solidの姿勢と比較用姿勢行列を比べて,入れ替え処理を行うか判断 */
00072 class PHChangeObjectOrientation:public PHChangeObject {
00073     SGOBJECTDEF(PHChangeObjectOrientation);
00074 
00075 public:
00076     Matrix3d comparativeOrientation;    ///<    比較用姿勢行列
00077     UTRef<SGFrame> comparativeFrame;    ///<    比較用フレーム(データファイルに記述されているときだけ使う)
00078     Vec3d selectedAxis;                 ///<    比較する軸の選択(x,y,z) この軸はSolidの座標系
00079     Vec3d targetedInnerProduct;         ///<    目標内積値(xの内積,yの内積,内積)
00080     Vec3d accuracy;                     ///<    目標内積値の精度
00081     public:
00082     ///
00083     bool AddChildObject(SGObject* o, SGScene* s);
00084     /// クリア
00085     virtual void Clear();
00086     /// 入れ替えを行うかどうかの判定
00087     virtual bool IsChange();
00088 };
00089 
00090 /** データのロード・セーブ用の構造体 */
00091 struct PHChangeObjectOrientationInfo{
00092     Vec3f selectedAxis;
00093     Matrix3f comparativeOrientation;
00094     Vec3f targetedInnerProduct;
00095     Vec3f accuracy;
00096 };
00097 
00098 };
00099 #endif

Springheadに対してSun Apr 16 01:57:53 2006に生成されました。  doxygen 1.4.1