/* Autor: Leandro Bernsmuller
Declara constantes usadas na compilacao e outras macros especiais*/



// funcoes que devem estar sempre disponiveis
#include <stdio.h>



// constantes referentes a interface precompilada (menus, caixas de dialogo, ...)
#include "..\dpc\resource.h"



// constantes definidas manualmente
#include "..\dpc\consts.h"



// valores lidos de arquivo e usados no programa
#define USAR_EXTERN extern
#include "valores.h"



// PRE-DECLARACAO DE CLASSES

class CAgente;
class CApl;
class CCenario;
class CCenarioFisico;



// MACROS DE USO GERAL

// Para transformacoes de coordenadas:

// Transforma os valores fornecidos de coordenadas relativas
// a janela, em pixels, para coordenadas normalizadas (0 a 1).
// Posicao na janela:  (0,0) *----*
//                           |    |
//                           *----* (1,1)
// Os valores sao retornados nas proprias variaveis passadas
// como argumento.
#define TRANSJAN_NORM(X,Y,PORCENTX,PORCENTY) \
   { \
      float \
         fVidX = (float) ::GetSystemMetrics ( SM_CXSCREEN ), \
         fVidY = (float) ::GetSystemMetrics ( SM_CYSCREEN ); \
      float \
         fDimX = fVidX * ( (float) PORCENTX / 100 ), \
         fDimY = fVidY * ( (float) PORCENTY / 100 ); \
      X = X / fDimX; \
      Y = Y / fDimY; \
   }

// Para exibir mensagens:

// exibe caixa de mensagem, parametro eh um string
#define MSGSTR(STR) \
   ::MessageBox ( NULL, STR, STR_TITULO_CAIXA_MSG, MB_ICONINFORMATION | MB_OK )

// exibe caixa de mensagem, parametro eh um float
#define MSGFLO(FLO) \
   {\
      char \
         szStrMensagem [ 50 ]; \
      sprintf ( szStrMensagem, "%f", FLO ); \
      ::MessageBox ( NULL, szStrMensagem, STR_TITULO_CAIXA_MSG, MB_ICONINFORMATION | MB_OK ); \
   }

// exibe caixa de mensagem, parametro sao 4 floats
#define MSGFLO4(F1,F2,F3,F4) \
   {\
      char \
         szStrMensagem [ 200 ]; \
      sprintf ( szStrMensagem, "%f  %f  %f  %f", F1, F2, F3, F4 ); \
      ::MessageBox ( NULL, szStrMensagem, STR_TITULO_CAIXA_MSG, MB_ICONINFORMATION | MB_OK ); \
   }



// TIPOS DE DADOS (usados em todo programa)

// valor numerico de um ponteiro (em sistemas de 32 bits
// um ponteiro tem o mesmo numero de bits que um inteiro,
// em sistemas de 64 bits um ponteiro tem 64 bits e um
// inteiro 32 bits).
#define PTRVAL unsigned long int

// possui informacao sobre um evento (relacionado ao tempo)
struct tagEventoTempo {
   DWORD dwTempo;         // quando deve ocorrer (em qual segundo
                          // apohs o inicio da partida)
   DWORD dwEvento;        // oque deve ocorrer
};
