
#include "Tzone.h"


// -----------------------
// --- le constructeur ---
// -----------------------

Tzone::Tzone()
{
	//
}

// ----------------------
// --- le destructeur ---
// ----------------------

Tzone::~Tzone()
{
    //
}


// --------------------
// --- les méthodes ---
// --------------------



// fichier / x y z / echelle masque.png sable_512.png sable_512_n.png /
// plus les fichiers de normals !
// les uv doivent êtres calés en 0-0 et 1-1
// inutile de mettre une texture
void Tzone::create(std::string flux)
{
    std::vector<std::string> strList;
    std::string str;

    ECO_strCut(strList, flux, ' ');

    // ---

	m_file = strList[0];
	// 1
	m_pos.x = ECO_strToFloat(strList[2]);
	m_pos.y = ECO_strToFloat(strList[3]);
	m_pos.z = ECO_strToFloat(strList[4]);
	m_scale = ECO_strToFloat(strList[5]);
	// 6
	m_ratio = ECO_strToFloat( strList[7] ); // base = grille_w / 4

	m_str_texture.clear();
    m_str_texture.reserve( strList.size() - 8);
    for (size_t i = 8; i < strList.size()-1; i++)
    {
        m_str_texture.push_back( strList[i] );
    }

    _composition();
    _setModel();
}

void Tzone::_composition()
{
    OMesh_obj::P_setPath(PATH_MESH_ZONE);
    OMesh_obj::P_setScale(m_scale, m_scale, m_scale);
    if (!mesh.create(m_file))
    {
        ECO_error_set("echec chargement %s >Tzone::_composition", m_file.c_str());
        OMesh_obj::P_setScale(1,1,1);
        return;
    }
    OMesh_obj::P_setScale(1,1,1);

    //---

    OTextureList::P_setPath(PATH_MESH_ZONE);
    OTextureList::P_setFilter(OTEXTURELIST_MIPMAP);
    OTextureList::P_setMipmap(true);
    //
    //textureList.add(m_str_texture[0], false); // pas de flip pour garder l'image masque dans le bon sens avec gltf
    textureList.add(m_str_texture[0]); // ici obj = plus simple
    for (size_t i = 1; i < m_str_texture.size(); i++)
    {
        textureList.add(m_str_texture[i]);
    }
    // fond noir gauche = base + rouge vert bleu / fond noir droit = base2 + rouge vert bleu
    OTextureList::P_setMipmap(false);
    OTextureList::P_setFilter(OTEXTURELIST_INTERFACE);

    // >>>
    m_texture.clear();
    m_texture.resize(m_str_texture.size());

    for (size_t i = 0; i < m_str_texture.size(); i++)
    {
        m_texture[i] = textureList.getID(m_str_texture[i]) ;
    }

}




void Tzone::draw(ODshMask& dshMask)
{
    glEnable(GL_CULL_FACE); // obligatoire pour la reflection
    //glDisable(GL_CULL_FACE);

    dshMask.enable();
        dshMask.setModel(m_model);
        dshMask.setScaleTexture(m_ratio);
        //dshMask.setScaleNormal(2.0f);

        for (size_t i = 0; i < m_texture.size(); i++)
        {
            dshMask.setTexture(GL_TEXTURE0+i, i, m_texture[i]);
        }
        glActiveTexture(0);

    // ne pas appliquer les textures de base !
    mesh.draw();

    glActiveTexture(0);
    glBindTexture(GL_TEXTURE_2D, 0);
}




void Tzone::_setModel()
{
    m_model.loadIdentity();
    m_model.translate(m_pos);

}




