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_SAVER_H_ 00026 #define TEXT_SCENE_SAVER_H_ 00027 00028 namespace Lamp{ 00029 00030 class TextWriter; 00031 class Scene; 00032 class Fog; 00033 class SceneNodeManager; 00034 class LightManager; 00035 class ModelManager; 00036 class MeshManager; 00037 class MeshDataManager; 00038 class MaterialManager; 00039 class TextureManager; 00040 class PictureManager; 00041 00042 class SceneNode; 00043 class LODSceneNode; 00044 class Light; 00045 class AmbientLight; 00046 class DirectionalLight; 00047 class PointLight; 00048 class Model; 00049 class StandardModel; 00050 class CharacterModel; 00051 class Bone; 00052 class Mesh; 00053 class RigidMesh; 00054 class CharacterMesh; 00055 class MeshData; 00056 class Material; 00057 class BasicMaterial; 00058 class Texture; 00059 class SurfaceTexture; 00060 class Picture; 00061 00062 //------------------------------------------------------------------------------ 00063 /** 00064 * テキストシーンセーバ 00065 */ 00066 class TextSceneSaver{ 00067 public: 00068 /** 00069 * コンストラクタ 00070 */ 00071 TextSceneSaver(); 00072 00073 /** 00074 * デストラクタ 00075 */ 00076 virtual ~TextSceneSaver(); 00077 00078 /** 00079 * セーブ 00080 * @param filePath ファイルパス 00081 * @param scene セーブするシーン 00082 */ 00083 virtual void save(const String& filePath, Scene* scene); 00084 00085 /** 00086 * セーブ 00087 * @param textWriter テキストライタ 00088 * @param scene セーブするシーン 00089 * @param basePath ベースパス 00090 */ 00091 virtual void save(TextWriter* textWriter, Scene* scene, 00092 const String& basePath = ""); 00093 00094 protected: 00095 /** 00096 * ヘッダの書き出し 00097 */ 00098 virtual void writeHeader(); 00099 00100 /** 00101 * オブジェクトリストの書き出し 00102 * @return オブジェクト数 00103 */ 00104 virtual int writeObjectList(); 00105 00106 /** 00107 * リンクの書き出し 00108 * @param objectCount オブジェクト数 00109 */ 00110 virtual void writeLink(int objectCount); 00111 00112 //-------------------------------------------------------------------------- 00113 // フォグ 00114 //-------------------------------------------------------------------------- 00115 /** 00116 * フォグの書き出し 00117 * @param fog フォグ 00118 */ 00119 virtual void writeFog(Fog* fog); 00120 00121 //-------------------------------------------------------------------------- 00122 // シーンノード 00123 //-------------------------------------------------------------------------- 00124 /** 00125 * シーンノードリストの書き出し 00126 */ 00127 virtual void writeSceneNodeList(); 00128 00129 /** 00130 * シーンノードの書き出し 00131 * @param sceneNode 書き出すシーンノード 00132 */ 00133 virtual void writeSceneNode(SceneNode* sceneNode); 00134 00135 /** 00136 * レベルオブディティールシーンノードの書き出し 00137 * @param sceneNode 書き出すレベルオブディティールシーンノード 00138 */ 00139 virtual void writeLODSceneNode(LODSceneNode* sceneNode); 00140 00141 //-------------------------------------------------------------------------- 00142 // ライト 00143 //-------------------------------------------------------------------------- 00144 /** 00145 * ライトリストの書き出し 00146 */ 00147 virtual void writeLightList(); 00148 00149 /** 00150 * ライトの書き出し 00151 * @param light 書き出すライト 00152 */ 00153 virtual void writeLight(Light* light); 00154 00155 /** 00156 * アンビエントライトの書き出し 00157 * @param light 書き出すライト 00158 */ 00159 virtual void writeAmbientLight(AmbientLight* light); 00160 00161 /** 00162 * ディレクショナルライトの書き出し 00163 * @param light 書き出すライト 00164 */ 00165 virtual void writeDirectionalLight(DirectionalLight* light); 00166 00167 /** 00168 * ポイントライトの書き出し 00169 * @param light 書き出すライト 00170 */ 00171 virtual void writePointLight(PointLight* light); 00172 00173 //-------------------------------------------------------------------------- 00174 // モデル 00175 //-------------------------------------------------------------------------- 00176 /** 00177 * モデルリストの書き出し 00178 */ 00179 virtual void writeModelList(); 00180 00181 /** 00182 * 標準モデルの書き出し 00183 * @param model 書き出すモデル 00184 */ 00185 virtual void writeStandardModel(StandardModel* model); 00186 00187 /** 00188 * キャラクタモデルの書き出し 00189 * @param model 書き出すモデル 00190 */ 00191 virtual void writeCharacterModel(CharacterModel* model); 00192 00193 /** 00194 * ボーンの書き出し 00195 * @param bone 書き出すボーン 00196 */ 00197 virtual void writeBone(Bone* bone); 00198 00199 /** 00200 * ボーンリンクの書き出し 00201 * @param bone 書き出すボーン 00202 */ 00203 virtual void writeBoneLink(Bone* bone); 00204 00205 //-------------------------------------------------------------------------- 00206 // メッシュ 00207 //-------------------------------------------------------------------------- 00208 /** 00209 * メッシュリストの書き出し 00210 */ 00211 virtual void writeMeshList(); 00212 00213 /** 00214 * 剛体メッシュの書き出し 00215 * @param mesh 書き出すメッシュ 00216 */ 00217 virtual void writeRigidMesh(RigidMesh* mesh); 00218 00219 /** 00220 * キャラクタメッシュの書き出し 00221 * @param mesh 書き出すメッシュ 00222 */ 00223 virtual void writeCharacterMesh(CharacterMesh* mesh); 00224 00225 //-------------------------------------------------------------------------- 00226 // メッシュデータ 00227 //-------------------------------------------------------------------------- 00228 /** 00229 * メッシュデータリストの書き出し 00230 */ 00231 virtual void writeMeshDataList(); 00232 00233 /** 00234 * メッシュデータの書き出し 00235 * @param meshData 書き出すメッシュデータ 00236 */ 00237 virtual void writeMeshData(MeshData* meshData); 00238 00239 //-------------------------------------------------------------------------- 00240 // マテリアル 00241 //-------------------------------------------------------------------------- 00242 /** 00243 * マテリアルリストの書き出し 00244 */ 00245 virtual void writeMaterialList(); 00246 00247 /** 00248 * マテリアルの書き出し 00249 * @param material 書き出すマテリアル 00250 */ 00251 virtual void writeMaterial(const Material* material); 00252 00253 /** 00254 * 基本マテリアルの書き出し 00255 * @param material 書き出すマテリアル 00256 */ 00257 virtual void writeBasicMaterial(const BasicMaterial* material); 00258 00259 //-------------------------------------------------------------------------- 00260 // テクスチャ 00261 //-------------------------------------------------------------------------- 00262 /** 00263 * テクスチャリストの書き出し 00264 */ 00265 virtual void writeTextureList(); 00266 00267 /** 00268 * サーフェーステクスチャの書き出し 00269 * @param texture 書き出すテクスチャ 00270 */ 00271 virtual void writeSurfaceTexture(const SurfaceTexture* texture); 00272 00273 //-------------------------------------------------------------------------- 00274 // ピクチャ 00275 //-------------------------------------------------------------------------- 00276 /** 00277 * ピクチャの書き出し 00278 * @param picture 書き出すピクチャ 00279 */ 00280 virtual void writePicture(const Picture* picture); 00281 00282 //-------------------------------------------------------------------------- 00283 // リンク 00284 //-------------------------------------------------------------------------- 00285 /** 00286 * シーンノードリンクの書き出し 00287 * @param sceneNode 書き出すシーンノード 00288 */ 00289 virtual void writeSceneNodeLink(SceneNode* sceneNode); 00290 00291 /** 00292 * モデルリンクの書き出し 00293 * @param model 書き出すモデル 00294 */ 00295 virtual void writeModelLink(const Model* model); 00296 00297 /** 00298 * メッシュリンクの書き出し 00299 * @param mesh 書き出すメッシュ 00300 */ 00301 virtual void writeMeshLink(const Mesh* mesh); 00302 00303 /** 00304 * マテリアルリンクリストの書き出し 00305 */ 00306 virtual void writeMaterialLinkList(); 00307 00308 /** 00309 * 基本マテリアルリンクの書き出し 00310 * @param material 書き出すマテリアル 00311 */ 00312 virtual void writeBasicMaterialLink(const BasicMaterial* material); 00313 00314 /** 00315 * テクスチャリンクの書き出し 00316 * @param texture 書き出すテクスチャ 00317 */ 00318 virtual void writeTextureLink(const Texture* texture); 00319 00320 //-------------------------------------------------------------------------- 00321 // ユーティリティ 00322 //-------------------------------------------------------------------------- 00323 /** 00324 * boolの書き出し 00325 */ 00326 virtual void writeBool(bool); 00327 00328 /** 00329 * 線コメントの書き出し 00330 */ 00331 virtual void writeLineComment(); 00332 00333 /** 00334 * ブロックコメントの書き出し 00335 * @param blockName ブロック名 00336 */ 00337 virtual void writeBlockComment(const String& blockName); 00338 00339 /// ライタ 00340 TextWriter* writer_; 00341 /// ベースパス 00342 String basePath_; 00343 /// シーン 00344 Scene* scene_; 00345 /// シーンノードマネージャ 00346 SceneNodeManager* sceneNodeManager_; 00347 /// ライトマネージャ 00348 LightManager* lightManager_; 00349 /// モデルマネージャ 00350 ModelManager* modelManager_; 00351 /// メッシュマネージャ 00352 MeshManager* meshManager_; 00353 /// メッシュデータマネージャ 00354 MeshDataManager* meshDataManager_; 00355 /// マテリアルマネージャ 00356 MaterialManager* materialManager_; 00357 /// テクスチャマネージャ 00358 TextureManager* textureManager_; 00359 /// ピクチャマネージャ 00360 PictureManager* pictureManager_; 00361 00362 private: 00363 // コピーコンストラクタの隠蔽 00364 TextSceneSaver(const TextSceneSaver& copy); 00365 00366 // 代入コピーの隠蔽 00367 void operator =(const TextSceneSaver& copy); 00368 00369 }; 00370 00371 //------------------------------------------------------------------------------ 00372 } // End of namespace Lamp 00373 #endif // End of TEXT_SCENE_SAVER_H_ 00374 //------------------------------------------------------------------------------