#ifndef __MODELS_H
#define __MODELS_H


#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>



/**
 * Table constants. Size, number of squares, square size and initial coords.
 */
#define TB_SIZE         16.0
#define TB_NSQUARES     16
#define TB_SQUARE_SIZE  TB_SIZE/TB_NSQUARES
#define TB_X0          -TB_SIZE/2
#define TB_Y0          -TB_SIZE/2
#define TB_Xn           TB_SIZE/2
#define TB_Yn           TB_SIZE/2


/**
 * Enumeration for all models
 */
typedef enum {

  TABLE                    =  1,
  RAFT                     =  2,
  BOAT                     =  3,
  SUBMARINE                =  4,
  VESSEL                   =  5,
  AUXTABLE                 =  6,
  SQUARE_FOUND             =  7,
  SQUARE_MISSED            =  8,
  SQUARE_SELECTED          =  9,
  SUN                      = 10,
  MOON                     = 11,
  EMISSIVE_PARTS_RAFT      = 12,
  EMISSIVE_PARTS_BOAT      = 13,
  EMISSIVE_PARTS_SUBMARINE = 14,
  EMISSIVE_PARTS_VESSEL    = 15,

} eModel_t;


/**
 * Constant for emissive parts
 */
#define EMISSIVE_PARTS (EMISSIVE_PARTS_RAFT-RAFT)


/**
 * Function for creating all models
 */
void createAllModels(void);


/**
 * Functions for creating the game table and the auxiliary table
 */
void createTable(void);
void createAuxTable(void);


/**
 * Functions for creating the squares models
 */
void createSquareFound(void);
void createSquareMissed(void);
void createSquareSelected(void);


/**
 * Functions for creating ships individually
 */
void createRaft(void);
void createBoat(void);
void createSubmarine(void);
void createVessel(void);


/**
 * Functions for creating ships' emissive parts individually
 */
void createEmissivePartsRaft(void);
void createEmissivePartsBoat(void);
void createEmissivePartsSubmarine(void);
void createEmissivePartsVessel(void);


/**
 * Functions for creating sun and moon
 */
void createSun(void);
void createMoon(void);



#endif /* __MODELS_H */
