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

Function DelAlignLaraToRope

TombEngine/Objects/Generic/Object/rope.cpp:732–833  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

730 }
731
732 void DelAlignLaraToRope(ItemInfo* item)
733 {
734 ROPE_STRUCT* rope;
735 short ropeY;
736 Vector3i vec, vec2, vec3, vec4, vec5, pos, pos2, diff, diff2;
737 int matrix[12];
738 short angle[3];
739
740 vec.x = 4096;
741 vec.y = 0;
742 vec.z = 0;
743
744 const auto& offset = GetClosestKeyframe(*item).RootOffset;
745 ropeY = Lara.Control.Rope.Y - ANGLE(90.0f);
746 rope = &Ropes[Lara.Control.Rope.Ptr];
747
748 GetRopePos(rope, ((Lara.Control.Rope.Segment - 1) << 7) + offset.y, &pos.x, &pos.y, &pos.z);
749 GetRopePos(rope, ((Lara.Control.Rope.Segment - 1) << 7) + offset.y - 192, &pos2.x, &pos2.y, &pos2.z);
750
751 diff.x = (pos.x - pos2.x) << 16;
752 diff.y = (pos.y - pos2.y) << 16;
753 diff.z = (pos.z - pos2.z) << 16;
754 NormaliseRopeVector(&diff);
755 diff.x >>= 2;
756 diff.y >>= 2;
757 diff.z >>= 2;
758 ScaleVector(&diff, DotProduct(&vec, &diff), &vec2);
759 vec2.x = vec.x - vec2.x;
760 vec2.y = vec.y - vec2.y;
761 vec2.z = vec.z - vec2.z;
762
763 vec3.x = vec2.x;
764 vec3.y = vec2.y;
765 vec3.z = vec2.z;
766 vec4.x = vec2.x;
767 vec4.y = vec2.y;
768 vec4.z = vec2.z;
769
770 diff2.x = diff.x;
771 diff2.y = diff.y;
772 diff2.z = diff.z;
773
774 ScaleVector(&vec3, 16384 * phd_cos(ropeY), &vec3);
775 ScaleVector(&diff2, DotProduct(&diff2, &vec2), &diff2);
776 ScaleVector(&diff2, 4096 - 16384 * phd_cos(ropeY), &diff2);
777
778 CrossProduct(&diff, &vec2, &vec4);
779 ScaleVector(&vec4, 16384 * phd_sin(ropeY), &vec4);
780 diff2.x += vec3.x;
781 diff2.y += vec3.y;
782 diff2.z += vec3.z;
783
784 vec2.x = (diff2.x + vec4.x) << 16;
785 vec2.y = (diff2.y + vec4.y) << 16;
786 vec2.z = (diff2.z + vec4.z) << 16;
787 NormaliseRopeVector(&vec2);
788 vec2.x >>= 2;
789 vec2.y >>= 2;

Callers 2

RopeCollisionFunction · 0.85
AnimateItemFunction · 0.85

Calls 10

ANGLEFunction · 0.85
GetRopePosFunction · 0.85
NormaliseRopeVectorFunction · 0.85
ScaleVectorFunction · 0.85
DotProductFunction · 0.85
phd_cosFunction · 0.85
CrossProductFunction · 0.85
phd_sinFunction · 0.85
phd_GetMatrixAnglesFunction · 0.85
TO_RADFunction · 0.85

Tested by

no test coverage detected