Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
4346d08
Merge remote-tracking branch 'origin/development' into fix-field-batt…
ShoT-UPfps Jul 23, 2026
8fda871
Synchronize field battle horse animations
ShoT-UPfps Jul 23, 2026
5fd6fc7
Synchronize stationary mount turning animations
ShoT-UPfps Jul 23, 2026
89d3849
Animate authoritative stationary mount turns
ShoT-UPfps Jul 23, 2026
99f9034
Retain mount facing through stop transitions
ShoT-UPfps Jul 23, 2026
b1bb684
Merge development into field battle animation fix
ShoT-UPfps Jul 30, 2026
31ad385
Invalidate mount skeleton wrappers
ShoT-UPfps Jul 30, 2026
4fb8ec8
Drive stationary horse turns through movement input
ShoT-UPfps Jul 30, 2026
51d7cc7
Avoid engine initialization in mount action helpers
ShoT-UPfps Jul 30, 2026
87537d7
Make cavalry live-test holds deterministic
ShoT-UPfps Jul 30, 2026
fe2ef5c
Suspend cavalry AI during test holds
ShoT-UPfps Jul 30, 2026
e62f5ff
End synthetic mount turns after facing stabilizes
ShoT-UPfps Jul 30, 2026
3416818
Cap cavalry speed during stationary turn test
ShoT-UPfps Jul 30, 2026
29fb5f6
Stage stationary cavalry turns directly
ShoT-UPfps Jul 30, 2026
e183ddc
Stage stationary turns with scripted AI
ShoT-UPfps Jul 30, 2026
0479aab
Drive authoritative stationary horse turns
ShoT-UPfps Jul 30, 2026
3bba029
Replay stationary horse turn animations
ShoT-UPfps Jul 30, 2026
7b5b5bc
Focus live evidence on cavalry mounts
ShoT-UPfps Jul 30, 2026
9ca5f12
Frame remote cavalry evidence at rendered height
ShoT-UPfps Jul 30, 2026
c61e1f9
Blend synthetic mount turn transitions
ShoT-UPfps Jul 30, 2026
2930413
Capture rendered mount pose transitions
ShoT-UPfps Jul 30, 2026
b3c4b4f
Replay remote mount turns after native ticks
ShoT-UPfps Jul 30, 2026
99c7045
Make small cavalry turn fixture deterministic
ShoT-UPfps Jul 30, 2026
f9c00c4
Use mount direction in turn fixture
ShoT-UPfps Jul 30, 2026
dd1b100
Drive turn fixture through movement facing
ShoT-UPfps Jul 30, 2026
8117f46
Constrain turn fixture to small facing change
ShoT-UPfps Jul 30, 2026
6f9f44e
Preserve mount turn baseline through idle pulses
ShoT-UPfps Jul 30, 2026
2e406f6
Keep stationary mount turns on one animation timeline
ShoT-UPfps Jul 31, 2026
804bea0
Keep stationary horse turns on one visual timeline
ShoT-UPfps Jul 31, 2026
a0017ea
Keep live evidence cameras on replicated mounts
ShoT-UPfps Jul 31, 2026
9f2bf9a
Target live cameras at rendered mount positions
ShoT-UPfps Jul 31, 2026
53f4536
Freeze held cavalry mounts with their riders
ShoT-UPfps Jul 31, 2026
083df12
Attach live camera to rendered mounts
ShoT-UPfps Jul 31, 2026
94004b8
Reuse rendered mount evidence camera
ShoT-UPfps Jul 31, 2026
1c75f90
Keep mount camera state read-only
ShoT-UPfps Jul 31, 2026
ba2b253
Merge development into field battle animation fix
ShoT-UPfps Aug 1, 2026
d766141
Avoid native camera equality in E2E ticks
ShoT-UPfps Aug 1, 2026
e00cc43
Address field battle animation review feedback
ShoT-UPfps Aug 1, 2026
55abb1c
Preserve existing mount action playback updates
ShoT-UPfps Aug 1, 2026
0393e23
Keep mount regressions in existing E2E cases
ShoT-UPfps Aug 1, 2026
50a37ec
Merge remote-tracking branch 'origin/development' into fix-field-batt…
ShoT-UPfps Aug 1, 2026
8765f7c
Merge remote-tracking branch 'origin/development' into fix-field-batt…
ShoT-UPfps Aug 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions source/E2E.Tests/Environment/MockEngine/MirrorAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ public sealed class MirrorAgent
public float LastSetActionBlendInPeriod { get; set; }
public float LastSetActionStartProgress { get; set; }
public bool LastSetActionForceFaceMorphRestart { get; set; }
public float Action0Speed { get; set; } = 1f;
public int SetCurrentActionSpeedCalls { get; set; }
public bool HasVisualSkeleton { get; set; }
public int SkeletonAction0Index { get; set; } = -1;
public int SkeletonAction1Index { get; set; } = -1;
Expand All @@ -100,6 +102,7 @@ public sealed class MirrorAgent
public int AdvanceExistingRawVisualActionCalls { get; set; }
public int InstallRawVisualActionCalls { get; set; }
public int InstallAgentVisualActionCalls { get; set; }
public float LastAgentVisualActionBlendPeriodOverride { get; set; }
public Agent.MovementControlFlag DefendMovementFlag { get; set; }
public int SetWeaponGuardCalls { get; set; }
public Agent.UsageDirection LastSetWeaponGuardDirection { get; set; } =
Expand Down
17 changes: 17 additions & 0 deletions source/E2E.Tests/Environment/MockEngine/MissionEngineFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ public MissionEngineFixture()
Prefix(typeof(Agent), nameof(Agent.GetCurrentAnimationFlag), nameof(Agent_GetCurrentAnimationFlag));
Prefix(typeof(Agent), nameof(Agent.GetCurrentActionProgress), nameof(Agent_GetCurrentActionProgress));
Prefix(typeof(Agent), nameof(Agent.SetCurrentActionProgress), nameof(Agent_SetCurrentActionProgress));
Prefix(typeof(Agent), nameof(Agent.SetCurrentActionSpeed), nameof(Agent_SetCurrentActionSpeed));
Prefix(typeof(Agent), nameof(Agent.SetActionChannel), nameof(Agent_SetActionChannel));
Prefix(typeof(Agent), "get_MovementFlags", nameof(Agent_get_MovementFlags));
Prefix(typeof(Agent), "set_MovementFlags", nameof(Agent_set_MovementFlags));
Expand Down Expand Up @@ -877,12 +878,27 @@ private static bool Agent_SetCurrentActionProgress(
return false;
}

