| 285 | } |
| 286 | |
| 287 | void DoPickup(ItemInfo* laraItem) |
| 288 | { |
| 289 | auto* lara = GetLaraInfo(laraItem); |
| 290 | |
| 291 | if (lara->Context.InteractedItem == NO_VALUE) |
| 292 | return; |
| 293 | |
| 294 | short pickupItemNumber = lara->Context.InteractedItem; |
| 295 | auto* pickupItem = &g_Level.Items[pickupItemNumber]; |
| 296 | |
| 297 | if (!Objects[pickupItem->ObjectNumber].isPickup) |
| 298 | return; |
| 299 | |
| 300 | auto prevOrient = pickupItem->Pose.Orientation; |
| 301 | |
| 302 | if (pickupItem->ObjectNumber == ID_BURNING_TORCH_ITEM) |
| 303 | { |
| 304 | PickedUpObject(ID_BURNING_TORCH_ITEM); |
| 305 | g_Hud.PickupSummary.AddDisplayPickup(ID_BURNING_TORCH_ITEM, pickupItem->Pose.Position.ToVector3()); |
| 306 | |
| 307 | GetFlameTorch(); |
| 308 | lara->Torch.IsLit = (pickupItem->ItemFlags[3] & 1); |
| 309 | lara->Torch.Fade = 0; |
| 310 | lara->Torch.CurrentColor = lara->Torch.NextColor = pickupItem->Effect.PrimaryEffectColor; |
| 311 | |
| 312 | KillItem(pickupItemNumber); |
| 313 | pickupItem->Pose.Orientation = prevOrient; |
| 314 | lara->Context.InteractedItem = NO_VALUE; |
| 315 | return; |
| 316 | } |
| 317 | else if (pickupItem->ObjectNumber == ID_FLARE_ITEM && pickupItem->Active) |
| 318 | { |
| 319 | lara->Control.Weapon.RequestGunType = LaraWeaponType::Flare; |
| 320 | lara->Control.Weapon.GunType = LaraWeaponType::Flare; |
| 321 | InitializeNewWeapon(*laraItem); |
| 322 | lara->Control.HandStatus = HandStatus::Special; |
| 323 | lara->Flare.Life = int(pickupItem->Data) & 0x7FFF; |
| 324 | KillItem(pickupItemNumber); |
| 325 | |
| 326 | if (laraItem->Animation.ActiveState == LA_UNDERWATER_PICKUP_FLARE) |
| 327 | { |
| 328 | DrawFlareMeshes(*laraItem); |
| 329 | pickupItem->Pose.Orientation = prevOrient; |
| 330 | } |
| 331 | } |
| 332 | else |
| 333 | { |
| 334 | // Dirty, but it uses the same state. |
| 335 | if (laraItem->Animation.AnimNumber == LA_UNDERWATER_PICKUP) |
| 336 | { |
| 337 | if (g_GameFlow->IsMassPickupEnabled()) |
| 338 | { |
| 339 | CollectMultiplePickups(lara->Context.InteractedItem); |
| 340 | lara->Context.InteractedItem = NO_VALUE; |
| 341 | return; |
| 342 | } |
| 343 | |
| 344 | PickedUpObject(*pickupItem); |
no test coverage detected