Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/A/ActorMotionFeedbackOutput.h
T
andrew 65553a0c61 Drive proxy cadence from measured motion
Tie proxy locomotion/cadence to actual per-frame movement and motion-feedback instead of only replaying transmitted Speed.

Changes:
- docs/dev-log.md: add detailed dev log describing measured-cadence fix and cadence/animationSpeed work.
- plugin/include/F4TProxyPuppet.h: added NiPoint3 include and new API: SetProxyLocomotionState, SetProxyDesiredSpeed (legacy alias), and ApplyProxyLocomotionFrame.
- plugin/lib/commonlibf4/include/RE/A/ActorMotionFeedbackOutput.h: new tentative struct for motion-feedback output.
- plugin/lib/commonlibf4/include/RE/Fallout.h: include new ActorMotionFeedbackOutput header.
- plugin/src/F4TProxyActorController.cpp: track per-frame timing/puppet state, compute frame delta, use proxy->Move() with measured frameDelta and call ApplyProxyLocomotionFrame (instead of SetPosition/Lerp-only), and pass measured graph speed/direction to proxy.
- plugin/src/F4TProxyAnimationSync.cpp: use SetProxyLocomotionState to include direction when writing proxy locomotion state.
- plugin/src/F4TProxyPuppet.cpp: introduce ProxyLocomotionState map, sync controller motion fields, compute/push engine motion-feedback (via Compute/Update feedback vtable calls), use UpdateNoAI + manual motion feedback to drive cadence, implement ApplyProxyLocomotionFrame which derives velocity from world delta, clamps/chooses feedback speed (uses measured horizontal speed unless provided graph speed is valid), applies an idle threshold (<8 u/s -> idle), and writes graph speed back to the animation graph.

Why: This makes foot cadence reflect on-screen translation (eliminating mild foot slide/stop-overstay) by measuring applied displacement each frame, updating controller velocity/motion-feedback, and re-asserting animation graph inputs after UpdateNoAI.
2026-06-04 21:39:26 +12:00

18 lines
623 B
C++

#pragma once
namespace RE
{
// Tentative layout for the output of Actor::ComputeMotionFeedbackSpeedAndDirection /
// Actor::UpdateFeedbackGraphSpeedAndDirection. Only speed + direction are required
// for the graph feedback write path; extra padding guards against struct growth.
class ActorMotionFeedbackOutput
{
public:
float speed{ 0.0F }; // 00 - locomotion graph speed (world units/sec scale)
float direction{ 0.0F }; // 04 - facing / movement direction (radians)
float field08{ 0.0F }; // 08
float field0C{ 0.0F }; // 0C
};
static_assert(sizeof(ActorMotionFeedbackOutput) == 0x10);
}