#ifndef MODEL_FILE_H
#define MODEL_FILE_H

#include "common/File.h"
#include "common/Logger.h"
#include "../../common/OgreGenUtilites.h"



class ModelFile : public File
{
public:
    ModelFile( const Ogre::String &file );
    ModelFile( File* file );
    ModelFile( File* file, const u32 offset, const u32 length );
    ModelFile( u8* buffer, const u32 offset, const u32 length );
    virtual ~ModelFile();

    void GetModel( Ogre::MeshPtr mesh, const MeshData& info, VectorTexForGen& textures, Logger* export_text );
    void GetModelPart( const int part_id, Ogre::MeshPtr mesh, const MeshData& info, VectorTexForGen& textures, Logger* export_text, const int bone_id );

private:
    int LoadPoly010305_18( float*& pPos, float*& tPos, Ogre::RGBA*& cPos, const MeshData& info, VectorTexForGen& textures );
    int LoadPoly04_18( float*& pPos, float*& tPos, Ogre::RGBA*& cPos, const MeshData& info, VectorTexForGen& textures );
    int LoadPoly090d_18( float*& pPos, float*& tPos, Ogre::RGBA*& cPos, const MeshData& info, VectorTexForGen& textures );
    int LoadPoly0c_18( float*& pPos, float*& tPos, Ogre::RGBA*& cPos, const MeshData& info, VectorTexForGen& textures );

    int TexSettings();
    void SetTexPageSettings();
    void SetClutSettings();

    Logger* m_ExportLog;

    int m_LightType;
    int m_PointerToTextureData;
    int m_PointerToMeshData;
    int m_PointerToVertexData;

    u16 m_CurrentClut;
    u16 m_CurrentTexPage;
};



#endif // MODEL_FILE_H
