//------------------------------------------------------------------------------
// Lamp : Open source game middleware
// Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//------------------------------------------------------------------------------

/** @file
 * Lampトランスレータヘッダ
 * @author Junpee
 */

#ifndef LAMP_TRANSLATOR_H_
#define LAMP_TRANSLATOR_H_

namespace Lamp{
	class Scene;
	class AnimationManager;
	class AnimationSet;
}

namespace LampForMaya{

class TranslationScene;

//------------------------------------------------------------------------------
/**
 * Lampトランスレータ
 */
class LampTranslator{
friend class LampTextTranslator;
friend class LampBinaryTranslator;
public:
	/**
	 * 書き出し
	 * @param file ファイル名
	 * @param optionsString オプション
	 * @param mode ファイルアクセスモード
	 * @param textFlag テキストフラグ
	 * @return 成功すれば MStatus::kSuccess
	 */
	virtual MStatus write(const MFileObject& file,
		const MString& optionsString, MPxFileTranslator::FileAccessMode mode,
		bool textFlag);

	//--------------------------------------------------------------------------
	/**
	 * テキストシーン拡張子の取得
	 * @return テキストシーン拡張子
	 */
	static String getTextSceneExtension(){ return "tsn"; }

	/**
	 * テキストアニメーション拡張子の取得
	 * @return テキストアニメーション拡張子
	 */
	static String getTextAnimationExtension(){ return "tam"; }

	/**
	 * バイナリシーン拡張子の取得
	 * @return バイナリシーン拡張子
	 */
	static String getBinarySceneExtension(){ return "bsn"; }

	/**
	 * バイナリアニメーション拡張子の取得
	 * @return バイナリアニメーション拡張子
	 */
	static String getBinaryAnimationExtension(){ return "bam"; }

private:
	// コンストラクタ
	LampTranslator();

	// デストラクタ
	virtual ~LampTranslator();

	// エラー後始末
	virtual MStatus errorCleanup();

	// オプション解析
	virtual void analyzeOption(const String& options);

	// 開始メッセージ出力
	virtual void outputStartMessage();

	// コピーコンストラクタの隠蔽
	LampTranslator(const LampTranslator& copy);

	// 代入コピーの隠蔽
	void operator =(const LampTranslator& copy);

	// 変換用シーン
	TranslationScene* translationScene_;
	// シーン
	Scene* scene_;
	// アニメーションマネージャ
	AnimationManager* animationManager_;
	// アニメーションセット
	AnimationSet* animationSet_;

	// テキスト出力フラグ
	bool textExportFlag_;
	// シーン出力フラグ
	bool exportSceneFlag_;
	// ピクチャ出力パス
	String picturePath_;
	// メッシュ最適化フラグ
	bool meshOptimizeFlag_;
	// キャラクタスケール
	float characterScale_;
	// アニメーション出力フラグ
	bool exportAnimationFlag_;
	// 静的チャンネル削除フラグ
	bool deleteStaticChannelsFlag_;
};

//------------------------------------------------------------------------------
} // End of namespace Lamp
#endif // End of LAMP_TRANSLATOR_H_
//------------------------------------------------------------------------------
