Allow multiple time-limited blocks per track per cue
This commit is contained in:
@@ -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{
|
||||||
|
|||||||
Reference in New Issue
Block a user