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

#if !defined(AFX_ANIMATIONSUITE_H__68E70A2D_B863_11D1_98AD_0040051EDCE7__INCLUDED_)
#define AFX_ANIMATIONSUITE_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 "Stuff\Stuff.hpp"
#include <MW4\MW4AnimationSystem.hpp>


#include <afxmt.h>

#undef Min
#undef Max


#pragma pack(push,8)
	#include "Max.h"
#pragma pack(pop)

#include "resource.h"

#pragma pack(push,8)
	#include "UTILEXP.H"
	//include "MAXTYPES.h"
	//include "bmmlib.h"					// Bitmap lib

	#include "utilapi.h"				// Utility Plugins lib
	#include "istdplug.h"
	#include "stdmat.h"

	#include "shape.h"


	#include "interpik.h"
	#include "decomp.h"
	#include "keyreduc.h"

	#include "simpobj.h"
#pragma pack(pop)


#include "JointEditDialog.h"
#include "ThresholdDialog.h"
#include "About.h"

#include <GameOS\GameOS.hpp>


#define  ANIMEXPORT_CLASS_ID Class_ID(0x5b132f04, 0x1f117e3b)
#define  JOINTPREFS_CLASS_ID Class_ID(0x3215ab2, 0x1d7577f9)
#define  OPTIMIZE_CLASS_ID Class_ID(0x34cb1359, 0x614a5ed6)
#define  REPLICATE_CLASS_ID Class_ID(0x39335814, 0x311f59a6)
#define  SITEOBJECT_CLASS_ID	Class_ID(0xc3168894, 0x72508fd9)
#define  LEGMIRROR_CLASS_ID Class_ID(0x3ce33955, 0x158b2c7a)
#define  HILLADJUST_CLASS_ID Class_ID(0x4a043633, 0x157f5f04)
#define  ERFEXPORT_CLASS_ID Class_ID(0x74085d30, 0x227d1efa)
#define  MLREXPORT_CLASS_ID Class_ID(0x24c704a3, 0x68e41817)
#define  EBFEXPORT_CLASS_ID Class_ID(0x24186b99, 0x1af34c02)
#define  ARMATUREEXPORT_CLASS_ID Class_ID(0x438e49ad, 0x6efa1a44)
#define  BATCHEXPORT_CLASS_ID Class_ID(0x68653fb, 0x20e4831)
#define  FALLTOOL_CLASS_ID Class_ID(0x610a6d23,0x7396680)
#define  SKELETONVERIFY_CLASS_ID Class_ID(0x610a6d33,0x7396690)
#define  CVOBJECT_CLASS_ID	Class_ID(0xc3168894, 0x72508fe9)
#define	 CVEXPORT_CLASS_ID  Class_ID(0x35281962, 0x31f15c3c)
#define  CVTOOL_CLASS_ID Class_ID(0x64a91170, 0x69153f)
#define  LIGHTEXPORT_CLASS_ID Class_ID(0x64a91170, 0x79153f)
#define  ERFIMPORT_CLASS_ID Class_ID(0x64a91170, 0x89153f)
#define  MISSIONIMPORT_CLASS_ID Class_ID(0xfb837bef, 0xdd35a6c8)

#define WM_QUICKFILE_BEGIN (WM_USER+1000)
#define WM_QUICKFILE_APPLYFILE (WM_USER+1001)
#define WM_QUICKFILE_END (WM_USER+1002)


/////////////////////////////////////////////////////////////////////////////
// CAnimExpApp
// See PlugTest.cpp for the implementation of this class
//

class CAnimExpApp;

class AnimExp;
class ErfExp;
class MLRExp;
class ArmatureExp;
class BatchExp;
class CvExp;
class LightExp;
class ErfImp;
class MissionImp;

class JointPreferencePanel;
class OptimizeKeyframePanel;
class ReplicatePanel;
class LegMirrorPanel;
class HillAdjustPanel;
class FallToolPanel;
class SkeletonVerifyPanel;
class CvToolPanel;


class AnimExpClassDesc;
class ArmatureExpClassDesc;
class ErfExpClassDesc;
class MLRExpClassDesc;
class EBFExpClassDesc;
class BatchExpClassDesc;
class JointPreferenceClassDesc;
class OptimizeKeyframeClassDesc;
class ReplicateClassDesc;
class SiteObjectClassDesc;
class LegMirrorClassDesc;
class HillAdjustClassDesc;
class FallToolClassDesc;
class SkeletonVerifyClassDesc;
class CvObjectClassDesc;
class CvExpClassDesc;
class CvToolClassDesc;
class LightExpClassDesc;
class ErfImpClassDesc;
class MissionImpClassDesc;

extern ClassDesc* GetAnimExpDesc();
extern TCHAR *GetString(int id);


extern CAnimExpApp theApp;
extern HINSTANCE hInstance;

extern AnimExpClassDesc			 animExpDesc;
extern ErfExpClassDesc			 erfExpDesc;
extern MLRExpClassDesc			 MLRExpDesc;
extern EBFExpClassDesc			 EBFExpDesc;
extern BatchExpClassDesc		 batchExpDesc;
extern ArmatureExpClassDesc		 armatureExpDesc;
extern JointPreferenceClassDesc  jointPreferenceDesc;
extern OptimizeKeyframeClassDesc optimizeKeyframeDesc;
extern ReplicateClassDesc		 replicateExpDesc;
extern SiteObjectClassDesc		 siteObjectClassDesc;
extern LegMirrorClassDesc		 legmirrorDesc;
extern HillAdjustClassDesc		 hillAdjustDesc;
extern FallToolClassDesc		 fallToolDesc;
extern SkeletonVerifyClassDesc	 skeletonVerifyDesc;
extern CvObjectClassDesc		 cvObjectClassDesc;
extern CvExpClassDesc			 cvExpDesc;
extern CvToolClassDesc			 cvToolDesc;
extern LightExpClassDesc		 lightExpDesc;
extern ErfImpClassDesc			 erfImpDesc;
extern MissionImpClassDesc		 missionImpDesc;

