//////////////////////////////////////////////////////////////////////////////
//
// PS2Strip_ToolsInterface.h
//
// By: Morgan Parry.
//
// Copyright (c) 2002 Rebellion. All rights reserved.
//
//////////////////////////////////////////////////////////////////////////////

// B E G I N   F I L E   W R A P P E R ///////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
    #pragma once
#endif

#ifndef ___PS2STRIP_TOOLSINTERFACE_H___
#define ___PS2STRIP_TOOLSINTERFACE_H___ 1

// I N C L U D E S ///////////////////////////////////////////////////////////

// Stdlib platform-specific.
#include <windows.h>

// M A C R O S ///////////////////////////////////////////////////////////////

#define WINDOWS_NEWLINE "\n"

// F O R W A R D   D E C L A R A T I O N S ///////////////////////////////////

class Asura_Hierarchy_Skin;
class Asura_Mesh;

// C L A S S E S /////////////////////////////////////////////////////////////

class PS2Strip
{

    public:

        // T Y P E S /////////////////////////////////////////////////////////

        enum EXPORTTYPE
        {
            EXPORTTYPE_ENV,
            EXPORTTYPE_OBJECT,
            EXPORTTYPE_SKIN_HIER,
            EXPORTTYPE_SKIN_SMOOTH,
            EXPORTTYPE_BOTANICAL_OBJECT,
        };

        // M E T H O D S /////////////////////////////////////////////////////

        static void ExportEnvironment( HANDLE pvFile, bool bSubdivide );
        static bool ExportObject( HANDLE pvFile, Asura_Mesh* pxMesh, const char* szName );
        static bool ExportSkin( HANDLE pvFile, Asura_Hierarchy_Skin* pxSkin, float fUScale, float fVScale );

        static void ExportSkinLODThresholdChunk( HANDLE hOutput, const Asura_Hierarchy_Skin* pxSkin );
		#if defined( ASURA_USE_CARPET )
        static bool ExportCarpetMeshChunk( HANDLE pOutput );
		#endif //#if defined( ASURA_USE_CARPET )
		#if defined( ASURA_USE_BOTANICALS )
        static bool ExportBotanicalsChunk( HANDLE pOutput, const int* const piMaterialConversionList  );
        static bool ExportBotanicalObject( HANDLE pvFile, Asura_Mesh* pxMesh, const char* szName, enum Asura_PS2_Botanicals_Mesh_Type eType );
		#endif //#if defined( ASURA_USE_BOTANICALS )

        static void LogError( const char* szFormat, ... );
        static void LogWarning( const char* szFormat, ... );
        static void LogInfo( const char* szFormat, ... );

        static const char* GetLastSystemError( void );

        static void UpdateCompletionStatus( float fPercent, const char* szNewStatus = NULL, bool bRefreshDisplay = true );

        static EXPORTTYPE GetCurExportType( void );
        static const char* GetCurExportDescription( void );
        static const char* GetCurAssetName( void );
        static u_int GetCurSkinLOD( void );
        static u_int GetMaxStripLength( const Asura_Hierarchy_Skin* pxInputSkin );
        static HANDLE GetOutputHandle( void );

private:
};
// End class PS2Strip.

// E N D   F I L E   W R A P P E R ///////////////////////////////////////////

#endif // #ifndef ___PS2STRIP_TOOLSINTERFACE_H___

