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 BINARY_SCENE_SAVER_H_ 00026 #define BINARY_SCENE_SAVER_H_ 00027 00028 namespace Lamp{ 00029 00030 class BinaryWriter; 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 BinarySceneSaver{ 00067 public: 00068 /** 00069 * コンストラクタ 00070 */ 00071 BinarySceneSaver(); 00072 00073 /** 00074 * デストラクタ 00075 */ 00076 virtual ~BinarySceneSaver(); 00077 00078 /** 00079 * セーブ 00080 * @param filePath ファイルパス 00081 * @param scene セーブするシーン 00082 */ 00083 virtual void save(const String& filePath, Scene* scene); 00084 00085 /** 00086 * セーブ 00087 * @param binaryWriter バイナリライタ 00088 * @param scene セーブするシーン 00089 * @param basePath ベースパス 00090 */ 00091 virtual void save(BinaryWriter* binaryWriter, 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 linkCount リンク数 00109 */ 00110 virtual void writeLink(int linkCount); 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 model 書き出すモデル 00202 * @param bone 書き出すボーン 00203 */ 00204 virtual void writeBoneLink(CharacterModel* model, Bone* bone); 00205 00206 //-------------------------------------------------------------------------- 00207 // メッシュ 00208 //-------------------------------------------------------------------------- 00209 /** 00210 * メッシュリストの書き出し 00211 */ 00212 virtual void writeMeshList(); 00213 00214 /** 00215 * 剛体メッシュの書き出し 00216 * @param mesh 書き出すメッシュ 00217 */ 00218 virtual void writeRigidMesh(RigidMesh* mesh); 00219 00220 /** 00221 * キャラクタメッシュの書き出し 00222 * @param mesh 書き出すメッシュ 00223 */ 00224 virtual void writeCharacterMesh(CharacterMesh* mesh); 00225 00226 //-------------------------------------------------------------------------- 00227 // メッシュデータ 00228 //-------------------------------------------------------------------------- 00229 /** 00230 * メッシュデータリストの書き出し 00231 */ 00232 virtual void writeMeshDataList(); 00233 00234 /** 00235 * メッシュデータの書き出し 00236 * @param meshData 書き出すメッシュデータ 00237 */ 00238 virtual void writeMeshData(MeshData* meshData); 00239 00240 //-------------------------------------------------------------------------- 00241 // マテリアル 00242 //-------------------------------------------------------------------------- 00243 /** 00244 * マテリアルリストの書き出し 00245 */ 00246 virtual void writeMaterialList(); 00247 00248 /** 00249 * マテリアルの書き出し 00250 * @param material 書き出すマテリアル 00251 */ 00252 virtual void writeMaterial(const Material* material); 00253 00254 /** 00255 * 基本マテリアルの書き出し 00256 * @param material 書き出すマテリアル 00257 */ 00258 virtual void writeBasicMaterial(const BasicMaterial* material); 00259 00260 //-------------------------------------------------------------------------- 00261 // テクスチャ 00262 //-------------------------------------------------------------------------- 00263 /** 00264 * テクスチャリストの書き出し 00265 */ 00266 virtual void writeTextureList(); 00267 00268 /** 00269 * サーフェーステクスチャの書き出し 00270 * @param texture 書き出すテクスチャ 00271 */ 00272 virtual void writeSurfaceTexture(const SurfaceTexture* texture); 00273 00274 //-------------------------------------------------------------------------- 00275 // ピクチャ 00276 //-------------------------------------------------------------------------- 00277 /** 00278 * ピクチャの書き出し 00279 * @param picture 書き出すピクチャ 00280 */ 00281 virtual void writePicture(const Picture* picture); 00282 00283 //-------------------------------------------------------------------------- 00284 // リンク 00285 //-------------------------------------------------------------------------- 00286 /** 00287 * シーンノードリンクの書き出し 00288 * @param sceneNode 書き出すシーンノード 00289 */ 00290 virtual void writeSceneNodeLink(SceneNode* sceneNode); 00291 00292 /** 00293 * モデルリンクの書き出し 00294 * @param model 書き出すモデル 00295 */ 00296 virtual void writeModelLink(const Model* model); 00297 00298 /** 00299 * メッシュリンクの書き出し 00300 * @param mesh 書き出すメッシュ 00301 */ 00302 virtual void writeMeshLink(const Mesh* mesh); 00303 00304 /** 00305 * マテリアルリンクリストの書き出し 00306 */ 00307 virtual void writeMaterialLinkList(); 00308 00309 /** 00310 * 基本マテリアルリンクの書き出し 00311 * @param material 書き出すマテリアル 00312 */ 00313 virtual void writeBasicMaterialLink(const BasicMaterial* material); 00314 00315 /** 00316 * テクスチャリンクの書き出し 00317 * @param texture 書き出すテクスチャ 00318 */ 00319 virtual void writeTextureLink(const Texture* texture); 00320 00321 //-------------------------------------------------------------------------- 00322 // 値の書き出し 00323 //-------------------------------------------------------------------------- 00324 /** 00325 * 文字列の書き出し 00326 * @param string 文字列 00327 */ 00328 virtual void writeString(const String& string); 00329 00330 /** 00331 * 三次元ベクトルの書き出し 00332 * @param vector 三次元ベクトル 00333 */ 00334 virtual void writeVector3(const Vector3& vector); 00335 00336 /** 00337 * 3×4行列の書き出し 00338 * @return 3×4行列 00339 */ 00340 virtual void writeMatrix34(const Matrix34& matrix); 00341 00342 /** 00343 * 四要素整数カラー値の書き出し 00344 * @param color 四要素整数カラー値 00345 */ 00346 virtual void writeColor4c(const Color4c& color); 00347 00348 /** 00349 * 三要素実数カラー値の書き出し 00350 * @param color 三要素実数カラー値 00351 */ 00352 virtual void writeColor3f(const Color3f& color); 00353 00354 /** 00355 * 四要素実数カラー値の書き出し 00356 * @param color 四要素実数カラー値 00357 */ 00358 virtual void writeColor4f(const Color4f& color); 00359 00360 /** 00361 * 二次元テクスチャ座標値の書き出し 00362 * @param uv 二次元テクスチャ座標値 00363 */ 00364 virtual void writeTexCoord2(const TexCoord2& uv); 00365 00366 /** 00367 * 軸沿いボックスの書き出し 00368 * @param box 軸沿いボックス 00369 */ 00370 virtual void writeAxisAlignedBox(const AxisAlignedBox& box); 00371 00372 /** 00373 * 球の書き出し 00374 * @param sphere 球 00375 */ 00376 virtual void writeSphere(const Sphere& sphere); 00377 00378 //-------------------------------------------------------------------------- 00379 // ユーティリティ 00380 //-------------------------------------------------------------------------- 00381 /** 00382 * アライメントを取る 00383 */ 00384 virtual void align(); 00385 00386 /** 00387 * IDの書き出し 00388 * @param id 書き出すID 00389 */ 00390 virtual void writeID(const String& id); 00391 00392 /** 00393 * ブロックの開始 00394 * @param blockName ブロック名 00395 * @return プロック開始位置 00396 */ 00397 virtual int startBlock(const String& blockName); 00398 00399 /** 00400 * ブロックの終了 00401 * @param blockStartAddress ブロック開始位置 00402 */ 00403 virtual void endBlock(int blockStartAddress); 00404 00405 //-------------------------------------------------------------------------- 00406 /// ライタ 00407 BinaryWriter* writer_; 00408 /// ベースパス 00409 String basePath_; 00410 /// シーン 00411 Scene* scene_; 00412 /// シーンノードマネージャ 00413 SceneNodeManager* sceneNodeManager_; 00414 /// ライトマネージャ 00415 LightManager* lightManager_; 00416 /// モデルマネージャ 00417 ModelManager* modelManager_; 00418 /// メッシュマネージャ 00419 MeshManager* meshManager_; 00420 /// メッシュデータマネージャ 00421 MeshDataManager* meshDataManager_; 00422 /// マテリアルマネージャ 00423 MaterialManager* materialManager_; 00424 /// テクスチャマネージャ 00425 TextureManager* textureManager_; 00426 /// ピクチャマネージャ 00427 PictureManager* pictureManager_; 00428 00429 private: 00430 // コピーコンストラクタの隠蔽 00431 BinarySceneSaver(const BinarySceneSaver& copy); 00432 00433 // 代入コピーの隠蔽 00434 void operator =(const BinarySceneSaver& copy); 00435 00436 }; 00437 00438 //------------------------------------------------------------------------------ 00439 } // End of namespace Lamp 00440 #endif // End of BINARY_SCENE_SAVER_H_ 00441 //------------------------------------------------------------------------------