/**
 * =========================================================================
 * File        : Sprite.h
 * Project     : 0 A.D.
 * Description : Billboarding sprite class - always faces the camera. It
 *               does this by getting the current model view matrix state.
 * =========================================================================
 */

// Usage: Instantiate, then be sure to pass a loaded
// (using ogl_tex_load()) texture before calling Render().

#ifndef INCLUDED_SPRITE
#define INCLUDED_SPRITE

//--------------------------------------------------------
//  Includes / Compiler directives
//--------------------------------------------------------

#include "maths/Vector3D.h"
#include "Texture.h"

//--------------------------------------------------------
//  Declarations
//--------------------------------------------------------

class CSprite 
{
public:
    CSprite();
    ~CSprite();

    void Render();

    int SetTexture(CTexture *texture);

    void SetSize(float width, float height);

    float GetWidth();
    void  SetWidth(float width);

    float GetHeight();
    void  SetHeight(float height);

    CVector3D GetTranslation();
    void SetTranslation(CVector3D pos);
    void SetTranslation(float x, float y, float z);

    CVector3D GetScale();
    void SetScale(CVector3D scale);
    void SetScale(float x, float y, float z);

    void SetColour(float * colour);
    void SetColour(float r, float g, float b, float a = 1.0f);
private:
    void BeginBillboard();
    void EndBillboard();

    CTexture    *m_texture;

    CVector3D   m_coords[4];

    float       m_width;
    float       m_height;

    CVector3D   m_translation;
    CVector3D   m_scale;

    float m_colour[4];
};

#endif // INCLUDED_SPRITE