Allow multiple time-limited blocks per track per cue

This commit is contained in:
Ian Gulliver
2026-02-21 22:30:04 -08:00
parent 7a125c0bc9
commit c830709976

View File

@@ -82,6 +82,7 @@ func GenerateMockShow(numTracks, numScenes, avgCuesPerScene, avgBlocksPerCue int
block *Block block *Block
trackIdx int trackIdx int
sameTrackOnly bool sameTrackOnly bool
fromEnded bool
} }
triggerIdx := map[TriggerSource]*Trigger{} triggerIdx := map[TriggerSource]*Trigger{}
@@ -117,22 +118,19 @@ func GenerateMockShow(numTracks, numScenes, avgCuesPerScene, avgBlocksPerCue int
hook = "FADE_OUT" hook = "FADE_OUT"
} }
cueTargets = append(cueTargets, TriggerTarget{Block: blk.ID, Hook: hook}) cueTargets = append(cueTargets, TriggerTarget{Block: blk.ID, Hook: hook})
chainFrom = append(chainFrom, chainable{block: blk, trackIdx: trackIdx, sameTrackOnly: true}) chainFrom = append(chainFrom, chainable{block: blk, trackIdx: trackIdx, sameTrackOnly: true, fromEnded: true})
delete(needsEnd, trackIdx) delete(needsEnd, trackIdx)
} }
usedTracks := map[int]bool{}
var newChainFrom []chainable
blocksThisCue := 1 + rng.IntN(avgBlocksPerCue*2) blocksThisCue := 1 + rng.IntN(avgBlocksPerCue*2)
for range blocksThisCue { for range blocksThisCue {
trackIdx := rng.IntN(numTracks) trackIdx := rng.IntN(numTracks)
if usedTracks[trackIdx] { if needsEnd[trackIdx] != nil {
continue continue
} }
block := randBlock(trackIdx) block := randBlock(trackIdx)
show.Blocks = append(show.Blocks, block) show.Blocks = append(show.Blocks, block)
usedTracks[trackIdx] = true
triggered := false triggered := false
for i, c := range chainFrom { for i, c := range chainFrom {
@@ -171,11 +169,18 @@ func GenerateMockShow(numTracks, numScenes, avgCuesPerScene, avgBlocksPerCue int
if !block.hasDefinedTiming() { if !block.hasDefinedTiming() {
needsEnd[trackIdx] = block needsEnd[trackIdx] = block
} else { } else {
newChainFrom = append(newChainFrom, chainable{block: block, trackIdx: trackIdx}) chainFrom = append(chainFrom, chainable{block: block, trackIdx: trackIdx, sameTrackOnly: true})
} }
} }
chainFrom = newChainFrom filtered := chainFrom[:0]
for _, c := range chainFrom {
if !c.fromEnded {
c.sameTrackOnly = false
filtered = append(filtered, c)
}
}
chainFrom = filtered
if len(cueTargets) > 0 { if len(cueTargets) > 0 {
show.Triggers = append(show.Triggers, &Trigger{ show.Triggers = append(show.Triggers, &Trigger{