/////////////////////////////////////////////////////////////////////////////
// BRB.h : main header file for the PLUGTEST DLL
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_PLUGTEST_H__68E70A2D_B863_11D1_98AD_0040051EDCE7__INCLUDED_)
#define AFX_PLUGTEST_H__68E70A2D_B863_11D1_98AD_0040051EDCE7__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__
	#error include 'stdafx.h' before including this file for PCH
#endif

#include "bmmlib.h"					// Bitmap lib
#include "utilapi.h"				// Utility Plugins lib
#include "istdplug.h"

#define  BRB_CLASS_ID Class_ID(0x4c9b40d0, 0x3bf66064)
#define	 BRB_SUPER_CLASS_ID    UTILITY_CLASS_ID

#include "resource.h"		// main symbols

#if !defined(STUFF_STUFF_HPP)
	#include "Stuff\Stuff.hpp"
#endif

#if !defined(MAXPROXIES_MAXPROXIES_HPP)
	#include "MAXProxies\MAXProxies.hpp"
#endif

#if !defined(MIDLEVELRENDERER_HPP)
	#include "MLR\MLR.hpp"
#endif

#if !defined(ELEMENTPROXIES_ELEMENTPROXIES_HPP)
	#include "ElementProxies\ElementProxies.hpp"
#endif

#if !defined(ELEMENTRENDERER_ELEMENTRENDERER_HPP)
	#include "ElementRenderer\ElementRenderer.hpp"
#endif

#if !defined(GOSFX_GOSFX_HPP)
	#include <gosFX\gosFX.hpp>
#endif

#define  EXPORTINFO_CLASS_ID Class_ID(0x17724552, 0x2ee077db)
#define	 EXPORTINFO_SUPER_CLASS_ID    UTILITY_CLASS_ID
#define	 TEMP_DATA_ID 1
#define  PERM_DATA_ID 0
#define	 MAX_FILES 8
#define  ONE_MINUS_MAX_FILES (MAX_FILES-1)

/////////////////////////////////////////////////////////////////////////////
// structure to save way we are exporting to be used in the case of command
// line exporting.  defaults are all false.
//
//typedef struct {
//	bool overwriteTextures; 
//	bool exportCharacter;
//	bool outputAmatureFile;
//} ErfExportInfo;

/////////////////////////////////////////////////////////////////////////////
// 
// structure to save way we are exporting to be used in the case of command
// line exporting.  defaults are all false.
//
typedef struct {
	bool bIsBRB;
	bool overwriteTextures; 
	bool outputAmatureFile;
	unsigned exportType;
} ExportInfo;



/////////////////////////////////////////////////////////////////////////////
// CPlugTestApp
// See BRB.cpp for the implementation of this class
//

class CPlugTestApp : public CWinApp
{
public:
	CPlugTestApp();

	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CPlugTestApp)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	//}}AFX_VIRTUAL

	//{{AFX_MSG(CPlugTestApp)
		// NOTE - the ClassWizard will add and remove member functions here.
		//    DO NOT EDIT what you see in these blocks of generated code !
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////
// PlugPanel, manage the Plugins' display panel
class PlugPanel : public UtilityObj {
	public:
		HINSTANCE		m_hInstance;
		IUtil*			m_iu;
		Interface*		m_ip;
		HWND			m_hPanel;
		TSTR			m_game_path;		// path that mech 4 lives in i.e. e:\MW4

	public:
		// Constructor & Destructor
		PlugPanel()				{}
		virtual ~PlugPanel()	{}

		// Overides of the UtilityObj class
		void BeginEditParams(Interface* ip, IUtil* iu);
		void EndEditParams(Interface* ip, IUtil* iu);
		void DeleteThis()		{}
		void Init(HWND hWnd)	{}
		void Destroy(HWND hWnd)	{}

	//
	//Specific Methods
	//
	public:
		void GetGamePath();
		void OnPreviewAnimation();
		void OnPreviewLOD();
		void OnErfView();
		void OnExportToGame();
		bool AddPreferences(INode *node);
		bool RemovePreferences(INode *node);
		//
		//Variables
		//
		enum ETYPE{
			EXPORT_SHAPE		= 0,
			EXPORT_CHARACTER	= 1,
			EXPORT_ANIM			= 2,
		};

	private:
		ExportInfo	m_exportInfo;			// data about export settings
		CString m_fileName[MAX_FILES];
		CString m_sortName[MAX_FILES];
		int		m_farLod[MAX_FILES];
		int		m_nearLod[MAX_FILES];
		int		m_fileCount;

		int WriteBrbPropFile(ETYPE etype);

};

extern PlugPanel thePlugPanel;		// The One and only One object

////////////////////////////////////////////////////////////////////////////////
// PlugDesc, Plugin description class
class PlugDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &thePlugPanel;}
	const		TCHAR* ClassName ()				{return _T("Big Red Button");}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return BRB_CLASS_ID;}
	const		TCHAR* Category ()				{return _T("Fasa Interactive");}

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_PLUGTEST_H__68E70A2D_B863_11D1_98AD_0040051EDCE7__INCLUDED_)
