// File: /workspace/github_cpp_makefile_star2_O1/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, %r14
callq 0xb96c
leaq -0x288(%rbp), %rbx
movq %rbx, %rdi
movq %r14, -0x38(%rbp)
movq %r14, %rsi
movl $0x8, %edx
callq 0x8d50
leaq 0xce37c(%rip), %r14     # 0xd9f28
xorl %r12d, %r12d
leaq -0x30(%rbp), %r15
xorps %xmm0, %xmm0
cvtsi2ss %r12d, %xmm0
movss %xmm0, -0x2c(%rbp)
movq %r14, -0x40(%rbp)
xorl %r13d, %r13d
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movq -0x288(%rbp), %rax
movq -0x18(%rax), %rax
testb $0x5, -0x268(%rbp,%rax)
jne 0xbcc4
movl -0x30(%rbp), %eax
cmpl $0x4, %eax
jg 0xbc0d
movl %eax, (%r14)
movl %eax, 0x8dc(%r14)
andl $-0x2, %eax
cmpl $0x2, %eax
jne 0xbc5d
incl 0xcf4d5(%rip)           # 0xdb0e0
jmp 0xbc5d
cmpl $0x5, %eax
jne 0xbc31
xorps %xmm0, %xmm0
cvtsi2ss %r13d, %xmm0
movss %xmm0, 0xcf4de(%rip)    # 0xdb100
movss -0x2c(%rbp), %xmm0
movss %xmm0, 0xcf4d5(%rip)    # 0xdb104
jmp 0xbc5d
addl $-0x6, %eax
movl %eax, -0x60(%rbp)
leaq 0xcf4ca(%rip), %rdi     # 0xdb108
leaq -0x60(%rbp), %rsi
callq 0xcbce
xorps %xmm0, %xmm0
cvtsi2ss %r13d, %xmm0
movss %xmm0, (%rax)
movss -0x2c(%rbp), %xmm0
movss %xmm0, 0x4(%rax)
incq %r13
addq $0x6c, %r14
cmpq $0x15, %r13
jne 0xbbc7
incq %r12
movq -0x40(%rbp), %r14
addq $0x4, %r14
cmpq $0x1b, %r12
jne 0xbbb3
leaq 0xce296(%rip), %rbx     # 0xd9f20
movq %rbx, %rdi
callq 0xbae8
movq %rbx, %rdi
callq 0xbdcc
leaq 0xce27f(%rip), %rdi     # 0xd9f20
callq 0xbf44
leaq -0x288(%rbp), %rdi
callq 0x81a0
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x83e0
movq %rax, %rbx
leaq 0x8d7f1(%rip), %rsi     # 0x994c9
leaq -0x80(%rbp), %rdi
movq -0x38(%rbp), %rdx
callq 0xcc35
leaq 0x8d7e3(%rip), %rsi     # 0x994cf
leaq -0x80(%rbp), %rdi
callq 0x8fb0
leaq -0x50(%rbp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xbd17
movups (%rcx), %xmm0
movups %xmm0, (%r12)
jmp 0xbd22
movq %rdx, -0x60(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x50(%rbp)
movq 0x8(%rax), %rdx
leaq -0x60(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movb $0x1, %r15b
movq %rbx, %rdi
callq 0x8e70
xorl %r15d, %r15d
movq 0xcb28e(%rip), %rsi     # 0xd6fe0
movq 0xcb277(%rip), %rdx     # 0xd6fd0
movq %rbx, %rdi
callq 0x8e30
jmp 0xbdb5
jmp 0xbdb5
movq %rax, %r14
movq -0x60(%rbp), %rdi
cmpq %r12, %rdi
je 0xbd85
movq -0x50(%rbp), %rsi
incq %rsi
callq 0x8880
jmp 0xbd85
movq %rax, %r14
movb $0x1, %r15b
leaq -0x70(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbda6
movq -0x70(%rbp), %rsi
incq %rsi
callq 0x8880
jmp 0xbda6
movq %rax, %r14
movb $0x1, %r15b
testb %r15b, %r15b
je 0xbdb8
movq %rbx, %rdi
callq 0x85c0
jmp 0xbdb8
movq %rax, %r14
leaq -0x288(%rbp), %rdi
callq 0x81a0
movq %r14, %rdi
callq 0x8ea0