chore: Preprocess transitions conditions on initialization (#11150) bb52cbd4a3

Preprocess transitions conditions on initialization

Co-authored-by: hernan <hernan@rive.app>
This commit is contained in:
bodymovin
2025-11-25 21:41:25 +00:00
parent 3099ce30d3
commit 6b31f1020a
25 changed files with 1319 additions and 608 deletions

View File

@@ -1664,4 +1664,43 @@ TEST_CASE("Advance two consecutive blend modes and apply view model",
artboard->draw(renderer.get());
CHECK(silver.matches("advance_blend_mode-vms"));
}
}
TEST_CASE("Test State machine transition conditions based on artboards",
"[silver]")
{
SerializingFactory silver;
auto file =
ReadRiveFile("assets/transition_artboard_condition_test.riv", &silver);
auto artboard = file->artboardDefault();
REQUIRE(artboard != nullptr);
silver.frameSize(artboard->width(), artboard->height());
auto stateMachine = artboard->stateMachineAt(0);
int viewModelId = artboard.get()->viewModelId();
auto vmi = viewModelId == -1
? file->createViewModelInstance(artboard.get())
: file->createViewModelInstance(viewModelId, 0);
stateMachine->bindViewModelInstance(vmi);
stateMachine->advanceAndApply(0.0f);
auto renderer = silver.makeRenderer();
artboard->draw(renderer.get());
silver.addFrame();
stateMachine->advanceAndApply(0.016f);
artboard->draw(renderer.get());
int frames = (int)(1.0f / 0.016f);
for (int i = 0; i < frames; i++)
{
silver.addFrame();
stateMachine->advanceAndApply(0.016f);
artboard->draw(renderer.get());
}
CHECK(silver.matches("transition_artboard_condition_test"));
}