Timeline semântica
Apresente o journal de uma rolagem com explosões, rerolls, descartes, classificações e progresso.
Este artigo documenta a V2 publicada. Para a prévia atual com física, veja o guia V3. V3 ↗ Licenças ↗
displayTimeline() recebe um journal já resolvido. Cada dado em dice define identidade, lados e tema; as faces surgem dos eventos roll e reroll. O View valida o journal inteiro antes de limpar a cena.
const result = await viewer.displayTimeline({
id: 'explosao-1',
mode: 'physics',
dice: [
{ id: 'root', sides: 6 },
{ id: 'child', sides: 6 }
],
events: [
{ sequence: 1, type: 'roll', subject: 'die', dieId: 'root', parentDieId: null, rollIndex: 1, sourceNodeId: 'n1', value: 6 },
{ sequence: 2, type: 'roll', subject: 'die', dieId: 'child', parentDieId: 'root', rollIndex: 1, sourceNodeId: 'n1', value: 4 },
{ sequence: 3, type: 'explode', subject: 'die', dieId: 'root', parentDieId: null, rollIndex: 1, sourceNodeId: 'n1', childDieId: 'child', value: 4, reason: 'explode' }
]
})
console.log(result.eventCount, result.phaseCount, result.degraded)
Tipos de evento
Todos os eventos têm sequence positiva e estritamente crescente, dieId, parentDieId, rollIndex e sourceNodeId; subject pode ser 'die'.
type |
Campos próprios | Efeito apresentado |
|---|---|---|
roll |
value |
Revela a primeira face do dado |
reroll |
from, to, reason |
Muda a face após nova rolagem; reason é reroll, reroll-once, unique ou unique-once |
explode |
childDieId, value, reason |
Introduz um dado filho; reason é explode, compound ou penetrate |
transform |
from, to, reason |
Ajuste semântico; reason é minimum, maximum, penetrate ou compound |
include |
contribution |
Inclui a contribuição do dado |
exclude |
reason |
Marca descarte; reason é drop, keep ou compound-absorbed |
classify |
outcome |
Destaca success, failure, neutral, critical-success ou critical-failure |
O validador verifica IDs, referências, rolls iniciais, linhagem, ciclos e transições. Não fabrique uma timeline a partir de valores finais sem reconstruir essas relações. Quando o Core fornece um journal, passe dados e eventos correspondentes juntos.
compound e penetrate podem produzir valores sem face física correspondente. O View mantém a face válida e mostra o ajuste por badge; não fabrica uma nova face. minimum e maximum ajustam o estado sem uma coreografia própria.
Efeitos configuráveis
await viewer.updateOptions({
timeline: {
maxDurationMs: 16_000,
effects: {
explode: { origin: 'source', burstHeight: 1.6, spread: 0.8 },
reroll: { style: 'hop', hopHeight: 2.2 },
criticalSuccess: { pulses: 2 },
compound: { showBadge: true }
}
}
})
Cada efeito aceita enabled, delayMs, durationMs, intensity (0..1) e color. Há controles para explode, compound, penetrate, reroll, unique, keep, drop, success, failure, neutral, criticalSuccess e criticalFailure. reroll/unique aceitam estilo hop, edge ou spin; explode aceita origem source ou edge; efeitos críticos aceitam pulses; compound/penetrate aceitam showBadge. O merge de updateOptions() é profundo por efeito.
timeline.enabled começa em true; maxEvents em 500, maxDurationMs em 12000 e phaseGapMs em 180. Se a timeline estiver desativada ou exceder o orçamento, o View apresenta o estado final de forma plana e retorna degraded: true. Desligar um efeito remove sua coreografia, sem modificar a face ou o resultado.
Sincronize a UI com a cena
const viewer = new DiceResultViewer({
container: '#dice-stage',
onTimelineProgress(progress) {
renderSubtotal(progress.dice)
console.log(progress.stage, progress.completedEventSequences)
}
})
O snapshot imutável informa stage (initial, phase, complete), phaseIndex, phaseCount, phaseId, effect, revealedDieIds, dados visíveis { id, value, discarded } e sequências concluídas. Em physics, um filho de explosão pode ser liberado assim que o pai estabilizar, antes dos outros dados da fase. Na apresentação plana degradada, só há initial e complete. Exceções no callback são isoladas.
displayTimeline() retorna dice, durationMs, eventCount, phaseCount e degraded. Diferente de display(), falhas gráficas, de asset ou físicas são propagadas; uma execução parcial não é reportada como sucesso.