Стабилизировать посадку на лифт уровня 10

This commit is contained in:
2026-08-18 04:20:31 +03:00
parent de0f8b891f
commit a87e6cd62b
5 changed files with 50 additions and 22 deletions
@@ -108,9 +108,9 @@ public final class LateLevelPlaythroughTest {
}
@Test
public void masteryProcessionSurvivesThrottledFinalRelayDecisions() {
public void masteryProcessionSurvivesThrottledFinalTraversalDecisions() {
try (ActivityScenario<MainActivity> activity = ActivityScenario.launch(MainActivity.class)) {
GameDriver driver = GameDriver.withFinalRelayDelay(activity, 96L);
GameDriver driver = GameDriver.withFinalTraversalDelay(activity, 96L);
LevelPlaytestBot.Result result = new LevelPlaytestBot().run(
driver,
@@ -130,33 +130,33 @@ public final class LateLevelPlaythroughTest {
private final Instrumentation instrumentation;
private final GameView gameView;
private final long minimumDecisionMillis;
private final boolean throttleFinalRelayOnly;
private final boolean throttleFinalTraversalOnly;
private GameView.AutomationSnapshot lastSnapshot;
private GameDriver(Instrumentation instrumentation, GameView gameView,
long minimumDecisionMillis, boolean throttleFinalRelayOnly) {
long minimumDecisionMillis, boolean throttleFinalTraversalOnly) {
this.instrumentation = instrumentation;
this.gameView = gameView;
this.minimumDecisionMillis = minimumDecisionMillis;
this.throttleFinalRelayOnly = throttleFinalRelayOnly;
this.throttleFinalTraversalOnly = throttleFinalTraversalOnly;
}
static GameDriver from(ActivityScenario<MainActivity> activity) {
return create(activity, 32L, false);
}
static GameDriver withFinalRelayDelay(ActivityScenario<MainActivity> activity,
long minimumDecisionMillis) {
static GameDriver withFinalTraversalDelay(ActivityScenario<MainActivity> activity,
long minimumDecisionMillis) {
return create(activity, minimumDecisionMillis, true);
}
private static GameDriver create(ActivityScenario<MainActivity> activity,
long minimumDecisionMillis,
boolean throttleFinalRelayOnly) {
boolean throttleFinalTraversalOnly) {
GameView[] view = new GameView[1];
activity.onActivity(current -> view[0] = current.gameViewForAutomation());
return new GameDriver(InstrumentationRegistry.getInstrumentation(), view[0],
minimumDecisionMillis, throttleFinalRelayOnly);
minimumDecisionMillis, throttleFinalTraversalOnly);
}
@Override
@@ -182,15 +182,14 @@ public final class LateLevelPlaythroughTest {
@Override
public void waitForNextDecision(long millis) {
try {
boolean inFinalRelayWindow = throttleFinalRelayOnly
boolean inFinalTraversalWindow = throttleFinalTraversalOnly
&& lastSnapshot != null
&& lastSnapshot.levelNumber() == 10
&& lastSnapshot.deaths() == 3
&& lastSnapshot.playerX() >= 1_200f
&& lastSnapshot.playerX() <= 1_700f;
Thread.sleep(inFinalRelayWindow
? Math.max(millis, minimumDecisionMillis)
: millis);
&& lastSnapshot.playerX() <= 2_200f;
Thread.sleep(inFinalTraversalWindow
? Math.max(millis, minimumDecisionMillis) : millis);
} catch (InterruptedException interrupted) {
Thread.currentThread().interrupt();
throw new AssertionError("Late-level bot interrupted", interrupted);
@@ -206,7 +206,7 @@ final class LateLevelScenarios {
snapshot -> snapshot.playerAlive()
&& snapshot.playerY() >= 770f
&& !Float.isNaN(snapshot.firstMovingPlatformY())
&& snapshot.firstMovingPlatformY() >= 740f)
&& snapshot.firstMovingPlatformY() >= 780f)
.step("Take off toward the moving lift", 1_000L,
LevelPlaytestBot.Input.rightJump(),
snapshot -> snapshot.playerAlive() && snapshot.playerY() <= 670f)