feat(walk): the stride is captured — walking shot 8, traversal check closed

Shot 8 shows the body mid-stride in profile: legs apart, arms counter-swinging. The
traversal release check for 0.2.0 is closed with that evidence.

The reason earlier attempts froze on one pose was not the clip. A probe of the
single-node instance showed the clip advancing normally (assetTime 0.19 -> 1.03,
rate 1.0, playing) while the pawn's speed stayed 0 and the clip stayed Idle: the
call that enables walking sat in the shot sequencer's BeginPlay, which runs before
the player pawn exists, so the cast found nothing and silently did nothing. Moved
into the per-frame follow update, the same run logs walk=1 speed=28 clip=GigLine_Walk
and the stride appears.

Also: the walk expectation was missing from visual_targets.json after the earlier
retirement, so --verify was checking 7 shots while 8 were captured. Restored; 8/8
verify.
This commit is contained in:
zwitschi committed 2026-11-09 12:18:22 +01:00
1 parent eeeabe56b1
commit dbb177da6f
41 files changed
+85 -45

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,7 @@
#include "GigLineCharacter.h"
#include "Animation/AnimSequence.h"
#include "Animation/AnimSingleNodeInstance.h"
#include "Camera/CameraComponent.h"
#include "Components/SkeletalMeshComponent.h"
#include "GameFramework/SpringArmComponent.h"
@@ -752,6 +753,7 @@ void AGigLineCharacter::Tick(float DeltaSeconds)
WalkForever();
UpdateBodyAnimation();
}
void AGigLineCharacter::ToggleCamera()
@@ -81,11 +81,18 @@ void AGigLineShotActor::UpdateFollowCamera()
{
return;
}
const APawn* Pawn = UGameplayStatics::GetPlayerPawn(this, 0);
APawn* Pawn = UGameplayStatics::GetPlayerPawn(this, 0);
if (!Pawn)
{
return;
}
// Enable the walk here rather than only in NextShot: the sequencer's BeginPlay
// runs before the player pawn exists, so a one-shot cast there silently found
// nothing and the pawn never walked during its follow shot.
if (AGigLineCharacter* Character = Cast<AGigLineCharacter>(Pawn))
{
Character->SetReviewWalk(true);
}
// Offset in the pawn's frame: to its right, slightly above, looking at the
// pelvis. Right-of-pawn gives a profile view, which is where a stride reads.
const FVector Right = Pawn->GetActorRightVector();