// File: Jacobious52[P]Tanks/Terrain.cpp
// Function: Terrain::impact(Point<int>, int)
bool Terrain::impact(Point<int> pos, int radius)
{
    int old_pos = _position.y;
    bool hit = false;

    // increment radius destruction in steps for animation
    for (int r = 2; r < radius; r+=2)
    {
        // pause for 0.05 seconds
        Timer timer(0.05, 1);
        while (timer.tick())
        {
            LOOPV(i, this)
            {
                // get the distance and add horrizontal stretch to look nicer
                Point<int> tile_pos = get_child(i)->get_position();
                Point<int> dist = tile_pos - pos;
                if (sqrt(pow(dist.x, 2) + pow(dist.y*2, 2)) < r)
                {
                    if (get_child(i)->tag == TERRAIN_DIRT)
                    {
                        delete get_children()->remove(i--);
                    }
                    hit = true;
                }
            }

            // for screen update for destruction animation
            ConsoleTools::clear_screen();
            _parent->draw();
        }
    }

    if (hit == true)
    {
        ConsoleTools::play_music("boom.wav");
    }

    _position.y = old_pos;

    return hit;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rsi, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
movl 0x1c(%rax), %eax
movl %eax, -0x18(%rbp)
movb $0x0, -0x19(%rbp)
movl $0x2, -0x20(%rbp)
movl -0x20(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xcab5
leaq -0x40(%rbp), %rdi
movsd 0x7956(%rip), %xmm0     # 0x141f0
movl $0x1, %esi
callq 0xccf0
leaq -0x40(%rbp), %rdi
callq 0xe970
movb %al, -0x99(%rbp)
jmp 0xc8b5
movb -0x99(%rbp), %al
testb $0x1, %al
jne 0xc8c4
jmp 0xca99
movq $0x0, -0x58(%rbp)
movq -0x98(%rbp), %rdi
movq -0x58(%rbp), %rax
movq %rax, -0xb0(%rbp)
callq 0x10400
movq %rax, -0xa8(%rbp)
jmp 0xc8ec
movq -0xa8(%rbp), %rdi
callq 0x7680
movq %rax, -0xb8(%rbp)
jmp 0xc901
movq -0xb0(%rbp), %rax
movq -0xb8(%rbp), %rcx
cmpq %rcx, %rax
jae 0xca77
movq -0x98(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x10460
movq %rax, -0xc0(%rbp)
jmp 0xc931
movq -0xc0(%rbp), %rdi
callq 0x10660
movq %rax, -0xc8(%rbp)
jmp 0xc946
movq -0xc8(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0xcd30
movq %rax, -0xd0(%rbp)
jmp 0xc967
movq -0xd0(%rbp), %rax
movq %rax, -0x68(%rbp)
cvtsi2sdl -0x68(%rbp), %xmm0
movsd 0x7879(%rip), %xmm1     # 0x141f8
callq 0x45d0
movsd %xmm0, -0xd8(%rbp)
movl -0x64(%rbp), %eax
shll %eax
cvtsi2sd %eax, %xmm0
movsd 0x785b(%rip), %xmm1     # 0x141f8
callq 0x45d0
movaps %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
addsd %xmm1, %xmm0
callq 0x42b0
movaps %xmm0, %xmm1
cvtsi2sdl -0x20(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xca64
movq -0x98(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x10460
movq %rax, -0xe0(%rbp)
jmp 0xc9e1
movq -0xe0(%rbp), %rax
cmpl $0xa, 0x8(%rax)
jne 0xca60
movq -0x98(%rbp), %rdi
callq 0x10400
movq %rax, -0xe8(%rbp)
jmp 0xca03
movq -0xe8(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq %rsi, %rax
decq %rax
movq %rax, -0x58(%rbp)
callq 0x8980
movq %rax, -0xf0(%rbp)
jmp 0xca26
movq -0xf0(%rbp), %rax
cmpq $0x0, %rax
je 0xca47
movq -0xf0(%rbp), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
jmp 0xca45
jmp 0xca47
jmp 0xca60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0xcd70
jmp 0xcab0
movb $0x1, -0x19(%rbp)
jmp 0xca66
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0xc8cc
callq 0x4be0
jmp 0xca7e
movq -0x98(%rbp), %rax
movq 0x28(%rax), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
jmp 0xca94
jmp 0xc8a4
leaq -0x40(%rbp), %rdi
callq 0xcd70
movl -0x20(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x20(%rbp)
jmp 0xc882
jmp 0xcb72
movb -0x19(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0xcb57
leaq -0x89(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x45f0
movq -0xf8(%rbp), %rdx
leaq 0x7627(%rip), %rsi      # 0x1410e
leaq -0x88(%rbp), %rdi
callq 0x4490
jmp 0xcaf5
leaq -0x88(%rbp), %rdi
callq 0x4d20
jmp 0xcb03
leaq -0x88(%rbp), %rdi
callq 0x4200
jmp 0xcb11
leaq -0x89(%rbp), %rdi
callq 0x4400
jmp 0xcb57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xcb49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x4200
jmp 0xcb47
jmp 0xcb49
leaq -0x89(%rbp), %rdi
callq 0x4400
jmp 0xcb72
movq -0x98(%rbp), %rax
movl -0x18(%rbp), %ecx
movl %ecx, 0x1c(%rax)
movb -0x19(%rbp), %al
andb $0x1, %al
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x45e0
movq %rax, %rdi
callq 0x4ec0
nopw %cs:(%rax,%rax)