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_SCENE_LOADER_H_ 00026 #define TEXT_SCENE_LOADER_H_ 00027 00028 namespace Lamp{ 00029 00030 class TextReader; 00031 class TargaLoader; 00032 class StreamTokenizer; 00033 class Scene; 00034 class SceneNodeManager; 00035 class SceneNode; 00036 class LightManager; 00037 class Light; 00038 class ModelManager; 00039 class CharacterModel; 00040 class MeshManager; 00041 class MeshDataManager; 00042 class MeshData; 00043 class MaterialManager; 00044 class Material; 00045 class TextureManager; 00046 class PictureManager; 00047 class Picture; 00048 00049 //------------------------------------------------------------------------------ 00050 /** 00051 * テキストシーンローダ 00052 */ 00053 class TextSceneLoader{ 00054 public: 00055 /** 00056 * コンストラクタ 00057 */ 00058 TextSceneLoader(); 00059 00060 /** 00061 * デストラクタ 00062 */ 00063 virtual ~TextSceneLoader(); 00064 00065 /** 00066 * ロード 00067 * @param filePath ファイルパス 00068 * @param scene ロード先シーン 00069 */ 00070 virtual void load(const String& filePath, Scene* scene); 00071 00072 /** 00073 * ロード 00074 * @param filePath ファイルパス 00075 * @param scene ロード先シーン 00076 * @param rootNode ロード先ルートノード 00077 */ 00078 virtual void load(const String& filePath, Scene* scene, 00079 SceneNode* rootNode); 00080 00081 /** 00082 * ロード 00083 * @param textReader テキストリーダ 00084 * @param scene ロード先シーン 00085 * @param basePath ベースパス 00086 */ 00087 virtual void load(TextReader* textReader, Scene* scene, 00088 const String& basePath = ""); 00089 00090 /** 00091 * ロード 00092 * @param textReader テキストリーダ 00093 * @param scene ロード先シーン 00094 * @param rootNode ロード先ルートノード 00095 * @param basePath ベースパス 00096 */ 00097 virtual void load(TextReader* textReader, Scene* scene, 00098 SceneNode* rootNode, const String& basePath = ""); 00099 00100 protected: 00101 /** 00102 * ヘッダの読み込み 00103 */ 00104 virtual void readHeader(); 00105 00106 //-------------------------------------------------------------------------- 00107 // フォグ 00108 //-------------------------------------------------------------------------- 00109 /** 00110 * フォグの読み込み 00111 */ 00112 virtual void readFog(); 00113 00114 //-------------------------------------------------------------------------- 00115 // シーンノード 00116 //-------------------------------------------------------------------------- 00117 /** 00118 * シーンノードリストの読み込み 00119 */ 00120 virtual void readSceneNodeList(); 00121 00122 /** 00123 * シーンノードの読み込み 00124 * @param name 名前 00125 */ 00126 virtual void readSceneNode(const String& name); 00127 00128 /** 00129 * レベルオブディティールシーンノードの読み込み 00130 * @param name 名前 00131 */ 00132 virtual void readLODSceneNode(const String& name); 00133 00134 //-------------------------------------------------------------------------- 00135 // ライト 00136 //-------------------------------------------------------------------------- 00137 /** 00138 * ライトリストの読み込み 00139 */ 00140 virtual void readLightList(); 00141 00142 /** 00143 * ライトの読み込み 00144 * @param light ライト 00145 */ 00146 virtual void readLight(Light* light); 00147 00148 /** 00149 * アンビエントライトの読み込み 00150 * @param name 名前 00151 */ 00152 virtual void readAmbientLight(const String& name); 00153 00154 /** 00155 * ディレクショナルライトの読み込み 00156 * @param name 名前 00157 */ 00158 virtual void readDirectionalLight(const String& name); 00159 00160 /** 00161 * ポイントライトの読み込み 00162 * @param name 名前 00163 */ 00164 virtual void readPointLight(const String& name); 00165 00166 //-------------------------------------------------------------------------- 00167 // モデル 00168 //-------------------------------------------------------------------------- 00169 /** 00170 * モデルリストの読み込み 00171 */ 00172 virtual void readModelList(); 00173 00174 /** 00175 * 標準モデルの読み込み 00176 * @param name 名前 00177 */ 00178 virtual void readStandardModel(const String& name); 00179 00180 /** 00181 * キャラクタモデルの読み込み 00182 * @param name 名前 00183 */ 00184 virtual void readCharacterModel(const String& name); 00185 00186 /** 00187 * ボーンの読み込み 00188 * @param model 読込先モデル 00189 * @param name 名前 00190 */ 00191 virtual void readBone(CharacterModel* model, const String& name); 00192 00193 //-------------------------------------------------------------------------- 00194 // メッシュ 00195 //-------------------------------------------------------------------------- 00196 /** 00197 * メッシュリストの読み込み 00198 */ 00199 virtual void readMeshList(); 00200 00201 /** 00202 * 剛体メッシュの読み込み 00203 * @param name 名前 00204 */ 00205 virtual void readRigidMesh(const String& name); 00206 00207 /** 00208 * キャラクタメッシュの読み込み 00209 * @param name 名前 00210 */ 00211 virtual void readCharacterMesh(const String& name); 00212 00213 //-------------------------------------------------------------------------- 00214 // メッシュデータ 00215 //-------------------------------------------------------------------------- 00216 /** 00217 * メッシュデータリストの読み込み 00218 */ 00219 virtual void readMeshDataList(); 00220 00221 /** 00222 * メッシュデータの読み込み 00223 * @param name 名前 00224 */ 00225 virtual void readMeshData(const String& name); 00226 00227 //-------------------------------------------------------------------------- 00228 // マテリアル 00229 //-------------------------------------------------------------------------- 00230 /** 00231 * マテリアルリストの読み込み 00232 */ 00233 virtual void readMaterialList(); 00234 00235 /** 00236 * マテリアルの読み込み 00237 * @param material マテリアル 00238 */ 00239 virtual void readMaterial(Material* material); 00240 00241 /** 00242 * 基本マテリアルの読み込み 00243 * @param name 名前 00244 */ 00245 virtual void readBasicMaterial(const String& name); 00246 00247 //-------------------------------------------------------------------------- 00248 // テクスチャ 00249 //-------------------------------------------------------------------------- 00250 /** 00251 * テクスチャリストの読み込み 00252 */ 00253 virtual void readTextureList(); 00254 00255 /** 00256 * サーフェーステクスチャの読み込み 00257 * @param name 名前 00258 */ 00259 virtual void readSurfaceTexture(const String& name); 00260 00261 //-------------------------------------------------------------------------- 00262 // ピクチャ 00263 //-------------------------------------------------------------------------- 00264 /** 00265 * ピクチャリストの読み込み 00266 */ 00267 virtual void readPictureList(); 00268 00269 /** 00270 * RGB8ビットピクチャの読み込み 00271 * @param name 名前 00272 * @param loader Targaローダ 00273 * @return 読み込んだピクチャ 00274 */ 00275 virtual Picture* readPictureRGB8(const String& name, TargaLoader& loader); 00276 00277 /** 00278 * RGBA8ビットピクチャの読み込み 00279 * @param name 名前 00280 * @param loader Targaローダ 00281 * @return 読み込んだピクチャ 00282 */ 00283 virtual Picture* readPictureRGBA8(const String& name, TargaLoader& loader); 00284 00285 //-------------------------------------------------------------------------- 00286 // シーンノードリンク 00287 //-------------------------------------------------------------------------- 00288 /** 00289 * シーンノードリンクリストの読み込み 00290 */ 00291 virtual void readSceneNodeLinkList(); 00292 00293 /** 00294 * シーンノードリンクの読み込み 00295 * @param name 名前 00296 */ 00297 virtual void readSceneNodeLink(const String& name); 00298 00299 //-------------------------------------------------------------------------- 00300 // モデルリンク 00301 //-------------------------------------------------------------------------- 00302 /** 00303 * モデルリンクリストの読み込み 00304 */ 00305 virtual void readModelLinkList(); 00306 00307 /** 00308 * モデルリンクの読み込み 00309 * @param name 名前 00310 */ 00311 virtual void readModelLink(const String& name); 00312 00313 //-------------------------------------------------------------------------- 00314 // メッシュリンク 00315 //-------------------------------------------------------------------------- 00316 /** 00317 * メッシュリンクリストの読み込み 00318 */ 00319 virtual void readMeshLinkList(); 00320 00321 /** 00322 * メッシュリンクの読み込み 00323 * @param name 名前 00324 */ 00325 virtual void readMeshLink(const String& name); 00326 00327 //-------------------------------------------------------------------------- 00328 // マテリアルリンク 00329 //-------------------------------------------------------------------------- 00330 /** 00331 * マテリアルリンクリストの読み込み 00332 */ 00333 virtual void readMaterialLinkList(); 00334 00335 /** 00336 * 基本マテリアルリンクの読み込み 00337 * @param name 名前 00338 */ 00339 virtual void readBasicMaterialLink(const String& name); 00340 00341 //-------------------------------------------------------------------------- 00342 // テクスチャリンク 00343 //-------------------------------------------------------------------------- 00344 /** 00345 * テクスチャリンクリストの読み込み 00346 */ 00347 virtual void readTextureLinkList(); 00348 00349 /** 00350 * テクスチャリンクの読み込み 00351 * @param name 名前 00352 */ 00353 virtual void readTextureLink(const String& name); 00354 00355 //-------------------------------------------------------------------------- 00356 // 値の読み込み 00357 //-------------------------------------------------------------------------- 00358 /** 00359 * bool値の読み込み 00360 * @return bool値 00361 */ 00362 virtual bool readBool(); 00363 00364 /** 00365 * u_char値の読み込み 00366 * @return u_char値 00367 */ 00368 virtual u_char readUChar(); 00369 00370 /** 00371 * u_short値の読み込み 00372 * @return u_short値 00373 */ 00374 virtual u_short readUShort(); 00375 00376 /** 00377 * int値の読み込み 00378 * @return int値 00379 */ 00380 virtual int readInt(); 00381 00382 /** 00383 * u_int値の読み込み 00384 * @return u_int値 00385 */ 00386 virtual u_int readUInt(); 00387 00388 /** 00389 * float値の読み込み 00390 * @return float値 00391 */ 00392 virtual float readFloat(); 00393 00394 /** 00395 * Vector3値の読み込み 00396 * @return Vector3値 00397 */ 00398 virtual Vector3 readVector3(); 00399 00400 /** 00401 * Matrix34値の読み込み 00402 * @return Matrix34値 00403 */ 00404 virtual Matrix34 readMatrix34(); 00405 00406 /** 00407 * 三要素整数カラー値の読み込み 00408 * @return 三要素整数カラー値 00409 */ 00410 virtual Color3c readColor3c(); 00411 00412 /** 00413 * 四要素整数カラー値の読み込み 00414 * @return 四要素整数カラー値 00415 */ 00416 virtual Color4c readColor4c(); 00417 00418 /** 00419 * 三要素実数カラー値の読み込み 00420 * @return 三要素実数カラー値 00421 */ 00422 virtual Color3f readColor3f(); 00423 00424 /** 00425 * 四要素実数カラー値の読み込み 00426 * @return 四要素実数カラー値 00427 */ 00428 virtual Color4f readColor4f(); 00429 00430 /** 00431 * 二次元テクスチャ座標値の読み込み 00432 * @return 二次元テクスチャ座標値 00433 */ 00434 virtual TexCoord2 readTexCoord2(); 00435 00436 /** 00437 * 軸沿いボックスの読み込み 00438 * @return 軸沿いボックス 00439 */ 00440 virtual AxisAlignedBox readAxisAlignedBox(); 00441 00442 /** 00443 * 球の読み込み 00444 * @return 球 00445 */ 00446 virtual Sphere readSphere(); 00447 00448 //-------------------------------------------------------------------------- 00449 // ユーティリティ 00450 //-------------------------------------------------------------------------- 00451 /** 00452 * トークンの読み込み 00453 * @param caller 呼び出し元 00454 */ 00455 virtual String readToken(const String& caller); 00456 00457 /** 00458 * 指定ワードの読み飛ばし 00459 * @param word 読み飛ばすワード 00460 */ 00461 virtual void skipWord(const String& word); 00462 00463 /** 00464 * チャンクを開く 00465 */ 00466 virtual void openChunk(){ skipWord("{"); } 00467 00468 /** 00469 * チャンクを閉じる 00470 */ 00471 virtual void closeChunk(){ skipWord("}"); } 00472 00473 /** 00474 * チャンクの読み飛ばし 00475 */ 00476 virtual void skipChunk(); 00477 00478 //-------------------------------------------------------------------------- 00479 // メンバ 00480 //-------------------------------------------------------------------------- 00481 /// ベースパス 00482 String basePath_; 00483 /// トークナイザ 00484 StreamTokenizer* tokenizer_; 00485 /// シーン 00486 Scene* scene_; 00487 /// ルートノード 00488 SceneNode* rootNode_; 00489 /// シーンノードマネージャ 00490 SceneNodeManager* sceneNodeManager_; 00491 /// ライトマネージャ 00492 LightManager* lightManager_; 00493 /// モデルマネージャ 00494 ModelManager* modelManager_; 00495 /// メッシュマネージャ 00496 MeshManager* meshManager_; 00497 /// メッシュデータマネージャ 00498 MeshDataManager* meshDataManager_; 00499 /// マテリアルマネージャ 00500 MaterialManager* materialManager_; 00501 /// テクスチャマネージャ 00502 TextureManager* textureManager_; 00503 /// ピクチャマネージャ 00504 PictureManager* pictureManager_; 00505 00506 private: 00507 // コピーコンストラクタの隠蔽 00508 TextSceneLoader(const TextSceneLoader& copy); 00509 00510 // 代入コピーの隠蔽 00511 void operator =(const TextSceneLoader& copy); 00512 00513 }; 00514 00515 //------------------------------------------------------------------------------ 00516 } // End of namespace Lamp 00517 #endif // End of TEXT_SCENE_LOADER_H_ 00518 //------------------------------------------------------------------------------