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

Function CUpdateShadowImpl

Source/Objects/movementobject.cpp:3569–3636  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3567}
3568
3569static void CUpdateShadowImpl(
3570 MovementObject* mo,
3571 int& shadow_id,
3572 int& lf_shadow_id,
3573 int& rf_shadow_id,
3574 const CScriptArrayWrapper<BoneTransform>& skeleton_bind_transforms) {
3575 MovementObject& this_mo = *mo;
3576 RiggedObject& rigged_object = *this_mo.rigged_object();
3577 Skeleton& skeleton = rigged_object.skeleton();
3578
3579 int bone = ASIKBoneStart(&skeleton, "torso");
3580 BoneTransform transform = rigged_object.display_bone_matrices[bone];
3581 BoneTransform bind_matrix = invert(skeleton_bind_transforms[bone]);
3582 transform = transform;
3583 vec3 torso = transform * skeleton.points[skeleton.bones[bone].points[0]];
3584
3585 bone = ASIKBoneStart(&skeleton, "head");
3586 transform = rigged_object.display_bone_matrices[bone];
3587 bind_matrix = invert(skeleton_bind_transforms[bone]);
3588 transform = transform;
3589 vec3 head = transform * skeleton.points[skeleton.bones[bone].points[0]];
3590
3591 bone = ASIKBoneStart(&skeleton, "left_leg");
3592 transform = rigged_object.display_bone_matrices[bone];
3593 bind_matrix = invert(skeleton_bind_transforms[bone]);
3594 transform = transform;
3595 vec3 left_foot = transform * skeleton.points[skeleton.bones[bone].points[0]];
3596
3597 bone = ASIKBoneStart(&skeleton, "right_leg");
3598 transform = rigged_object.display_bone_matrices[bone];
3599 bind_matrix = invert(skeleton_bind_transforms[bone]);
3600 transform = transform;
3601 vec3 right_foot = transform * skeleton.points[skeleton.bones[bone].points[0]];
3602
3603 {
3604 if (shadow_id == -1) {
3605 shadow_id = ASCreateObject("Data/Objects/Decals/blob_shadow.xml", true);
3606 }
3607
3608 Object* shadow_obj = ReadObjectFromID(shadow_id);
3609 vec3 scale = vec3(1.5f, max(1.5f, distance((left_foot + right_foot) * 0.5f, head) * 2.0f), 1.5f);
3610 shadow_obj->SetScale(scale);
3611
3612 shadow_obj->SetTranslation(torso + vec3(0.0f, -0.3f, 0.0f));
3613 }
3614
3615 {
3616 if (lf_shadow_id == -1) {
3617 lf_shadow_id = ASCreateObject("Data/Objects/Decals/blob_shadow.xml", true);
3618 }
3619
3620 Object* shadow_obj = ReadObjectFromID(lf_shadow_id);
3621
3622 shadow_obj->SetTranslation(left_foot + vec3(0.0f));
3623 shadow_obj->SetScale(vec3(0.4f));
3624 }
3625
3626 {

Callers 1

CUpdateShadowFunction · 0.85

Calls 11

ASIKBoneStartFunction · 0.85
ASCreateObjectFunction · 0.85
ReadObjectFromIDFunction · 0.85
maxFunction · 0.85
rigged_objectMethod · 0.80
skeletonMethod · 0.80
invertFunction · 0.50
vec3Class · 0.50
distanceFunction · 0.50
SetScaleMethod · 0.45
SetTranslationMethod · 0.45

Tested by

no test coverage detected