Place blocks on random tracks, chain via lastOnTrack
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user