Place blocks on random tracks, chain via lastOnTrack

This commit is contained in:
Ian Gulliver
2026-02-20 21:29:16 -07:00
parent ac259bb7a0
commit 99f79e82f3

View File

@@ -100,37 +100,28 @@ func GenerateMockShow(numTracks, numCues, numBlocks int) *Show {
show.Blocks = append(show.Blocks, cue) show.Blocks = append(show.Blocks, cue)
cueIdx++ cueIdx++
tracksThisCue := numTracks - rng.IntN(2) blocksThisCue := 1 + rng.IntN(numTracks*2)
perm := rng.Perm(numTracks)
cueTargets := []TriggerTarget{} cueTargets := []TriggerTarget{}
for _, trackIdx := range perm[:tracksThisCue] { for range blocksThisCue {
if placed >= numBlocks { if placed >= numBlocks {
break break
} }
trackIdx := rng.IntN(numTracks)
if prev := lastOnTrack[trackIdx]; prev != nil && !prev.hasDefinedTiming() {
continue
}
block := randBlock(trackIdx) block := randBlock(trackIdx)
show.Blocks = append(show.Blocks, block) show.Blocks = append(show.Blocks, block)
cueTargets = append(cueTargets, TriggerTarget{Block: block.ID, Hook: "START"})
placed++ placed++
if prev := lastOnTrack[trackIdx]; prev != nil {
lastOnTrack[trackIdx] = block
chainLen := rng.IntN(3)
for range chainLen {
if placed >= numBlocks {
break
}
if !lastOnTrack[trackIdx].hasDefinedTiming() {
break
}
next := randBlock(trackIdx)
show.Blocks = append(show.Blocks, next)
show.Triggers = append(show.Triggers, &Trigger{ show.Triggers = append(show.Triggers, &Trigger{
Source: TriggerSource{Block: lastOnTrack[trackIdx].ID, Signal: "END"}, Source: TriggerSource{Block: prev.ID, Signal: "END"},
Targets: []TriggerTarget{{Block: next.ID, Hook: "START"}}, Targets: []TriggerTarget{{Block: block.ID, Hook: "START"}},
}) })
lastOnTrack[trackIdx] = next } else {
placed++ cueTargets = append(cueTargets, TriggerTarget{Block: block.ID, Hook: "START"})
} }
lastOnTrack[trackIdx] = block
} }
if len(cueTargets) > 0 { if len(cueTargets) > 0 {