fix(camera): port retail offset adjustment laws

This commit is contained in:
Erik 2026-08-31 05:42:23 +02:00
parent cb22691beb
commit 90eba0ec3c
7 changed files with 212 additions and 61 deletions

View file

@ -177,7 +177,7 @@ public sealed class CameraPointerInputControllerTests
}
[Fact]
public void ChaseMouseWheel_RetainsExtendedZoomOutRange()
public void ChaseMouseWheel_UsesRetailMultiplicativeZoomAndComponentLimit()
{
var fixture = Create([new RawSurface()]);
var legacy = new ChaseCamera();
@ -187,21 +187,24 @@ public sealed class CameraPointerInputControllerTests
fixture.Chase.Retail = retail;
fixture.Camera.EnterChaseMode(legacy, retail);
float before = CameraDiagnostics.UseRetailChaseCamera
? retail.Distance
: legacy.Distance;
fixture.Owner.HandleScroll(InputAction.ScrollDown);
float afterOne = CameraDiagnostics.UseRetailChaseCamera
? retail.Distance
: legacy.Distance;
for (int i = 0; i < 100; i++)
bool savedRetail = CameraDiagnostics.UseRetailChaseCamera;
try
{
CameraDiagnostics.UseRetailChaseCamera = true;
float before = retail.Distance;
fixture.Owner.HandleScroll(InputAction.ScrollDown);
float afterMany = CameraDiagnostics.UseRetailChaseCamera
? retail.Distance
: legacy.Distance;
float afterOne = retail.Distance;
for (int i = 0; i < 100; i++)
fixture.Owner.HandleScroll(InputAction.ScrollDown);
Assert.Equal(before + 0.8f, afterOne, 5);
Assert.Equal(40f, afterMany, 5);
Assert.Equal(before * (1f + 0.8f * RetailChaseCamera.OffsetScalePerAdjustment), afterOne, 5);
Assert.True(retail.Distance < 10.5f);
Assert.True(retail.Distance > 8f);
}
finally
{
CameraDiagnostics.UseRetailChaseCamera = savedRetail;
}
}
private static Fixture Create(IReadOnlyList<RawSurface> surfaces)