// File: wrighteagle2d[P]wrighteaglebase/Debug/../src/WorldState.cpp
// Function: WorldStateUpdater::UpdateSelfSense()
void WorldStateUpdater::UpdateSelfSense() {
  SelfState().UpdateNeckDir(PlayerParam::instance().ConvertAngle(
      mpObserver->Sense().GetNeckDir())); //这个即使没有视觉也要更新

  SelfState().UpdateStamina(mpObserver->Sense().GetStamina()); //更新体力
  SelfState().UpdateEffort(mpObserver->Sense().GetEffort());   //更新effort
  SelfState().UpdateCapacity(
      mpObserver->Sense().GetCapacity()); //更新就体力容量

  // update recovery
  double buff = Min(SelfState().GetRecovery() * SelfState().GetStaminaIncMax(),
                    SelfState().GetCapacity());
  buff = ((int)(buff * 100)) / 100.0; //精度设置为0.01 太精确了会影响计算
  if (mpObserver->CurrentTime().T() > 0 &&
      mpObserver->Sense().GetStamina() - buff <
          ServerParam::instance().staminaMax() *
              ServerParam::instance().recoverDecThr()) {
    double recovery =
        SelfState().GetRecovery() - ServerParam::instance().recoverDec();
    if (recovery < ServerParam::instance().recoverMin()) {
      recovery = ServerParam::instance().recoverMin();
    }

    if (mpObserver->CurrentTime().T() % ServerParam::instance().halfTime() ==
            0 &&
        ServerParam::instance().nrNormalHalfs() >= 0 &&
        mpObserver->CurrentTime().T() <
            ServerParam::instance().halfTime() *
                ServerParam::instance().nrNormalHalfs()) {
      recovery = 1.0;
    }

    SelfState().UpdateRecovery(recovery);
  }

  //更新自己的tackleban
  SelfState().UpdateTackleBan(mpObserver->Sense().GetTackleExpires());
  SelfState().UpdateFoulChargedCycle(mpObserver->Sense().GetFoulChargedCycle());

  //更新自己的catchban 暂时没有

  //更新自己的armpoint
  if (mpObserver->Sense().GetArmMovableBan() > 0) {
    SelfState().UpdateArmPoint(mpObserver->Sense().GetArmTargetDir(), 0, 1,
                               mpObserver->Sense().GetArmTargetDist(),
                               mpObserver->Sense().GetArmMovableBan(),
                               mpObserver->Sense().GetArmExpires());
  } else {
    SelfState().UpdateArmPoint(
        mpObserver->Sense().GetArmTargetDir(), SelfState().GetArmPointDelay(),
        SelfState().GetArmPointConf(), mpObserver->Sense().GetArmTargetDist(),
        mpObserver->Sense().GetArmMovableBan(),
        mpObserver->Sense().GetArmExpires());
  }

  //更新自己的FocusOn
  SelfState().UpdateFocusOn(mpObserver->Sense().GetFocusSide(),
                            mpObserver->Sense().GetFocusUnum());

  //更新自己的视角
  SelfState().UpdateViewWidth(mpObserver->Sense().GetViewWidth());

  SelfState().UpdateCardType(mpObserver->Sense().GetCardType());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x28(%rbp)
callq 0xbc740
movq %rax, -0x50(%rbp)
callq 0x798a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcfc0
movq -0x58(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xbcf60
movq -0x50(%rbp), %rdi
xorl %esi, %esi
movsd 0xbe65(%rip), %xmm1     # 0xc1010
callq 0x77f60
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x48(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcfe0
movq -0x48(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x77fd0
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x40(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd000
movq -0x40(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x77ff0
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x38(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd020
movq -0x38(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x78030
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rdi
callq 0x32a80
movq -0x28(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0xbc740
movq %rax, %rdi
callq 0x328b0
movsd -0x30(%rbp), %xmm0
movq -0x28(%rbp), %rdi
mulsd (%rax), %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0xbc740
movq %rax, %rdi
callq 0x12be0
movq %rax, %rsi
leaq -0x18(%rbp), %rdi
callq 0x12a60
movq %rax, %rcx
movq -0x28(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0xc427(%rip), %xmm0     # 0xc16d8
mulsd -0x10(%rbp), %xmm0
cvttsd2si %xmm0, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0xc412(%rip), %xmm1     # 0xc16d8
divsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
movq (%rax), %rdi
callq 0x11a70
movq %rax, %rdi
callq 0x13040
cmpl $0x0, %eax
jle 0xb5465
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcfe0
movsd (%rax), %xmm0
subsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x32930
movsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x32910
movsd -0x68(%rbp), %xmm0
movsd -0x60(%rbp), %xmm1
mulsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb5465
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rdi
callq 0x32a80
movsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x32b70
movsd -0x78(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x32b50
movsd -0x70(%rbp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb53b6
callq 0x855e0
movq %rax, %rdi
callq 0x32b50
movsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x11a70
movq %rax, %rdi
callq 0x13040
movl %eax, -0x7c(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0xbd040
movl %eax, %ecx
movl -0x7c(%rbp), %eax
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0xb544f
callq 0x855e0
movq %rax, %rdi
callq 0xbd060
cmpl $0x0, %eax
jl 0xb544f
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x11a70
movq %rax, %rdi
callq 0x13040
movl %eax, -0x80(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0xbd040
movl %eax, -0x84(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0xbd060
movl -0x84(%rbp), %ecx
movl %eax, %edx
movl -0x80(%rbp), %eax
imull %edx, %ecx
cmpl %ecx, %eax
jge 0xb544f
movsd 0xbbc6(%rip), %xmm0     # 0xc1010
movsd %xmm0, -0x20(%rbp)
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rdi
movsd -0x20(%rbp), %xmm0
callq 0x78010
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x98(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd080
movq -0x98(%rbp), %rdi
movl (%rax), %esi
callq 0x78140
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x90(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0a0
movq -0x90(%rbp), %rdi
movl (%rax), %esi
callq 0x78180
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0c0
cmpl $0x0, (%rax)
jle 0xb55ab
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0xb8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0e0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0xb0(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd100
movq %rax, %rcx
movq -0x28(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0xa8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0c0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movl (%rcx), %ecx
movl %ecx, -0x9c(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd120
movq -0xb8(%rbp), %rdi
movsd -0xb0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm2
movl -0x9c(%rbp), %edx
movl (%rax), %ecx
xorl %esi, %esi
movsd 0xba6f(%rip), %xmm1     # 0xc1010
callq 0x78090
jmp 0xb5696
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0xe8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0e0
movq -0x28(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0xe0(%rbp)
callq 0xbc740
movq %rax, %rdi
callq 0x7d440
movq -0x28(%rbp), %rdi
movl %eax, -0xd4(%rbp)
callq 0xbc740
movq %rax, %rdi
callq 0x7d460
movq -0x28(%rbp), %rax
movsd %xmm0, -0xd0(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd100
movq %rax, %rcx
movq -0x28(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0xc8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd0c0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movl (%rcx), %ecx
movl %ecx, -0xbc(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd120
movq -0xe8(%rbp), %rdi
movsd -0xe0(%rbp), %xmm0
movl -0xd4(%rbp), %esi
movsd -0xd0(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movl -0xbc(%rbp), %edx
movl (%rax), %ecx
callq 0x78090
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x108(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd140
movq %rax, %rcx
movq -0x28(%rbp), %rax
movb (%rcx), %cl
movb %cl, -0xf9(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd160
movq -0x108(%rbp), %rdi
movq %rax, %rcx
movb -0xf9(%rbp), %al
movl (%rcx), %edx
xorl %ecx, %ecx
movsd 0xb918(%rip), %xmm0     # 0xc1010
movsbl %al, %esi
callq 0x7d4c0
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0xf8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0x6ee50
movq -0xf8(%rbp), %rdi
movl (%rax), %esi
callq 0x7d220
movq -0x28(%rbp), %rdi
callq 0xbc740
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0xf0(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd180
movq -0xf0(%rbp), %rdi
movl (%rax), %esi
callq 0x78050
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
nopw %cs:(%rax,%rax)