Beispiel #1
0
/*Funcao auxiliar usada internamente para checar se as duas entidades passadas irao colidir no proximo ciclo logico.
  Assume que uma delas esta parada, e a outra se mexendo, entao preve onde essa entidade estara e se estara proxima
  da outra entidade.*/
int checaColisao( Entity entQueMove, Entity entParada, double DeltaTime )
{
	Vetor VetAuxQueMove, VetAuxParada;
	double RaioDoCirculo, dist;

	atualizaPosicao(entQueMove, DeltaTime);
	VetAuxQueMove = getPosicao( entQueMove );

	atualizaPosicao(entParada, DeltaTime);
	VetAuxParada = getPosicao( entParada );

	RaioDoCirculo = /*DeltaTime*VETORmodulo( getVelocidade( entQueMove ) ) +*/ getRaio(entQueMove) + getRaio(entParada) + OFFSET_RAIO;

	dist = CalcDist( VetAuxQueMove, VetAuxParada );

    atualizaPosicao(entParada, -DeltaTime);
	atualizaPosicao(entQueMove, -DeltaTime);


	if (dist <= RaioDoCirculo)
	{
	    if ( checkIntersecaoDeFormas(entQueMove, entParada) == 1)
            return 1;
	}
	return 0;
}
Beispiel #2
0
/*Funcao auxiliar usada internamente usada no meio do loop de checagem de colisoes.
  Ela equivale ao segundo FOR do loop (o FOR dentro do outro), executando a funcao colisaoDeEntities para
  cada dupla de entidades no jogo.
  Note que antes de checar se a ent ira colidir com qualquer outra entidade, ela checa se a entidade
  ira sair da tela, o que e' tratado como uma colisao entre 2 entidades (ent, NULL)*/
void colisaoPorEntity( Item ent_i, Item Aux )
{
	Colisao AuxColisao;
	Vetor pos;
	Entity ent;

    ent = (Entity)ent_i;
	AuxColisao = (Colisao)Aux;
	AuxColisao->ent = ent;
	AuxColisao->podeChecar = 0;

	atualizaPosicao(ent, AuxColisao->DeltaTime);
	pos = getPosicao(ent);
	if (round(getX(pos)) < 0 || round(getX(pos)) >= MAX_OCEANO_X || round(getY(pos)) < 0 || round(getY(pos)) >= MAX_OCEANO_Y)
	{
	    /*chama colisao (ent, NULL) */
	    setEstaColidindo( ent, 1 );
	    callColidiuCom(ent, NULL, AuxColisao->DeltaTime);
	    return;
	}
	atualizaPosicao(ent, -(AuxColisao->DeltaTime) );

	executeForAllEntities( colisaoDeEntities, AuxColisao );
}
Beispiel #3
0
/*Funcao importante usada internamente. Ela executa um update logico de um Bote.*/
void updateBote(Entity ent, double deltaTime)
{
	int estado, estadoAntigo;
	Vetor v;

    atualizaPosicao(ent, deltaTime);  /*atualizamos nossa posicao de acordo com a velocidade e variacao do tempo.*/

    /*Se nao estivermos colidindo podemos tentar mudar nossa direcao de movimento de acordo */
    if ( !getEstaColidindo(ent) )
    {
        v = getVelocidade(ent);
        estadoAntigo = getBoteEstado(v);

        if (estadoAntigo != -1)
        {
            /*E tentamos mudar nosso estado de acordo com uma cadeia de markov...*/
            estado = markovProximoEstado(estadoAntigo, 8, markovTransicaoBote);
            if (estado != estadoAntigo)
                setBoteEstado(estado, v);
        }
    }
}
Beispiel #4
0
/*-------------------------------------------------------------
    atualizaNave

    Atualiza a posicao da nave de acordo com sua velocidade e direcao.
*/
void atualizaNave(Nave* nave, float timestep_value)
{   
    atualizaPosicao(nave->pos, nave->vel, nave->dir, timestep_value);
}