private static bool Agent_SetCurrentActionSpeed(
Agent __instance,
int channelNo,
float speed)
{
if (!AgentMirror.TryGet(__instance, out var m)) return true;
if (channelNo == 0)
{
m.Action0Speed = speed;
m.SetCurrentActionSpeedCalls++;
}
return false;
}

private static bool Agent_SetActionChannel(
Agent __instance,
int channelNo,
ref ActionIndexCache actionIndexCache,
bool ignorePriority,
AnimFlags additionalFlags,
float actionSpeed,
float blendInPeriod,
float startProgress,
bool forceFaceMorphRestart,
Expand Down Expand Up @@ -924,6 +940,7 @@ private static bool Agent_SetActionChannel(
m.Action0Index = actionIndexCache.Index;
m.Action0Flags = additionalFlags;
m.Action0Progress = startProgress;
m.Action0Speed = actionSpeed;
if (m.HasVisualSkeleton)
{
m.SkeletonAction0Index = actionIndexCache.Index;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,45 @@ public bool HasVisibleAction(
|| rawVisualAction >= 0;
}

public bool TrySetAction(
Agent agent,
int channel,
in ActionIndexCache action,
float progress,
float blendPeriodOverride)
{
if (!AgentMirror.TryGet(agent, out MirrorAgent mirror)
|| !mirror.HasVisualSkeleton)
{
return false;
}

if (channel == 0)
{
if (mirror.SkeletonAction0Index != action.Index)
{
mirror.InstallAgentVisualActionCalls++;
mirror.LastAgentVisualActionBlendPeriodOverride =
blendPeriodOverride;
}
mirror.SkeletonAction0Index = action.Index;
mirror.RawVisualAction0Progress = progress;
}
else
{
if (mirror.SkeletonAction1Index != action.Index)
{
mirror.InstallAgentVisualActionCalls++;
mirror.LastAgentVisualActionBlendPeriodOverride =
blendPeriodOverride;
}
mirror.SkeletonAction1Index = action.Index;
mirror.RawVisualAction1Progress = progress;
}

return true;
}

private static int GetAnimationIndex(
MirrorAgent mirror,
int actionIndex)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,7 @@ public void MasterlessHorsePacket_DrivesThePuppetHorse()
remoteMirror.LookDirection = new Vec3(0f, 1f, 0f);
remoteMirror.MovementDirection = new Vec2(0.6f, 0.8f);
remoteMirror.InputVector = new Vec2(0.3f, 0.7f);
remoteMirror.RealGlobalVelocity = new Vec3(3f, 4f, 0f);

var packet = new MountMovementPacket(new[] { horseId }, new[] { new AgentMountData(remoteHorse) });
component.AgentMovementHandler.MountMovementApplier.HandlePacket(null, packet);
Expand Down
Loading
Loading