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

Function CDisplayMatrixUpdateImpl

Source/Objects/movementobject.cpp:2012–2063  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2010#define rigged_object_RotateBoneToMatchVec(A, B, C) (RotateBoneToMatchVec(&rigged_object, A, B, C))
2011
2012static void CDisplayMatrixUpdateImpl(
2013 MovementObject* mo,
2014 float breath_amount,
2015 const CScriptArrayWrapper<int>& ik_chain_start_index,
2016 const CScriptArrayWrapper<int>& ik_chain_elements,
2017 const CScriptArrayWrapper<BoneTransform>& skeleton_bind_transforms,
2018 const CScriptArrayWrapper<BoneTransform>& inv_skeleton_bind_transforms) {
2019 MovementObject& this_mo = *mo;
2020 RiggedObject& rigged_object = *this_mo.rigged_object();
2021
2022 float scale = rigged_object.GetCharScale();
2023 int chest_bone = ik_chain_elements[ik_chain_start_index[kTorsoIK]];
2024 BoneTransform world_chest = BoneTransform(rigged_object.display_bone_matrices[chest_bone]) * inv_skeleton_bind_transforms[chest_bone];
2025 vec3 breathe_dir = world_chest.rotation * normalize(vec3(0, 0, 1));
2026 vec3 breathe_front = world_chest.rotation * normalize(vec3(0, 1, 0));
2027 vec3 breathe_side = world_chest.rotation * normalize(vec3(1, 0, 0));
2028
2029 for (int i = 0; i < 2; ++i) {
2030 int collar_bone = ik_chain_elements[ik_chain_start_index[kLeftArmIK + i] + 5];
2031 BoneTransform collar = BoneTransform(rigged_object.display_bone_matrices[collar_bone]) * inv_skeleton_bind_transforms[collar_bone];
2032 collar.origin += breathe_dir * breath_amount * 0.01f * scale;
2033 collar.origin += breathe_front * breath_amount * 0.01f * scale;
2034 collar = collar * skeleton_bind_transforms[collar_bone];
2035 rigged_object.display_bone_matrices[collar_bone] = collar.GetMat4();
2036
2037 int shoulder_bone = ik_chain_elements[ik_chain_start_index[kLeftArmIK + i] + 4];
2038 BoneTransform shoulder = BoneTransform(rigged_object.display_bone_matrices[shoulder_bone]) * inv_skeleton_bind_transforms[shoulder_bone];
2039 shoulder.origin += breathe_dir * breath_amount * 0.002f * scale;
2040 shoulder = shoulder * skeleton_bind_transforms[shoulder_bone];
2041 rigged_object.display_bone_matrices[shoulder_bone] = shoulder.GetMat4();
2042 }
2043
2044 world_chest.origin += breathe_dir * breath_amount * 0.01f * scale;
2045 world_chest.origin += breathe_front * breath_amount * 0.01f * scale;
2046 world_chest.rotation = quaternion(vec4(breathe_side.x(), breathe_side.y(), breathe_side.z(), breath_amount * 0.05f)) * world_chest.rotation;
2047 world_chest = world_chest * skeleton_bind_transforms[chest_bone];
2048 rigged_object.display_bone_matrices[chest_bone] = world_chest.GetMat4();
2049
2050 int abdomen_bone = ik_chain_elements[ik_chain_start_index[kTorsoIK] + 1];
2051 BoneTransform abdomen = BoneTransform(rigged_object.display_bone_matrices[abdomen_bone]) * inv_skeleton_bind_transforms[abdomen_bone];
2052 abdomen.origin += breathe_dir * breath_amount * 0.008f * scale;
2053 abdomen.origin += breathe_front * breath_amount * 0.005f * scale;
2054 abdomen.rotation = quaternion(vec4(breathe_side.x(), breathe_side.y(), breathe_side.z(), breath_amount * -0.02f)) * abdomen.rotation;
2055 abdomen = abdomen * skeleton_bind_transforms[abdomen_bone];
2056 rigged_object.display_bone_matrices[abdomen_bone] = abdomen.GetMat4();
2057
2058 int neck_bone = ik_chain_elements[ik_chain_start_index[kHeadIK] + 1];
2059 BoneTransform neck = BoneTransform(rigged_object.display_bone_matrices[neck_bone]) * inv_skeleton_bind_transforms[neck_bone];
2060 neck.origin += breathe_dir * breath_amount * 0.005f * scale;
2061 neck = neck * skeleton_bind_transforms[neck_bone];
2062 rigged_object.display_bone_matrices[neck_bone] = neck.GetMat4();
2063}
2064
2065static void CDisplayMatrixUpdate(MovementObject* mo) {
2066 PROFILER_ZONE(g_profiler_ctx, "C++ Display Matrix Update")

Callers 1

CDisplayMatrixUpdateFunction · 0.85

Calls 11

BoneTransformClass · 0.85
rigged_objectMethod · 0.80
GetCharScaleMethod · 0.80
GetMat4Method · 0.80
quaternionClass · 0.70
normalizeFunction · 0.50
vec3Class · 0.50
vec4Class · 0.50
xMethod · 0.45
yMethod · 0.45
zMethod · 0.45

Tested by

no test coverage detected