// File: KellerMartins[P]PDS2-Pacman/source/game/mapa.cpp
// Function: Mapa::OnUpdate()
void Mapa::OnUpdate(){
	tempoInterp += GetFrameTime()*0.0125;
	for(unsigned int i=0; i<_objetosMapa.size(); i++){
		Object3D* objMapa = _objetosMapa.at(i);

		if(Mapa::GetElementoMapa(objMapa->position.x, objMapa->position.z) == Parede){
			float val = 0;
			int luzR = 0;
			int luzG = 0;
			int luzB = 0;

			std::vector<Enemy*>& inimigos = Enemy::GetEnemies(); 
			for(Enemy* e : inimigos){
				Vector3 pos = {(float)e->GetX(), 0, (float)e->GetY()};
				float distVal = Smoothstep(0.4,0.8,1.0 - Distance(objMapa->position, pos)/4.0);

				Color corInimigo = e->GetColor();
				luzR += corInimigo.r*distVal;
				luzG += corInimigo.g*distVal;
				luzB += corInimigo.b*distVal;
				val += distVal;
			}

			val = Clamp(val, 0, 1);
			luzR = Clamp(luzR, 0, 255);
			luzG = Clamp(luzG, 0, 255);
			luzB = Clamp(luzB, 0, 255);
			Color luz = (Color){(unsigned char)luzR, (unsigned char)luzG, (unsigned char)luzB, 255};

			objMapa->SetColor(Lerp(objMapa->GetColor(), Lerp(BLUE, luz, val), tempoInterp));
		}
		else{
			objMapa->SetColor(Lerp(objMapa->GetColor(), { 255, 211, 0, 255 }, tempoInterp));
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xd0(%rbp)
callq 0x3b476
cvtss2sd %xmm0, %xmm0
movsd 0xd80dd(%rip), %xmm1    # 0xe8888
movsd 0x94b65(%rip), %xmm2    # 0xa5318
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xd80c5(%rip)    # 0xe8888
movl $0x0, -0xc(%rbp)
movq -0xd0(%rbp), %rdi
movl -0xc(%rbp), %eax
movq %rax, -0xd8(%rbp)
addq $0x11c8, %rdi           # imm = 0x11C8
callq 0x11270
movq %rax, %rcx
movq -0xd8(%rbp), %rax
cmpq %rcx, %rax
jae 0x10bb3
movq -0xd0(%rbp), %rdi
addq $0x11c8, %rdi           # imm = 0x11C8
movl -0xc(%rbp), %eax
movl %eax, %esi
callq 0x11290
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cvttss2si 0x10(%rax), %rcx
movl %ecx, %edi
cvttss2si 0x18(%rax), %rax
movl %eax, %esi
callq 0x104d0
cmpl $0x1, %eax
jne 0x10b38
xorps %xmm0, %xmm0
movss %xmm0, -0x1c(%rbp)
movl $0x0, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
movl $0x0, -0x28(%rbp)
callq 0xbc60
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0xcc10
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rdi
callq 0xcaa0
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x11470
testb $0x1, %al
jne 0x10899
jmp 0x10a0b
leaq -0x40(%rbp), %rdi
callq 0x114b0
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc4d0
movss %xmm0, -0x5c(%rbp)
movl $0x0, -0x58(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc4f0
movss %xmm0, -0x54(%rbp)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x68(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x70(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x5c(%rbp), %rax
movq %rax, -0x80(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x88(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movss -0x88(%rbp), %xmm1
movl -0x78(%rbp), %eax
movl %eax, -0x98(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0xa0(%rbp)
movsd -0xa0(%rbp), %xmm2
movss -0x98(%rbp), %xmm3
callq 0xb890
cvtss2sd %xmm0, %xmm1
movsd 0x948e3(%rip), %xmm0    # 0xa5228
divsd %xmm0, %xmm1
movsd 0x947f7(%rip), %xmm0    # 0xa5148
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm2
movss 0x94883(%rip), %xmm0    # 0xa51e4
movss 0x94883(%rip), %xmm1    # 0xa51ec
callq 0xb960
movss %xmm0, -0x60(%rbp)
movq -0x50(%rbp), %rdi
callq 0xc460
movl %eax, -0xa4(%rbp)
movzbl -0xa4(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss -0x60(%rbp), %xmm2
cvtsi2ssl -0x20(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x20(%rbp)
movzbl -0xa3(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss -0x60(%rbp), %xmm2
cvtsi2ssl -0x24(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x24(%rbp)
movzbl -0xa2(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss -0x60(%rbp), %xmm2
cvtsi2ssl -0x28(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x28(%rbp)
movss -0x60(%rbp), %xmm0
addss -0x1c(%rbp), %xmm0
movss %xmm0, -0x1c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x114d0
jmp 0x10883
movss -0x1c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
movsd 0x94729(%rip), %xmm2    # 0xa5148
callq 0xb600
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x1c(%rbp)
cvtsi2sdl -0x20(%rbp), %xmm0
xorps %xmm1, %xmm1
movsd 0x948e3(%rip), %xmm2    # 0xa5320
callq 0xb600
cvttsd2si %xmm0, %eax
movl %eax, -0x20(%rbp)
cvtsi2sdl -0x24(%rbp), %xmm0
xorps %xmm1, %xmm1
movsd 0x948c7(%rip), %xmm2    # 0xa5320
callq 0xb600
cvttsd2si %xmm0, %eax
movl %eax, -0x24(%rbp)
cvtsi2sdl -0x28(%rbp), %xmm0
xorps %xmm1, %xmm1
movsd 0x948ab(%rip), %xmm2    # 0xa5320
callq 0xb600
cvttsd2si %xmm0, %eax
movl %eax, -0x28(%rbp)
movl -0x20(%rbp), %eax
movb %al, -0xa8(%rbp)
movl -0x24(%rbp), %eax
movb %al, -0xa7(%rbp)
movl -0x28(%rbp), %eax
movb %al, -0xa6(%rbp)
movb $-0x1, -0xa5(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x160c0
movl %eax, -0xb0(%rbp)
movb $0x0, -0xb8(%rbp)
movb $0x79, -0xb7(%rbp)
movb $-0xf, -0xb6(%rbp)
movb $-0x1, -0xb5(%rbp)
movl -0xa8(%rbp), %eax
movl %eax, -0xbc(%rbp)
movss -0x1c(%rbp), %xmm0
movl -0xb8(%rbp), %edi
movl -0xbc(%rbp), %esi
callq 0xb780
movl %eax, -0xb4(%rbp)
movsd 0xd7d7f(%rip), %xmm0    # 0xe8888
cvtsd2ss %xmm0, %xmm0
movl -0xb0(%rbp), %edi
movl -0xb4(%rbp), %esi
callq 0xb780
movq -0xe0(%rbp), %rdi
movl %eax, -0xac(%rbp)
movl -0xac(%rbp), %esi
callq 0x16050
jmp 0x10ba3
movq -0x18(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x18(%rbp), %rdi
callq 0x160c0
movl %eax, -0xc4(%rbp)
movb $-0x1, -0xc8(%rbp)
movb $-0x2d, -0xc7(%rbp)
movb $0x0, -0xc6(%rbp)
movb $-0x1, -0xc5(%rbp)
movsd 0xd7d12(%rip), %xmm0    # 0xe8888
cvtsd2ss %xmm0, %xmm0
movl -0xc4(%rbp), %edi
movl -0xc8(%rbp), %esi
callq 0xb780
movq -0xe8(%rbp), %rdi
movl %eax, -0xc0(%rbp)
movl -0xc0(%rbp), %esi
callq 0x16050
jmp 0x10ba5
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x107ca
addq $0xf0, %rsp
popq %rbp
retq
nopl (%rax)