

#ifndef SIMULADOR_MART_H
#define SIMULADOR_MART_H

#include <ptime.h>
#include <pasync.h>

#include "Parcela_Mart.h"

#define MILISEGONS_HORA_MARCIANA 1000
#define NUM_FITXERS_MAPES 6
#define FACTOR_ESCALA_ALTURA 10     // RETOCAR-HO Expressat en centimetres 
#define FACTOR_ESCALA_MATERIAL 255
#define FACTOR_ESCALA_FERRO 100
#define FACTOR_ESCALA_XRAY 100


USING_PTYPES

class Thread_Simulador_Mart : public thread
{
   protected:
      virtual void execute();
   public:
      Thread_Simulador_Mart() : thread(true) {}
      ~Thread_Simulador_Mart() {};
};

class Simulador_Mart
{
   private:
      // Dades necessaries per al Simulador de Mart, a més:
      // Definicio de la matriu del mapa on cada posicio sigui
      // de la classe Parcela_Mart
      Parcela_Mart **mapa_mart;//[TAM_X_MAPA][TAM_Y_MAPA];
      int num_files_mapa;
      int num_columnes_mapa;
      int hora_mart;
   public:
      // Metodes necessaris per implementar la logica del proces
      // que simula la evolucio del dia marcia, variant en funcio
      // de la hora del dia marcia la temperatura, llum, etc.
      
      Simulador_Mart() {};
      //int get_num_files();
      //int get_num_columnes();
      int inicialitzar_mapa_mart(char *nom_fitxer);
      void get_parcela(int x, int y,Parcela_Mart *parcela);
      float get_altura(int x, int y);
      int get_material(int x, int y);
      float get_ferro(int x, int y);
      int get_temperatura(int x, int y);
      float get_llum(int x, int y);
      float get_xray(int x, int y);
      void set_hora_marcial(int hora_actual);
      int get_hora_marcial();
      int esDeDia();
      int get_num_columnes_mapa();
      int get_num_files_mapa();
      
      ~Simulador_Mart();
      
      // Metodes necessaris (cridats des de la LOGICA_ROBOT per
      // obtenir o emmagatzemar la informacio dels diferents camps
      // del MAPA, que accediran als metodes de la classe 
      // que manega el MAPA. 
      
      // Metodes necessaris per implementar les carregues de
      // mapes aleatoris als camps de la classe, accedint a fitxers
      // amb les dades aleatories.
      // Seria convenient tenir un fitxer .ini que contingues
      // els noms dels diferents fitxers necessaris, i es llegís
      // el fitxer .ini en el constructor del simulador i es carreguessin
      // alesghores les dades dels fitxers especificats en el .ini.
      // Exemple del .ini:
      // FITXER_Z: fitxer_z.txt
      // FITXER_TEMPERATURA: fitxer_temperatura.txt
      // FITXER_MATERIAL: fitxer_material.txt
      // FITXER_FERRO: fitxer_ferro.txt
      // ...
};   

#endif   
