// File: /workspace/github_cpp_makefile_star2_O2/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rdi, %rbx
callq 0xb43c
leaq -0x288(%rbp), %r14
pushq $0x8
popq %rdx
movq %r14, %rdi
movq %rbx, -0x40(%rbp)
movq %rbx, %rsi
callq 0x8d80
leaq 0xcd92e(%rip), %rax     # 0xd8f48
movq %rax, -0x38(%rbp)
xorl %ebx, %ebx
leaq -0x30(%rbp), %r15
cmpq $0x1b, %rbx
je 0xb6f3
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x2c(%rbp)
movq -0x38(%rbp), %r12
xorl %r13d, %r13d
cmpq $0x15, %r13
je 0xb6e6
movq %r14, %rdi
movq %r15, %rsi
callq 0x84e0
movq -0x288(%rbp), %rax
movq -0x18(%rax), %rax
testb $0x5, -0x268(%rbp,%rax)
jne 0xb734
movl -0x30(%rbp), %eax
cmpl $0x4, %eax
jg 0xb690
movl %eax, (%r12)
movl %eax, 0x8dc(%r12)
andl $-0x2, %eax
cmpl $0x2, %eax
jne 0xb6da
incl 0xcea72(%rip)           # 0xda100
jmp 0xb6da
cmpl $0x5, %eax
jne 0xb6b1
cvtsi2ss %r13d, %xmm0
movss %xmm0, 0xcea7e(%rip)    # 0xda120
movss -0x2c(%rbp), %xmm0
movss %xmm0, 0xcea75(%rip)    # 0xda124
jmp 0xb6da
addl $-0x6, %eax
movl %eax, -0x60(%rbp)
leaq 0xcea6a(%rip), %rdi     # 0xda128
leaq -0x60(%rbp), %rsi
callq 0xc4fe
cvtsi2ss %r13d, %xmm0
movss %xmm0, (%rax)
movss -0x2c(%rbp), %xmm0
movss %xmm0, 0x4(%rax)
incq %r13
addq $0x6c, %r12
jmp 0xb63e
incq %rbx
addq $0x4, -0x38(%rbp)
jmp 0xb624
leaq 0xcd846(%rip), %rbx     # 0xd8f40
movq %rbx, %rdi
callq 0xb558
movq %rbx, %rdi
callq 0xb7dc
leaq 0xcd82f(%rip), %rdi     # 0xd8f40
callq 0xb912
leaq -0x288(%rbp), %rdi
callq 0x81b0
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x83f0
movq %rax, %r14
leaq 0x8cd53(%rip), %rsi     # 0x98499
leaq -0x80(%rbp), %rdi
movq -0x40(%rbp), %rdx
callq 0xc578
leaq 0x8cd45(%rip), %rdx     # 0x9849f
leaq -0x60(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xc54f
movb $0x1, %r15b
leaq -0x60(%rbp), %rsi
movq %r14, %rdi
callq 0x8ea0
xorl %r15d, %r15d
movq 0xca860(%rip), %rsi     # 0xd5fe0
movq 0xca849(%rip), %rdx     # 0xd5fd0
movq %r14, %rdi
callq 0x8e60
jmp 0xb7c4
jmp 0xb7c4
movq %rax, %rbx
leaq -0x60(%rbp), %rdi
callq 0x83a0
jmp 0xb7a7
movq %rax, %rbx
movb $0x1, %r15b
leaq -0x80(%rbp), %rdi
callq 0x83a0
testb %r15b, %r15b
jne 0xb7ba
jmp 0xb7c7
movq %rax, %rbx
movq %r14, %rdi
callq 0x85b0
jmp 0xb7c7
movq %rax, %rbx
leaq -0x288(%rbp), %rdi
callq 0x81b0
movq %rbx, %rdi
callq 0x8ed0
nop