/* Autor: Leandro Bernsmuller
Implementa a acao de matar uma caça */



#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include <d3drmwin.h>
#include "..\..\princip\defs.h"
#include "..\..\cenario\cenario.h"
#include "..\..\cenario\cenfis.h"
#include "acao.h"
#include "..\dados\dados.h"
#include "..\dados\dadosfis.h"
#include "..\agente.h"
#include "mata.h"



/* construtor
**********************************************************/
CMata::CMata ()
{
   m_dwTipoAcao = ID_ACAO_MATA;
}



/* Acao.
pDado1 - nao usado
pDado2 - aponta qual agente tentar matar
return TRUE - certo / FALSE - erro
**********************************************************/
BOOL CMata::mAtiva ( PTRVAL pDado1, PTRVAL pDado2 )
{
   CAgente
      *poAg = (CAgente*) pDado2;
   
   // verifica o agente nao existe
   if ( poAg == NULL )
      return TRUE;

   // verifica condicoes para matar adversario
   // Soh mata se 
   //             tenho fome;
   //             alimento eh adequado;
   CDadosFisicos
      *poDadosMeus = (CDadosFisicos*) m_poMeuAgente->m_poDados,
      *poDadosAdve = (CDadosFisicos*) poAg->m_poDados;

   // testa fome
   if ( poDadosMeus->m_fFome > TX_SEM_FOME )
      return TRUE;

   // testa alimento
   BOOL
      bAdequado = FALSE;
   // define conforme o meu corpo
   switch ( poDadosMeus->m_dwTipoCorpo ) {

      case NDX_MODELO_PEIXE_GORDO:
         // verifica se o alimento eh adequado
         if ( poDadosAdve->m_dwTipoCorpo == NDX_MODELO_PEIXE_AZUL ||
              poDadosAdve->m_dwTipoCorpo == NDX_MODELO_PEIXE_LISTRADO )

            bAdequado = TRUE;
         break;

      case NDX_MODELO_PEIXE_AZUL:
         // verifica se o alimento eh adequado
         if ( poDadosAdve->m_dwTipoCorpo == NDX_MODELO_MICROORGANISMO ||
              poDadosAdve->m_dwTipoCorpo == NDX_MODELO_PEIXE_LISTRADO )

            bAdequado = TRUE;
         break;

      case NDX_MODELO_PEIXE_LISTRADO:
         // verifica se o alimento eh adequado
         if ( poDadosAdve->m_dwTipoCorpo == NDX_MODELO_MICROORGANISMO ||
              poDadosAdve->m_dwTipoCorpo == NDX_MODELO_ALGA_VERDE )

            bAdequado = TRUE;
         break;
   }

   // executa acao conforme o resultado dos testes
   if ( bAdequado ) {

      // envia mensagem para agente oponente informando que deve morrer
      poAg->mTrataEvento ( NDX_EVENTO_MORRE, 0, 0 );
      // diminui fome
      poDadosMeus->m_fFome += TX_PREDOU;
   }

   return TRUE;
}
