MCPcopy Create free account
hub / github.com/WolfireGames/overgrowth / CDrawArmsImpl

Function CDrawArmsImpl

Source/Objects/movementobject.cpp:1645–1939  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1643};
1644
1645static void CDrawArmsImpl(
1646 MovementObject& this_mo,
1647 RiggedObject& rigged_object,
1648 Skeleton& skeleton,
1649 float& breath_amount,
1650 float& max_speed,
1651 float& true_max_speed,
1652 int& idle_type,
1653 bool& on_ground,
1654 bool& flip_info_flipping,
1655 float& threat_amount,
1656 bool& ledge_info_on_ledge,
1657 CScriptArray* skeleton_bind_transforms,
1658 CScriptArray* inv_skeleton_bind_transforms,
1659 CScriptArray* ik_chain_start_index,
1660 CScriptArray* ik_chain_elements,
1661 CScriptArray* ik_chain_length,
1662 CScriptArray* key_transforms,
1663 CScriptArray* arm_points,
1664 CScriptArray* old_arm_points,
1665 CScriptArray* temp_old_arm_points,
1666 CScriptArray* bone_children,
1667 CScriptArray* bone_children_index,
1668 const BoneTransform& chest_transform, const BoneTransform& l_hand_transform, const BoneTransform& r_hand_transform, int num_frames) {
1669 // Get relative chest transformation
1670 int chest_bone = ASIKBoneStart(&skeleton, "torso");
1671 BoneTransform chest_frame_matrix = rigged_object.animation_frame_bone_matrices[chest_bone];
1672 BoneTransform chest_bind_matrix = *(BoneTransform*)skeleton_bind_transforms->At(chest_bone);
1673 BoneTransform rel_mat = chest_transform * invert(chest_frame_matrix * chest_bind_matrix);
1674
1675 // Get points in arm IK chain transformed by chest
1676 float upper_arm_length[2];
1677 float upper_arm_weight[2];
1678 float lower_arm_length[2];
1679 float lower_arm_weight[2];
1680 vec3 chain_points[kNumArmPoints * 2];
1681
1682 for (int right = 0; right < 2; ++right) {
1683 int chain_start = *(int*)ik_chain_start_index->At(kLeftArmIK + right);
1684 vec3 hand = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 0), 1);
1685 vec3 wrist = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 0), 0);
1686 vec3 elbow = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 2), 0);
1687 vec3 shoulder = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 4), 0);
1688 vec3 collar_tip = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 5), 1);
1689 vec3 collar = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 5), 0);
1690
1691 // Get more metrics about arm lengths
1692 upper_arm_length[right] = distance(elbow, shoulder);
1693 lower_arm_length[right] = distance(wrist, elbow);
1694
1695 vec3 mid_low_arm = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 1), 0);
1696 vec3 mid_up_arm = GetTransformedBonePoint(&rigged_object, *(int*)ik_chain_elements->At(chain_start + 3), 0);
1697
1698 lower_arm_weight[right] = distance(elbow, mid_low_arm) / distance(wrist, elbow);
1699 upper_arm_weight[right] = distance(shoulder, mid_up_arm) / distance(shoulder, elbow);
1700
1701 BoneTransform world_chest = *(BoneTransform*)key_transforms->At(kChestKey) * *(BoneTransform*)inv_skeleton_bind_transforms->At(*(int*)ik_chain_start_index->At(kTorsoIK));
1702 vec3 breathe_dir = world_chest.rotation * normalize(vec3(0.0f, -0.3f, 1.0f));

Callers 2

CDrawArmsFunction · 0.85
CDrawFinalBoneIKFunction · 0.85

Calls 15

ASIKBoneStartFunction · 0.85
GetTransformedBonePointFunction · 0.85
ASMultFunction · 0.85
maxFunction · 0.85
RotateBoneToMatchVecFunction · 0.85
GetNumBoneChildrenFunction · 0.85
GetCharScaleMethod · 0.80
GetStatusKeyValueMethod · 0.80
invertFunction · 0.50
distanceFunction · 0.50
normalizeFunction · 0.50

Tested by

no test coverage detected