Refactor JunctionFiller logic to improve eligibility and rolling mechanics
ci / build-backend (push) Successful in 1m21s
ci / build-frontend (push) Successful in 40s
ci / tests (push) Successful in 1m27s
ci / sonar (push) Successful in 4m6s

Updated the JunctionFiller class to adjust the eligibility criteria for junction elements, ensuring that the roll for chance is determined after the selection of a variant. Enhanced the Passes method to exclude the rolling logic, which now occurs in a separate Rolls method. This change clarifies the flow of decision-making in junctions and ensures that the chance of the selected variant is accurately represented. Additionally, introduced new tests to validate the updated rolling behavior and its impact on junction processing.
This commit is contained in:
Leonid Pershin
2026-07-30 22:12:46 +03:00
parent 926a20020f
commit de48317f7d
7 changed files with 370 additions and 266 deletions
+8
View File
@@ -532,6 +532,14 @@ JunctionElement
непрерывный отрезок позиций (иначе неясно, куда встаёт выбранная), обязательность и условия
относятся к развилке целиком.
**Жребий бросается после выбора варианта, а не до.** Порядок здесь и есть смысл настройки: развилка
из пяти заставок с `chance = 60` — это «заставка в шести случаях из десяти, каждый раз разная».
Бросай кубик за каждую врезку отдельно, и получилось бы «какая-нибудь заставка почти всегда»
(1 0,4⁵ ≈ 99 %). Поэтому сначала отсекают условия (смена шоу, интервал, окно суток, круглый час),
потом развилка схлопывается в один вариант по весам, и уже он бросает единственный жребий своим
`chance`. Разные шансы у вариантов допустимы и означают ровно то, что написано: сыграет шанс
выбранного.
Оба жребия — `chance` и выбор внутри развилки — берутся из seed генерации (4.4), а не из живого
`Random`. Иначе пересборка хвоста тасовала бы врезки на каждое применение, и диф из 6.6 показывал бы
изменения там, где ничего не менялось.