// File: KellerMartins[P]PDS2-Pacman/source/game/mapa.cpp
// Function: Mapa::CarregaArquivo(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void Mapa::CarregaArquivo(std::string arq){
	Mapa &mapa = GetMapaGlobal();

	std::ifstream arquivo(arq);

	for(int y = 0; y < ALTURA; y++){
		for(int x = 0; x < LARGURA; x++){
			int elemento;
			arquivo >> elemento;
			if(!arquivo.fail()){
				if(elemento <= MAX_INDICE_ELEMENTO_MAPA){
					mapa._mapa[x][y] = (ElementoMapa) elemento;
					mapa._original[x][y] = (ElementoMapa) elemento;

					if(elemento == Ponto || elemento == Especial){
						mapa._pontosRestantes++;
					}
				}
				else{
					if(elemento == INDICE_PACMAN){
						mapa._playerSpawn = (Vector2){(float)x, (float)y};
					}
					else if(elemento >= INDICE_FANTASMAS){
						mapa._enemySpawn[elemento - INDICE_FANTASMAS] = (Vector2){(float)x, (float)y};
					}
				}
			}
			else{
				throw std::invalid_argument("Mapa " + arq +" contem valor invalido!");
			}
		}
	}
	mapa.DesregistraMapaRenderizavel();
	mapa.RegistraMapaRenderizavel();
	mapa.GerarCaminho();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b0, %rsp            # imm = 0x2B0
movq %rdi, -0x298(%rbp)
movq %rdi, -0x8(%rbp)
callq 0xf2d0
movq -0x298(%rbp), %rsi
movq %rax, -0x10(%rbp)
leaq -0x218(%rbp), %rdi
movl $0x8, %edx
callq 0x9df0
movl $0x0, -0x21c(%rbp)
cmpl $0x1b, -0x21c(%rbp)
jge 0xf819
movl $0x0, -0x220(%rbp)
cmpl $0x15, -0x220(%rbp)
jge 0xf803
leaq -0x218(%rbp), %rdi
leaq -0x224(%rbp), %rsi
callq 0x9520
jmp 0xf57a
movq -0x218(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x218(%rbp,%rax), %rdi
callq 0x9040
movb %al, -0x299(%rbp)
jmp 0xf59a
movb -0x299(%rbp), %al
testb $0x1, %al
jne 0xf6f7
jmp 0xf5aa
cmpl $0x4, -0x224(%rbp)
jg 0xf648
movl -0x224(%rbp), %edx
movq -0x10(%rbp), %rax
addq $0x8, %rax
movslq -0x220(%rbp), %rcx
imulq $0x6c, %rcx, %rcx
addq %rcx, %rax
movslq -0x21c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x224(%rbp), %edx
movq -0x10(%rbp), %rax
addq $0x8e4, %rax            # imm = 0x8E4
movslq -0x220(%rbp), %rcx
imulq $0x6c, %rcx, %rcx
addq %rcx, %rax
movslq -0x21c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
cmpl $0x2, -0x224(%rbp)
je 0xf617
cmpl $0x3, -0x224(%rbp)
jne 0xf643
movq -0x10(%rbp), %rax
movl 0x11c0(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x11c0(%rax)
jmp 0xf643
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0xf84f
jmp 0xf6f2
cmpl $0x5, -0x224(%rbp)
jne 0xf685
cvtsi2ssl -0x220(%rbp), %xmm0
movss %xmm0, -0x23c(%rbp)
cvtsi2ssl -0x21c(%rbp), %xmm0
movss %xmm0, -0x238(%rbp)
movq -0x10(%rbp), %rax
movq -0x23c(%rbp), %rcx
movq %rcx, 0x11e0(%rax)
jmp 0xf6f0
cmpl $0x6, -0x224(%rbp)
jl 0xf6ee
cvtsi2ssl -0x220(%rbp), %xmm0
movss %xmm0, -0x244(%rbp)
cvtsi2ssl -0x21c(%rbp), %xmm0
movss %xmm0, -0x240(%rbp)
movq -0x10(%rbp), %rdi
addq $0x11e8, %rdi           # imm = 0x11E8
movl -0x224(%rbp), %eax
addl $-0x6, %eax
movl %eax, -0x248(%rbp)
leaq -0x248(%rbp), %rsi
callq 0x10e90
movq %rax, -0x2a8(%rbp)
jmp 0xf6dd
movq -0x2a8(%rbp), %rax
movq -0x244(%rbp), %rcx
movq %rcx, (%rax)
jmp 0xf6f0
jmp 0xf6f2
jmp 0xf7ed
movb $0x1, -0x289(%rbp)
movl $0x10, %edi
callq 0x9420
movq -0x298(%rbp), %rdx
movq %rax, -0x2b0(%rbp)
leaq 0x95c6c(%rip), %rsi     # 0xa5389
leaq -0x288(%rbp), %rdi
callq 0x10fc0
jmp 0xf72b
leaq 0x95c5d(%rip), %rdx     # 0xa538f
leaq -0x268(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x10f70
jmp 0xf747
movq -0x2b0(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x9f20
jmp 0xf75c
movq -0x2b0(%rbp), %rdi
movb $0x0, -0x289(%rbp)
movq 0xd886f(%rip), %rsi     # 0xe7fe0
movq 0xd8858(%rip), %rdx     # 0xe7fd0
callq 0x9ed0
jmp 0xf867
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0xf7d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0xf7c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x9530
leaq -0x288(%rbp), %rdi
callq 0x9530
testb $0x1, -0x289(%rbp)
jne 0xf7df
jmp 0xf7eb
movq -0x2b0(%rbp), %rdi
callq 0x9600
jmp 0xf84f
jmp 0xf7ef
movl -0x220(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x220(%rbp)
jmp 0xf558
jmp 0xf805
movl -0x21c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x21c(%rbp)
jmp 0xf541
movq -0x10(%rbp), %rdi
callq 0xf420
jmp 0xf824
movq -0x10(%rbp), %rdi
callq 0xf870
jmp 0xf82f
movq -0x10(%rbp), %rdi
callq 0xfa00
jmp 0xf83a
leaq -0x218(%rbp), %rdi
callq 0x91d0
addq $0x2b0, %rsp            # imm = 0x2B0
popq %rbp
retq
leaq -0x218(%rbp), %rdi
callq 0x91d0
movq -0x230(%rbp), %rdi
callq 0x9f50
nopw (%rax,%rax)