extern JointPreferencePanel		g_jointPreferencePanel;
extern OptimizeKeyframePanel	g_optimizeKeyframePanel;
extern ReplicatePanel			g_replicatePanel;
extern LegMirrorPanel			g_legmirrorPanel;
extern HillAdjustPanel			g_hillAdjustPanel;
extern FallToolPanel			g_fallToolPanel;
extern SkeletonVerifyPanel		g_skeletonVerifyPanel;
extern CvToolPanel				g_cvToolPanel;

void TurnOnExceptions();
void TurnOffExceptions();
DWORD WINAPI fn(LPVOID arg);
HWND EnableQuickFile(Interface *,HWND);
void DisableQuickFile(Interface * ip,HWND hWnd);

// Attempts to delete keys that lie within the given time range.
// The controller will be sampled within the range in 'step' size
// increments. After the key reduction, the controller's values
// at each step are gauranteed to be withen 'threshold' distance
// from their original values.
//	  Copied from keyreduc.h and keyreduc.cpp
int ApplyKeyReduction_MW4(
		Control *cont,Interval range,float thresh,TimeValue step,
		KeyReduceStatus *status);


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


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

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

	//{{AFX_MSG(CAnimExpApp)
		// 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()


};

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



class AnimExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_ANIMEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return ANIMEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};



//-------------------------------------------------------------------------

class ErfExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_ERFEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return ERFEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};


//-------------------------------------------------------------------------

class MLRExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_MLREXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return MLREXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};


//-------------------------------------------------------------------------

class EBFExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_EBFEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return EBFEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};


//-------------------------------------------------------------------------

class ArmatureExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_ARMATUREEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return ARMATUREEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};



//-------------------------------------------------------------------------

class BatchExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_BATCHEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return BATCHEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};



//-------------------------------------------------------------------------

class JointPreferenceClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_jointPreferencePanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_JOINTPREF_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return JOINTPREFS_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}

};

//-------------------------------------------------------------------------

class OptimizeKeyframeClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_optimizeKeyframePanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_OPTIMIZEKEY_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return OPTIMIZE_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}

};

//-------------------------------------------------------------------------

class ReplicateClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_replicatePanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_REPLICATE_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return REPLICATE_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}

};

//-------------------------------------------------------------------------

class SiteObjectClassDesc : public ClassDesc {
	public:
	int 			IsPublic()						{return 1;}
	void *			Create(BOOL loading = FALSE);
	const TCHAR *	ClassName()						{return GetString(IDS_SITEOBJECT_NAME);}
	SClass_ID		SuperClassID()					{return HELPER_CLASS_ID;}
	Class_ID		ClassID()						{return SITEOBJECT_CLASS_ID;}
	const TCHAR* 	Category()						{return GetString(IDS_CATEGORY);}
	void			ResetClassParams (BOOL f_reset) {};
};

/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------

class LegMirrorClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_legmirrorPanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_LEGMIRROR_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return LEGMIRROR_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}

};

/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------

class HillAdjustClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_hillAdjustPanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_HILLADJUST_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return HILLADJUST_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}
};


/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------

class FallToolClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_fallToolPanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_FALLTOOL_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return FALLTOOL_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}
};

/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------

class SkeletonVerifyClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_skeletonVerifyPanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_SKELETONVERIFY_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return SKELETONVERIFY_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}
};

//-------------------------------------------------------------------------

class CvObjectClassDesc : public ClassDesc {
	public:
	int 			IsPublic()						{return 1;}
	void *			Create(BOOL loading = FALSE);
	const TCHAR *	ClassName()						{return GetString(IDS_CVOBJECT_NAME);}
	SClass_ID		SuperClassID()					{return HELPER_CLASS_ID;}
	Class_ID		ClassID()						{return CVOBJECT_CLASS_ID;}
	const TCHAR* 	Category()						{return GetString(IDS_CATEGORY);}
	void			ResetClassParams (BOOL f_reset) {};
};

//-------------------------------------------------------------------------

class CvExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_CVEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return CVEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};

/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------

class CvToolClassDesc : public ClassDesc
{
public:
	int			IsPublic ()						{return 1;}
	void*		Create (BOOL loading = FALSE)	{return &g_cvToolPanel;}
	const		TCHAR* ClassName ()				{return GetString(IDS_CVTOOL_NAME);}
	SClass_ID	SuperClassID ()					{return UTILITY_CLASS_ID;}
	Class_ID	ClassID ()						{return CVTOOL_CLASS_ID;}
	const		TCHAR* Category ()				{return GetString(IDS_CATEGORY);}
};


//-------------------------------------------------------------------------

class LightExpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_LIGHTEXP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return LIGHTEXPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};

//-------------------------------------------------------------------------

class ErfImpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_ERFIMP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_IMPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return ERFIMPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};

//-------------------------------------------------------------------------

class MissionImpClassDesc : public ClassDesc {
public:
	int				IsPublic ()						{return 1;}
	void*			Create(BOOL loading = FALSE); 
	const TCHAR*	ClassName()						{ return GetString(IDS_MISSIONIMP_NAME); }
	SClass_ID		SuperClassID()					{ return SCENE_IMPORT_CLASS_ID; } 
	Class_ID		ClassID()						{ return MISSIONIMPORT_CLASS_ID; }
	const TCHAR*	Category()						{ return GetString(IDS_CATEGORY); }
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_ANIMATIONSUITE_H__68E70A2D_B863_11D1_98AD_0040051EDCE7__INCLUDED_)
