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 TEXT_COLLISION_LOADER_H_ 00026 #define TEXT_COLLISION_LOADER_H_ 00027 00028 namespace Lamp{ 00029 00030 class TextReader; 00031 class StreamTokenizer; 00032 class CollisionScene; 00033 class CollisionNode; 00034 00035 //------------------------------------------------------------------------------ 00036 /** 00037 * テキストコリジョンローダ 00038 */ 00039 class TextCollisionLoader{ 00040 public: 00041 /** 00042 * コンストラクタ 00043 */ 00044 TextCollisionLoader(); 00045 00046 /** 00047 * デストラクタ 00048 */ 00049 virtual ~TextCollisionLoader(); 00050 00051 //-------------------------------------------------------------------------- 00052 /** 00053 * ロード 00054 * @param filePath ファイルパス 00055 * @param scene ロード先シーン 00056 */ 00057 virtual void load(const String& filePath, CollisionScene* scene); 00058 00059 /** 00060 * ロード 00061 * @param filePath ファイルパス 00062 * @param scene ロード先シーン 00063 * @param node ロード先ノード 00064 */ 00065 virtual void load(const String& filePath, CollisionScene* scene, 00066 CollisionNode* node); 00067 00068 /** 00069 * ロード 00070 * @param textReader テキストリーダ 00071 * @param scene ロード先シーン 00072 */ 00073 virtual void load(TextReader* textReader, CollisionScene* scene); 00074 00075 /** 00076 * ロード 00077 * @param textReader テキストリーダ 00078 * @param scene ロード先シーン 00079 * @param node ロード先ノード 00080 */ 00081 virtual void load(TextReader* textReader, CollisionScene* scene, 00082 CollisionNode* node); 00083 00084 protected: 00085 //-------------------------------------------------------------------------- 00086 /** 00087 * ヘッダの読み込み 00088 */ 00089 virtual void readHeader(); 00090 00091 //-------------------------------------------------------------------------- 00092 // コリジョンノード 00093 //-------------------------------------------------------------------------- 00094 /** 00095 * コリジョンノードリストの読み込み 00096 */ 00097 virtual void readCollisionNodeList(); 00098 00099 /** 00100 * コリジョンノードの読み込み 00101 * @param name 名前 00102 */ 00103 virtual void readCollisionNode(const String& name); 00104 00105 //-------------------------------------------------------------------------- 00106 // コリジョンリーフ 00107 //-------------------------------------------------------------------------- 00108 /** 00109 * コリジョンリーフリストの読み込み 00110 */ 00111 virtual void readCollisionLeafList(); 00112 00113 /** 00114 * 静的球コリジョンの読み込み 00115 * @param name 名前 00116 */ 00117 virtual void readStaticSphere(const String& name); 00118 00119 /** 00120 * 静的変形メッシュコリジョンの読み込み 00121 * @param name 名前 00122 */ 00123 virtual void readStaticDeformedMesh(const String& name); 00124 00125 //-------------------------------------------------------------------------- 00126 // コリジョンリンク 00127 //-------------------------------------------------------------------------- 00128 /** 00129 * コリジョンリンクリストの読み込み 00130 */ 00131 virtual void readCollisionLinkList(); 00132 00133 /** 00134 * コリジョンリンクの読み込み 00135 * @param name 名前 00136 */ 00137 virtual void readCollisionLink(const String& name); 00138 00139 //-------------------------------------------------------------------------- 00140 // 値の読み込み 00141 //-------------------------------------------------------------------------- 00142 /** 00143 * bool値の読み込み 00144 * @return bool値 00145 */ 00146 virtual bool readBool(); 00147 00148 /** 00149 * int値の読み込み 00150 * @return int値 00151 */ 00152 virtual int readInt(); 00153 00154 /** 00155 * u_int値の読み込み 00156 * @return u_int値 00157 */ 00158 virtual u_int readUInt(); 00159 00160 /** 00161 * float値の読み込み 00162 * @return float値 00163 */ 00164 virtual float readFloat(); 00165 00166 /** 00167 * Vector3値の読み込み 00168 * @return Vector3値 00169 */ 00170 virtual Vector3 readVector3(); 00171 00172 /** 00173 * 軸沿いボックスの読み込み 00174 * @return 軸沿いボックス 00175 */ 00176 virtual AxisAlignedBox readAxisAlignedBox(); 00177 00178 /** 00179 * 球の読み込み 00180 * @return 球 00181 */ 00182 virtual Sphere readSphere(); 00183 00184 /** 00185 * 三角の読み込み 00186 * @return 三角 00187 */ 00188 virtual Triangle readTriangle(); 00189 00190 //-------------------------------------------------------------------------- 00191 // ユーティリティ 00192 //-------------------------------------------------------------------------- 00193 /** 00194 * トークンの読み込み 00195 * @param caller 呼び出し元 00196 */ 00197 virtual String readToken(const String& caller); 00198 00199 /** 00200 * 指定ワードの読み飛ばし 00201 * @param word 読み飛ばすワード 00202 */ 00203 virtual void skipWord(const String& word); 00204 00205 /** 00206 * チャンクを開く 00207 */ 00208 virtual void openChunk(){ skipWord("{"); } 00209 00210 /** 00211 * チャンクを閉じる 00212 */ 00213 virtual void closeChunk(){ skipWord("}"); } 00214 00215 /** 00216 * チャンクの読み飛ばし 00217 */ 00218 virtual void skipChunk(); 00219 00220 //-------------------------------------------------------------------------- 00221 // メンバ 00222 //-------------------------------------------------------------------------- 00223 /// トークナイザ 00224 StreamTokenizer* tokenizer_; 00225 /// シーン 00226 CollisionScene* scene_; 00227 /// ルートノード 00228 CollisionNode* rootNode_; 00229 00230 private: 00231 //-------------------------------------------------------------------------- 00232 // コピーコンストラクタの隠蔽 00233 TextCollisionLoader(const TextCollisionLoader& copy); 00234 00235 // 代入コピーの隠蔽 00236 void operator =(const TextCollisionLoader& copy); 00237 00238 }; 00239 00240 //------------------------------------------------------------------------------ 00241 } // End of namespace Lamp 00242 #endif // End of TEXT_COLLISION_LOADER_H_ 00243 //------------------------------------------------------------------------------