/* Autor: Leandro Bernsmuller
Passa agrotoxico */



#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 "interv.h"
#include "agrotox.h"



/* construtor
**********************************************************/
CAgrotoxico::CAgrotoxico ()
{
   m_dwTipoAcao = ID_ACAO_AGROTOXICO;
   m_fPassou = 0;
   m_dwBordaRemove = 4;
   m_fDirecaoX = -1.75;
   
   // define direcao em Y entre -0.05 e 0.05
   m_fDirecaoY = (float) ( rand () % 100 ) / 1000 - 0.05;
            
   m_fQuandoSoltar = (float) 15;  // bug? ( rand () % 50 );
   float
      *pafTaxas = afCONFIG_TAXAS_AGROTOXICO;
   for ( int ncT = 0; ncT < NUM_MODELOS + NUM_MODELOS_ESP; ncT ++ )
      m_afTaxasFome [ ncT ] = pafTaxas [ ncT ];
}



/* Acao.
pDado1 - flags informando se colidiu com limites do cenario
         (ver cenfis.cpp, mDetectaColisaoComBordas)
pDado2 - nao usado
return TRUE - certo / FALSE - erro
**********************************************************/
BOOL CAgrotoxico::mAtiva ( PTRVAL pDado1, PTRVAL pDado2 )
{
   // testa colisao
   if ( pDado1 != 0 )
      CIntervir::mAtiva ( pDado1, 0 );

   // dados do agente
   CDadosFisicos
      *poDados = (CDadosFisicos*) m_poMeuAgente->m_poDados;

   // cria os dejetos
   if ( ( m_fPassou >= ( m_fQuandoSoltar + 20 ) &&
          m_fPassou <= ( m_fQuandoSoltar + 30 ) ) ||
        ( m_fPassou >= ( m_fQuandoSoltar + 55 ) &&
          m_fPassou <= ( m_fQuandoSoltar + 69 ) ) ) {

      // obtem a posicao do objeto desse agente
      float
         fXM,
         fYM,
         fZM;
      m_poMeuAgente->m_poCenario->mPegaPosicaoObjeto ( poDados->m_dwGrupo, poDados->m_dwNdxObjeto, fXM, fYM, fZM );
      
      // cria um dejeto
      float
         fTempo = (float) ( rand () % 10 ) + 80,
         fDY =   (float) ( rand () % 100 ) / 10000 + 0.07, // 0.07... 0.08
         fDX =   (float) ( rand () % 100 ) / 1000 - 0.05, // -0.05...0.05
         fVRot = (float) ( rand () % 10  ) / 20  - 0.25; // -0.25... 0.25
      m_poMeuAgente->m_poCenario->mCriaObjetoTemporario ( 
         fTempo, 3, NDX_MODELO_DETRITO_AGROTOXICO, fXM + 10, fYM, fZM, fDX, - fDY, 0, 0, 1, 0, fVRot );
   }

   if ( m_fPassou == 0 ) {

      // retira energia
      CIntervir::mAtiva ( pDado1, 1 );

      // anima
      CIntervir::mAtiva ( pDado1, 2 );
   }

   m_fPassou += 1;

   return TRUE;
}
