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

Function LaraSurfaceCollision

TombEngine/Game/Lara/lara_collide.cpp:466–502  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

464}
465
466void LaraSurfaceCollision(ItemInfo* item, CollisionInfo* coll)
467{
468 const auto& player = GetLaraInfo(*item);
469
470 coll->Setup.ForwardAngle = player.Control.MoveAngle;
471
472 GetCollisionInfo(coll, item, Vector3i(0, LARA_HEIGHT_TREAD, 0));
473 ShiftItem(item, coll);
474
475 if ((coll->CollisionType == CollisionType::Front ||
476 coll->CollisionType == CollisionType::Top ||
477 coll->CollisionType == CollisionType::TopFront ||
478 coll->CollisionType == CollisionType::Clamp) ||
479 coll->Middle.Floor < 0 && coll->Middle.FloorSlope)
480 {
481 item->Animation.Velocity.y = 0;
482 item->Pose.Position = coll->Setup.PrevPosition;
483 }
484 else if (coll->CollisionType == CollisionType::Left)
485 {
486 item->Pose.Orientation.y += ANGLE(5.0f);
487 }
488 else if (coll->CollisionType == CollisionType::Right)
489 {
490 item->Pose.Orientation.y -= ANGLE(5.0f);
491 }
492
493 auto pointColl = GetPointCollision(*item);
494 if ((pointColl.GetFloorHeight() - item->Pose.Position.y) < SWIM_WATER_DEPTH)
495 {
496 TestPlayerWaterStepOut(item, coll);
497 }
498 else if ((pointColl.GetWaterTopHeight() - item->Pose.Position.y) <= -LARA_HEADROOM)
499 {
500 SetLaraSwimDiveAnimation(item);
501 }
502}
503
504void LaraDefaultCollision(ItemInfo* item, CollisionInfo* coll)
505{

Callers 5

lara_col_surface_idleFunction · 0.85

Calls 9

GetCollisionInfoFunction · 0.85
ShiftItemFunction · 0.85
ANGLEFunction · 0.85
GetPointCollisionFunction · 0.85
TestPlayerWaterStepOutFunction · 0.85
SetLaraSwimDiveAnimationFunction · 0.85
GetWaterTopHeightMethod · 0.80
Vector3iClass · 0.70
GetFloorHeightMethod · 0.45

Tested by

no test coverage detected