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

Function SpeedboatAnimation

TombEngine/Objects/TR2/Vehicles/speedboat.cpp:695–775  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

693 }
694
695 void SpeedboatAnimation(ItemInfo* speedboatItem, ItemInfo* laraItem, int collide)
696 {
697 auto* speedboat = GetSpeedboatInfo(speedboatItem);
698
699 if (laraItem->HitPoints <= 0)
700 {
701 if (laraItem->Animation.ActiveState != SPEEDBOAT_STATE_DEATH)
702 {
703 SetAnimation(laraItem, ID_SPEEDBOAT_LARA_ANIMS, SPEEDBOAT_ANIM_DEATH);
704 }
705 }
706 else if (speedboatItem->Pose.Position.y < speedboat->Water - CLICK(0.5f) && speedboatItem->Animation.Velocity.y > 0)
707 {
708 if (laraItem->Animation.ActiveState != SPEEDBOAT_STATE_FALL)
709 {
710 SetAnimation(laraItem, ID_SPEEDBOAT_LARA_ANIMS, SPEEDBOAT_ANIM_LEAP_START);
711 }
712 }
713 else if (collide)
714 {
715 if (laraItem->Animation.TargetState != SPEEDBOAT_STATE_HIT && speedboatItem->Animation.Velocity.z > 5)
716 {
717 SetAnimation(laraItem, ID_SPEEDBOAT_LARA_ANIMS, collide);
718 }
719 }
720 else
721 {
722 switch (laraItem->Animation.ActiveState)
723 {
724 case SPEEDBOAT_STATE_IDLE:
725 if (IsHeld(In::Brake))
726 {
727 if (speedboatItem->Animation.Velocity.z == 0)
728 {
729 if (IsHeld(In::Right) && TestSpeedboatDismount(speedboatItem, speedboatItem->Pose.Orientation.y + ANGLE(90.0f)))
730 laraItem->Animation.TargetState = SPEEDBOAT_STATE_DISMOUNT_RIGHT;
731 else if (IsHeld(In::Left) && TestSpeedboatDismount(speedboatItem, speedboatItem->Pose.Orientation.y - ANGLE(90.0f)))
732 laraItem->Animation.TargetState = SPEEDBOAT_STATE_DISMOUNT_LEFT;
733 }
734 }
735
736 if (speedboatItem->Animation.Velocity.z > 0)
737 laraItem->Animation.TargetState = SPEEDBOAT_STATE_MOVING;
738
739 break;
740
741 case SPEEDBOAT_STATE_MOVING:
742 if (IsHeld(In::Brake))
743 {
744 if (IsHeld(In::Right))
745 laraItem->Animation.TargetState = SPEEDBOAT_STATE_DISMOUNT_RIGHT;
746 else if (IsHeld(In::Left))
747 laraItem->Animation.TargetState = SPEEDBOAT_STATE_DISMOUNT_LEFT;
748 }
749 else if (speedboatItem->Animation.Velocity.z <= 0)
750 laraItem->Animation.TargetState = SPEEDBOAT_STATE_IDLE;
751
752 break;

Callers 1

SpeedboatControlFunction · 0.85

Calls 5

GetSpeedboatInfoFunction · 0.85
SetAnimationFunction · 0.85
IsHeldFunction · 0.85
TestSpeedboatDismountFunction · 0.85
ANGLEFunction · 0.85

Tested by

no test coverage detected