// File: /workspace/github_cpp_makefile_star2_O1/wrighteagle2d[P]wrighteaglebase/Debug/../src/Formation.cpp
// Function: FormationBase::GetExpectedGoaliePos(Vector const&, double, Vector const&, int)
Vector FormationBase::GetExpectedGoaliePos(const Vector &ball_pos, double run,
                                           const Vector &goalie_pos,
                                           int cycle_delay) {
  Vector p[2];
  p[0] = Vector(ServerParam::instance().PITCH_LENGTH / 2.0,
                -ServerParam::instance().goalWidth() / 2.0 + 0.1); // top
  p[1] = Vector(ServerParam::instance().PITCH_LENGTH / 2.0,
                ServerParam::instance().goalWidth() / 2.0 - 0.1); // down

  double tmp, distg;
  distg = ball_pos.Dist(goalie_pos);
  AngleDeg mid;
  mid = GetNormalizeAngleDeg(
      ((p[1] - ball_pos).Dir() + (p[0] - ball_pos).Dir()) / 2); //取角平分线
  tmp = ball_pos.Dist(Vector(ServerParam::instance().PITCH_LENGTH / 2.0, 0.0)) -
        2.0;
  Vector tgPos, jgPos;
  tgPos = ball_pos +
          Polar2Vector(distg, mid); // 估计守门员可能的位置,守门员向角平分线运动
  if (tgPos.Dist(ball_pos) > tmp) {
    tgPos = ball_pos + (tgPos - ball_pos).SetLength(tmp); // 调整到球场内
  }
  if (goalie_pos.Dist(tgPos) < run + cycle_delay * 0.8) {
    jgPos = tgPos; // 守门员向tgpos尽可能运动
  } else {
    jgPos = goalie_pos +
            Polar2Vector(run + cycle_delay * 0.8, (tgPos - goalie_pos).Dir());
  }
  return jgPos;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movl %ecx, %r14d
movq %rdx, %rbx
movsd %xmm0, -0x78(%rbp)
movq %rsi, %r15
callq 0x4a75c
leaq 0x48b0b(%rip), %rax     # 0x6df18
movsd 0x46463(%rip), %xmm1    # 0x6b878
movsd (%rax), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
callq 0x4a75c
movsd 0x3008(%rax), %xmm0
movsd 0x46441(%rip), %xmm1    # 0x6b878
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
callq 0x4a75c
callq 0x4a75c
movsd 0x46426(%rip), %xmm2    # 0x6b878
mulsd 0x3008(%rax), %xmm2
addsd 0x47176(%rip), %xmm2    # 0x6c5d8
movsd (%r15), %xmm0
movsd 0x8(%r15), %xmm1
subsd (%rbx), %xmm0
subsd 0x8(%rbx), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm5, %xmm5
ucomisd %xmm5, %xmm0
jb 0x25492
sqrtsd %xmm0, %xmm0
jmp 0x254a5
movapd %xmm2, -0x70(%rbp)
callq 0x93c0
movapd -0x70(%rbp), %xmm2
xorpd %xmm5, %xmm5
movapd %xmm0, -0x40(%rbp)
movsd 0x4711e(%rip), %xmm6    # 0x6c5d0
subsd -0x60(%rbp), %xmm6
movsd -0x50(%rbp), %xmm1
subsd (%r15), %xmm1
subsd 0x8(%r15), %xmm2
movapd 0x45b41(%rip), %xmm3    # 0x6b010
movapd %xmm1, %xmm0
andpd %xmm3, %xmm0
movsd 0x45b61(%rip), %xmm4    # 0x6b040
ucomisd %xmm0, %xmm4
jbe 0x254f3
movapd %xmm2, %xmm0
andpd %xmm3, %xmm0
ucomisd %xmm0, %xmm4
ja 0x2552a
movapd %xmm2, %xmm0
movapd %xmm6, -0x60(%rbp)
callq 0x90d0
movapd -0x60(%rbp), %xmm6
movsd 0x45b32(%rip), %xmm4    # 0x6b040
movapd 0x45afa(%rip), %xmm3    # 0x6b010
movapd %xmm0, %xmm5
mulsd 0x45b26(%rip), %xmm5    # 0x6b048
divsd 0x45b26(%rip), %xmm5    # 0x6b050
movsd -0x50(%rbp), %xmm1
subsd (%r15), %xmm1
subsd 0x8(%r15), %xmm6
movapd %xmm1, %xmm0
andpd %xmm3, %xmm0
ucomisd %xmm0, %xmm4
jbe 0x2555a
movapd %xmm6, %xmm2
andpd %xmm3, %xmm2
xorpd %xmm0, %xmm0
ucomisd %xmm2, %xmm4
ja 0x2557d
movapd %xmm6, %xmm0
movsd %xmm5, -0x60(%rbp)
callq 0x90d0
movsd -0x60(%rbp), %xmm5
mulsd 0x45ad3(%rip), %xmm0    # 0x6b048
divsd 0x45ad3(%rip), %xmm0    # 0x6b050
addsd %xmm0, %xmm5
mulsd 0x462ef(%rip), %xmm5    # 0x6b878
movsd 0x45acf(%rip), %xmm0    # 0x6b060
ucomisd %xmm5, %xmm0
jbe 0x255ab
movsd 0x45ad1(%rip), %xmm1    # 0x6b070
addsd %xmm1, %xmm5
ucomisd %xmm5, %xmm0
ja 0x2559f
jmp 0x255cf
ucomisd 0x45a95(%rip), %xmm5    # 0x6b048
jb 0x255cf
movsd 0x45aab(%rip), %xmm0    # 0x6b068
movsd 0x45a83(%rip), %xmm1    # 0x6b048
addsd %xmm0, %xmm5
ucomisd %xmm1, %xmm5
jae 0x255c5
movsd %xmm5, -0x60(%rbp)
callq 0x4a75c
movsd (%r15), %xmm0
movsd 0x8(%r15), %xmm1
subsd -0x50(%rbp), %xmm0
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x25605
sqrtsd %xmm0, %xmm0
jmp 0x2560a
callq 0x93c0
addsd 0x45a6e(%rip), %xmm0    # 0x6b080
movsd %xmm0, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
mulsd 0x45a2c(%rip), %xmm0    # 0x6b050
divsd 0x45a1c(%rip), %xmm0    # 0x6b048
leaq -0x88(%rbp), %r12
leaq -0x80(%rbp), %r13
movq %r12, %rdi
movq %r13, %rsi
callq 0x92d0
movsd (%r13), %xmm4
movapd -0x40(%rbp), %xmm3
mulsd %xmm3, %xmm4
mulsd (%r12), %xmm3
movsd (%r15), %xmm1
movsd 0x8(%r15), %xmm2
addsd %xmm1, %xmm4
addsd %xmm2, %xmm3
movapd %xmm4, %xmm0
subsd %xmm1, %xmm0
movapd %xmm3, -0x40(%rbp)
movapd %xmm3, %xmm1
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x459fd(%rip), %xmm0    # 0x6b090
jb 0x2569b
sqrtsd %xmm0, %xmm0
jmp 0x256aa
movapd %xmm4, -0x50(%rbp)
callq 0x93c0
movapd -0x50(%rbp), %xmm4
ucomisd -0x70(%rbp), %xmm0
movapd -0x40(%rbp), %xmm1
jbe 0x25765
subsd (%r15), %xmm4
subsd 0x8(%r15), %xmm1
movapd %xmm1, %xmm0
mulsd %xmm1, %xmm0
movapd %xmm4, %xmm2
mulsd %xmm4, %xmm2
addsd %xmm0, %xmm2
xorpd %xmm3, %xmm3
ucomisd %xmm3, %xmm2
movapd %xmm1, -0x40(%rbp)
movapd %xmm4, -0x50(%rbp)
jb 0x256f6
xorps %xmm0, %xmm0
sqrtsd %xmm2, %xmm0
jmp 0x2570d
movapd %xmm2, %xmm0
movsd %xmm2, -0x60(%rbp)
callq 0x93c0
xorpd %xmm3, %xmm3
movsd -0x60(%rbp), %xmm2
ucomisd %xmm3, %xmm0
xorpd %xmm0, %xmm0
jbe 0x25752
ucomisd %xmm0, %xmm2
jb 0x25726
xorps %xmm0, %xmm0
sqrtsd %xmm2, %xmm0
jmp 0x2572f
movapd %xmm2, %xmm0
callq 0x93c0
movapd -0x40(%rbp), %xmm1
movapd -0x50(%rbp), %xmm2
movsd -0x70(%rbp), %xmm3
divsd %xmm0, %xmm3
mulsd %xmm3, %xmm2
mulsd %xmm3, %xmm1
movapd %xmm2, %xmm3
movapd %xmm1, %xmm0
addsd (%r15), %xmm3
addsd 0x8(%r15), %xmm0
movapd %xmm3, %xmm4
movapd %xmm0, %xmm1
movsd (%rbx), %xmm0
movsd 0x8(%rbx), %xmm2
subsd %xmm4, %xmm0
subsd %xmm1, %xmm2
mulsd %xmm2, %xmm2
mulsd %xmm0, %xmm0
addsd %xmm2, %xmm0
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm0
jb 0x25792
sqrtsd %xmm0, %xmm0
jmp 0x257ab
movapd %xmm1, -0x40(%rbp)
movapd %xmm4, -0x50(%rbp)
callq 0x93c0
movapd -0x50(%rbp), %xmm4
movapd -0x40(%rbp), %xmm1
movapd 0x4585d(%rip), %xmm2    # 0x6b010
movsd 0x45885(%rip), %xmm3    # 0x6b040
xorps %xmm5, %xmm5
cvtsi2sd %r14d, %xmm5
mulsd 0x46e15(%rip), %xmm5    # 0x6c5e0
addsd -0x78(%rbp), %xmm5
ucomisd %xmm0, %xmm5
ja 0x25863
movsd %xmm5, -0x40(%rbp)
subsd (%rbx), %xmm4
subsd 0x8(%rbx), %xmm1
movapd %xmm4, %xmm0
andpd %xmm2, %xmm0
ucomisd %xmm0, %xmm3
jbe 0x25804
andpd %xmm1, %xmm2
xorpd %xmm0, %xmm0
ucomisd %xmm2, %xmm3
ja 0x25829
movapd %xmm1, %xmm0
movapd %xmm4, %xmm1
callq 0x90d0
mulsd 0x4582f(%rip), %xmm0    # 0x6b048
movsd 0x4582f(%rip), %xmm1    # 0x6b050
divsd %xmm1, %xmm0
mulsd %xmm1, %xmm0
divsd 0x45817(%rip), %xmm0    # 0x6b048
leaq -0x88(%rbp), %r14
leaq -0x80(%rbp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x92d0
movsd (%r15), %xmm4
movsd -0x40(%rbp), %xmm1
mulsd %xmm1, %xmm4
mulsd (%r14), %xmm1
addsd (%rbx), %xmm4
addsd 0x8(%rbx), %xmm1
movapd %xmm4, %xmm0
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq