// File: KellerMartins[P]PDS2-Pacman/source/game/pacman.cpp
// Function: Pacman::VerificaPosicao()
bool Pacman::VerificaPosicao(){
	int ix = roundf(_x);
	int iy = roundf(_y);

	std::vector<Enemy*> &enemies = Enemy::GetEnemies();
	
	for(unsigned int i = 0; i < enemies.size(); ++i)
	{
		float enemy_x = enemies[i]->GetX();
		float enemy_y = enemies[i]->GetY();

		if(abs(enemy_x - _x)<0.5 && abs(enemy_y - _y)<0.5){
			if(enemies[i]->IsScared()){
				enemies[i]->Morrer();
				_pontuacao += 50;
			}else if(enemies[i]->GetAlive()){
				Morrer();
				Enemy::IsOver(true);
				return 0;				
			}
		}
	}	
	
	if(Mapa::GetElementoMapa(ix,iy) == ElementoMapa::Ponto) {
		_pontuacao++;
		//Altera o valor no mapa para que o ponto desapareça
		Mapa::RemoveElementoMapa(ix,iy);
	}
	
	if(Mapa::GetElementoMapa(ix,iy) == ElementoMapa::Especial){
		for (unsigned int i = 0; i < enemies.size(); ++i){
			if(enemies[i]->GetAlive()){
				enemies[i]->GetScared(true);
			}
		}
		_pontuacao+= VALOR_FRUTA;
		//Altera o valor no mapa para que o ponto desapareça
		Mapa::RemoveElementoMapa(ix,iy);
	}

	int nextx = roundf(_x + _direcaoX*0.5);
	int nexty = roundf(_y + _direcaoY*0.5);
	if(Mapa::GetElementoMapa(nextx,nexty) == ElementoMapa::Parede) {
		return true;
	}else{
		return false;
	}
	
	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movss 0x2d4(%rax), %xmm0
callq 0x98f0
movq -0x40(%rbp), %rax
cvttss2si %xmm0, %ecx
movl %ecx, -0x14(%rbp)
movss 0x2d8(%rax), %xmm0
callq 0x98f0
cvttss2si %xmm0, %eax
movl %eax, -0x18(%rbp)
callq 0xbc60
movq %rax, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rdi
callq 0xcd10
movq %rax, %rcx
movq -0x48(%rbp), %rax
cmpq %rcx, %rax
jae 0x13d5e
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x14850
movq (%rax), %rdi
callq 0xc4d0
movss %xmm0, -0x28(%rbp)
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x14850
movq (%rax), %rdi
callq 0xc4f0
movq -0x40(%rbp), %rax
movss %xmm0, -0x2c(%rbp)
movss -0x28(%rbp), %xmm0
subss 0x2d4(%rax), %xmm0
callq 0x14870
cvtss2sd %xmm0, %xmm1
movsd 0x91778(%rip), %xmm0    # 0xa5410
ucomisd %xmm1, %xmm0
jbe 0x13d4e
movq -0x40(%rbp), %rax
movss -0x2c(%rbp), %xmm0
subss 0x2d8(%rax), %xmm0
callq 0x14870
cvtss2sd %xmm0, %xmm1
movsd 0x9174c(%rip), %xmm0    # 0xa5410
ucomisd %xmm1, %xmm0
jbe 0x13d4e
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x14850
callq 0xc380
testb $0x1, %al
jne 0x13ce7
jmp 0x13d12
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x14850
movq (%rax), %rdi
callq 0xbc90
movq -0x40(%rbp), %rax
movl 0x2c8(%rax), %ecx
addl $0x32, %ecx
movl %ecx, 0x2c8(%rax)
jmp 0x13d4c
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x14850
movq (%rax), %rdi
callq 0xc360
testb $0x1, %al
jne 0x13d2e
jmp 0x13d4a
movq -0x40(%rbp), %rdi
callq 0x13ec0
movl $0x1, %edi
callq 0xc440
movb $0x0, -0x1(%rbp)
jmp 0x13eac
jmp 0x13d4c
jmp 0x13d4e
jmp 0x13d50
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x13c20
movl -0x14(%rbp), %edi
movl -0x18(%rbp), %esi
callq 0x104d0
cmpl $0x2, %eax
jne 0x13d8c
movq -0x40(%rbp), %rax
movl 0x2c8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x2c8(%rax)
movl -0x14(%rbp), %edi
movl -0x18(%rbp), %esi
callq 0x10520
movl -0x14(%rbp), %edi
movl -0x18(%rbp), %esi
callq 0x104d0
cmpl $0x3, %eax
jne 0x13e22
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
movq %rax, -0x50(%rbp)
movq -0x20(%rbp), %rdi
callq 0xcd10
movq %rax, %rcx
movq -0x50(%rbp), %rax
cmpq %rcx, %rax
jae 0x13e04
movq -0x20(%rbp), %rdi
movl -0x30(%rbp), %eax
movl %eax, %esi
callq 0x14850
movq (%rax), %rdi
callq 0xc360
testb $0x1, %al
jne 0x13ddf
jmp 0x13df7
movq -0x20(%rbp), %rdi
movl -0x30(%rbp), %eax
movl %eax, %esi
callq 0x14850
movl $0x1, %edi
callq 0xbc70
jmp 0x13df9
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x13da7
movq -0x40(%rbp), %rax
movl 0x2c8(%rax), %ecx
addl $0x32, %ecx
movl %ecx, 0x2c8(%rax)
movl -0x14(%rbp), %edi
movl -0x18(%rbp), %esi
callq 0x10520
movq -0x40(%rbp), %rax
movss 0x2d4(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
cvtsi2sdl 0x2d0(%rax), %xmm0
movsd 0x915ce(%rip), %xmm2    # 0xa5410
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x98f0
movq -0x40(%rbp), %rax
cvttss2si %xmm0, %ecx
movl %ecx, -0x34(%rbp)
movss 0x2d8(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
cvtsi2sdl 0x2cc(%rax), %xmm0
movsd 0x91596(%rip), %xmm2    # 0xa5410
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x98f0
cvttss2si %xmm0, %eax
movl %eax, -0x38(%rbp)
movl -0x34(%rbp), %edi
movl -0x38(%rbp), %esi
callq 0x104d0
cmpl $0x1, %eax
jne 0x13ea8
movb $0x1, -0x1(%rbp)
jmp 0x13eac
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)