| 201 | } |
| 202 | |
| 203 | void CUIPdaWnd::MouseMovement(float x, float y) |
| 204 | { |
| 205 | CPda* pda = Actor()->GetPDA(); |
| 206 | if (!pda) |
| 207 | return; |
| 208 | |
| 209 | if (pda->ThumbAnimsAllowed()) |
| 210 | { |
| 211 | if (!pda->IsZoomed() || pda->IsPending()) |
| 212 | return; |
| 213 | |
| 214 | static u32 DeltaUpdTG{}, SavedClickTime{}; |
| 215 | |
| 216 | if (Device.dwTimeGlobal < DeltaUpdTG) |
| 217 | return; |
| 218 | |
| 219 | const xr_string last_thumb_anim_name = pda->thumb_anim_name; |
| 220 | |
| 221 | constexpr float PDA_CURSOR_MOVE_TREASURE = 2.f; |
| 222 | if (std::abs(x) < PDA_CURSOR_MOVE_TREASURE && std::abs(y) < PDA_CURSOR_MOVE_TREASURE) |
| 223 | { |
| 224 | pda->thumb_anim_name = (pda->thumb_anim_name.empty() && SavedClickTime != m_dwLastClickTime) ? "_click" : ""; |
| 225 | } |
| 226 | else |
| 227 | { |
| 228 | const float gyp = std::sqrt(x * x + y * y); |
| 229 | float angle = std::asin(std::clamp(y / gyp, -1.0f, 1.0f)); |
| 230 | if (negative(x)) |
| 231 | angle = M_PI - angle; |
| 232 | if (negative(angle)) |
| 233 | angle = angle + 2.0f * M_PI; |
| 234 | |
| 235 | if (angle >= 0.393f && angle < 1.18f) |
| 236 | pda->thumb_anim_name = "_down_right"; |
| 237 | else if (angle >= 1.18f && angle < 1.96f) |
| 238 | pda->thumb_anim_name = "_down"; |
| 239 | else if (angle >= 1.96f && angle < 2.74f) |
| 240 | pda->thumb_anim_name = "_down_left"; |
| 241 | else if (angle >= 2.74f && angle < 3.53f) |
| 242 | pda->thumb_anim_name = "_left"; |
| 243 | else if (angle >= 3.53f && angle < 4.32f) |
| 244 | pda->thumb_anim_name = "_up_left"; |
| 245 | else if (angle >= 4.32f && angle < 5.10f) |
| 246 | pda->thumb_anim_name = "_up"; |
| 247 | else if (angle >= 5.10f && angle < 5.89f) |
| 248 | pda->thumb_anim_name = "_up_right"; |
| 249 | else |
| 250 | pda->thumb_anim_name = "_right"; |
| 251 | } |
| 252 | |
| 253 | if (last_thumb_anim_name == pda->thumb_anim_name) |
| 254 | return; |
| 255 | |
| 256 | DeltaUpdTG = Device.dwTimeGlobal + 117; |
| 257 | SavedClickTime = m_dwLastClickTime; |
| 258 | |
| 259 | pda->PlayAnimIdle(); |
| 260 | return; |
no test coverage detected