// File: blak3mill3r[P]mouser/src/mouser.cpp
// Function: Mouser::physics_handler()
void Mouser::physics_handler() {
  while (_running) {
    vx += fx;
    vy += fy;
    vx *= (brakes ? FRICTION_BRAKES : FRICTION);
    vy *= (brakes ? FRICTION_BRAKES : FRICTION);
    deltax += vx;
    deltay += vy;
    int mx=0, my=0;
    if(abs(deltax) >= 1.0) mx = int(deltax);
    if(abs(deltay) >= 1.0) my = int(deltay);
    if(mx != 0) deltax -= mx;
    if(my != 0) deltay -= my;
    if(mx != 0 || my != 0) _xtest_action_channel.push(make_pair(mx,my));

    boost::this_fiber::sleep_for(std::chrono::milliseconds(8));
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
testb $0x1, 0x12c(%rax)
je 0xc91d
movq -0x50(%rbp), %rax
movss 0x130(%rax), %xmm0
addss 0x138(%rax), %xmm0
movss %xmm0, 0x138(%rax)
movss 0x134(%rax), %xmm0
addss 0x13c(%rax), %xmm0
movss %xmm0, 0x13c(%rax)
testb $0x1, 0x154(%rax)
je 0xc735
movq -0x50(%rbp), %rax
movss 0x150(%rax), %xmm0
movss %xmm0, -0x54(%rbp)
jmp 0xc746
movq -0x50(%rbp), %rax
movss 0x14c(%rax), %xmm0
movss %xmm0, -0x54(%rbp)
movq -0x50(%rbp), %rax
movss -0x54(%rbp), %xmm0
mulss 0x138(%rax), %xmm0
movss %xmm0, 0x138(%rax)
testb $0x1, 0x154(%rax)
je 0xc77b
movq -0x50(%rbp), %rax
movss 0x150(%rax), %xmm0
movss %xmm0, -0x58(%rbp)
jmp 0xc78c
movq -0x50(%rbp), %rax
movss 0x14c(%rax), %xmm0
movss %xmm0, -0x58(%rbp)
movq -0x50(%rbp), %rax
movss -0x58(%rbp), %xmm0
mulss 0x13c(%rax), %xmm0
movss %xmm0, 0x13c(%rax)
movss 0x138(%rax), %xmm0
addss 0x140(%rax), %xmm0
movss %xmm0, 0x140(%rax)
movss 0x13c(%rax), %xmm0
addss 0x144(%rax), %xmm0
movss %xmm0, 0x144(%rax)
movl $0x0, -0xc(%rbp)
movl $0x0, -0x10(%rbp)
movss 0x140(%rax), %xmm0
callq 0x12f10
cvtss2sd %xmm0, %xmm0
movsd 0xe0cc(%rip), %xmm1     # 0x1a8c8
ucomisd %xmm1, %xmm0
jb 0xc811
movq -0x50(%rbp), %rax
cvttss2si 0x140(%rax), %eax
movl %eax, -0xc(%rbp)
movq -0x50(%rbp), %rax
movss 0x144(%rax), %xmm0
callq 0x12f10
cvtss2sd %xmm0, %xmm0
movsd 0xe09a(%rip), %xmm1     # 0x1a8c8
ucomisd %xmm1, %xmm0
jb 0xc843
movq -0x50(%rbp), %rax
cvttss2si 0x144(%rax), %eax
movl %eax, -0x10(%rbp)
cmpl $0x0, -0xc(%rbp)
je 0xc866
movq -0x50(%rbp), %rax
cvtsi2ssl -0xc(%rbp), %xmm1
movss 0x140(%rax), %xmm0
subss %xmm1, %xmm0
movss %xmm0, 0x140(%rax)
cmpl $0x0, -0x10(%rbp)
je 0xc889
movq -0x50(%rbp), %rax
cvtsi2ssl -0x10(%rbp), %xmm1
movss 0x144(%rax), %xmm0
subss %xmm1, %xmm0
movss %xmm0, 0x144(%rax)
cmpl $0x0, -0xc(%rbp)
jne 0xc895
cmpl $0x0, -0x10(%rbp)
je 0xc8fb
movq -0x50(%rbp), %rax
addq $0xd0, %rax
movq %rax, -0x68(%rbp)
leaq -0xc(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x12f30
movq %rax, -0x28(%rbp)
leaq -0x20(%rbp), %rdi
movq %rdi, -0x60(%rbp)
leaq -0x28(%rbp), %rsi
movl $0x1, %edx
callq 0x12f60
movq -0x68(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0xe590
jmp 0xc8d9
leaq -0x20(%rbp), %rdi
callq 0xef60
jmp 0xc8fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xef60
jmp 0xc923
movl $0x8, -0x44(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x130a0
leaq -0x40(%rbp), %rdi
callq 0x12fd0
jmp 0xc6d4
addq $0x70, %rsp
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x44d0
nopl (%rax)