MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / PickupCollision

Function PickupCollision

TombEngine/Game/pickup/pickup.cpp:397–788  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

395}
396
397void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
398{
399 auto* item = &g_Level.Items[itemNumber];
400
401 auto prevOrient = item->Pose.Orientation;
402
403 if (item->Status == ITEM_INVISIBLE)
404 return;
405
406 short triggerFlags = item->TriggerFlags & 0x3F;
407 if (triggerFlags == 5 || triggerFlags == 10)
408 return;
409
410 auto lara = GetLaraInfo(laraItem);
411
412 if (item->ObjectNumber == ID_FLARE_ITEM && item->Active && lara->Control.Weapon.GunType == LaraWeaponType::Flare)
413 return;
414
415 g_Hud.InteractionHighlighter.Test(*laraItem, *item);
416
417 item->Pose.Orientation.y = laraItem->Pose.Orientation.y;
418 item->Pose.Orientation.z = 0.0f;
419
420 if (lara->Control.WaterStatus != WaterStatus::Dry &&
421 lara->Control.WaterStatus != WaterStatus::Wade)
422 {
423 if (lara->Control.WaterStatus == WaterStatus::Underwater)
424 {
425 item->Pose.Orientation.x = -ANGLE(25.0f);
426
427 if (IsHeld(In::Action) &&
428 item->ObjectNumber != ID_BURNING_TORCH_ITEM &&
429 laraItem->Animation.ActiveState == LS_UNDERWATER_IDLE &&
430 lara->Control.HandStatus == HandStatus::Free &&
431 TestLaraPosition(PickUpBoundsUW, item, laraItem) || lara->Control.IsMoving && lara->Context.InteractedItem == itemNumber)
432 {
433 if (TestLaraPosition(PickUpBoundsUW, item, laraItem))
434 {
435 if (MoveLaraPosition(PickUpPositionUW, item, laraItem))
436 {
437 if (item->ObjectNumber == ID_FLARE_ITEM && item->Active)
438 {
439 laraItem->Animation.AnimNumber = LA_UNDERWATER_PICKUP_FLARE;
440 laraItem->Animation.ActiveState = LS_PICKUP_FLARE;
441 laraItem->Animation.Velocity.y = 0;
442 }
443 else
444 {
445 laraItem->Animation.AnimNumber = LA_UNDERWATER_PICKUP;
446 laraItem->Animation.ActiveState = LS_PICKUP;
447 }
448
449 laraItem->Animation.TargetState = LS_UNDERWATER_IDLE;
450 laraItem->Animation.FrameNumber = 0;
451 lara->Control.IsMoving = false;
452 lara->Control.HandStatus = HandStatus::Busy;
453 }
454

Callers

nothing calls this directly

Calls 15

ANGLEFunction · 0.85
IsHeldFunction · 0.85
TestLaraPositionFunction · 0.85
MoveLaraPositionFunction · 0.85
IsClickedFunction · 0.85
SayNoFunction · 0.85
AddActiveItemFunction · 0.85
AnimateItemFunction · 0.85
FindPlinthFunction · 0.85
SetAnimationFunction · 0.85
AlignLaraPositionFunction · 0.85
ResetPlayerFlexFunction · 0.85

Tested by

no test coverage detected