/* Stockage de scenes                           */
/*                                              */
/* Auteur: Nicolas JANEY                        */
/* nicolas.janey@univ-fcomte.fr                 */
/* Novembre 2012                                */

#include < stdlib.h>
#include < stdio.h>
#include < string.h>

#include "Scene.h"
#include "Lumiere.h"
#include "ObjetGraphique.h"
#include "TestAlloc.h"
#include "MemoryAlloc.h"

/* Constructeurs                                */

Scene::Scene(void) {
  no = 0;
  objets = NULL;
  nl = 0;
  lumieres = NULL;
}

/* Destructeur                                  */

Scene::~Scene(void) {
  if ( objets )
    free(objets);
  if ( lumieres )
    free(lumieres);
}

/* Ajout d'une lumiere a la scene               */

int Scene::add(Lumiere *l) {
  lumieres =(Lumiere **) myRealloc(lumieres,nl*sizeof(Lumiere *),(nl+1)*sizeof(Lumiere *));
  if ( testAllocAndGo(lumieres,"Scene::add(Lumiere *)") ) {
    lumieres[nl] = l;
    nl++;
    return(1); }
    else {
    return(0); }
}

/* Ajout d'un objet a la scene                  */

int Scene::add(ObjetGraphique *o) {
  objets =(ObjetGraphique **) myRealloc(objets,no*sizeof(ObjetGraphique *),(no+1)*sizeof(ObjetGraphique *));
  if ( testAllocAndGo(objets,"Scene::add(ObjetGraphique *)") ) {
    objets[no] = o;
    no++;
    return(1); }
    else {
    return(0); }
}

/* Deletion de tous les objets de la scene      */

void Scene::deleteObjets(void) {
  if ( no != 0) {
    for ( int i = 0 ; i < no ; i++ ) {
      delete(objets[i]); } }
}

/* Deletion de toutes les lumieres de la scene  */

void Scene::deleteLumieres(void) {
  if ( nl != 0) {
    for ( int i = 0 ; i < nl ; i++ ) {
      delete(lumieres[i]); } }
}
