Remove expandTargets and process START triggers directly
This commit is contained in:
@@ -78,8 +78,6 @@ type timelineBuilder struct {
|
|||||||
blocks map[string]Block
|
blocks map[string]Block
|
||||||
tracks []Track
|
tracks []Track
|
||||||
trackIdx map[string]int
|
trackIdx map[string]int
|
||||||
startSigs map[string][]TriggerTarget
|
|
||||||
|
|
||||||
trackCells [][]TimelineCell
|
trackCells [][]TimelineCell
|
||||||
constraints []constraint
|
constraints []constraint
|
||||||
exclusives []exclusiveGroup
|
exclusives []exclusiveGroup
|
||||||
@@ -90,7 +88,6 @@ func newTimelineBuilder(show Show) *timelineBuilder {
|
|||||||
show: show,
|
show: show,
|
||||||
blocks: map[string]Block{},
|
blocks: map[string]Block{},
|
||||||
trackIdx: map[string]int{},
|
trackIdx: map[string]int{},
|
||||||
startSigs: map[string][]TriggerTarget{},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b.tracks = append(b.tracks, Track{ID: cueTrackID, Name: "Cue"})
|
b.tracks = append(b.tracks, Track{ID: cueTrackID, Name: "Cue"})
|
||||||
@@ -105,11 +102,6 @@ func newTimelineBuilder(show Show) *timelineBuilder {
|
|||||||
}
|
}
|
||||||
b.blocks[block.ID] = block
|
b.blocks[block.ID] = block
|
||||||
}
|
}
|
||||||
for _, trigger := range show.Triggers {
|
|
||||||
if trigger.Source.Signal == "START" {
|
|
||||||
b.startSigs[trigger.Source.Block] = append(b.startSigs[trigger.Source.Block], trigger.Targets...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
b.trackCells = make([][]TimelineCell, len(b.tracks))
|
b.trackCells = make([][]TimelineCell, len(b.tracks))
|
||||||
|
|
||||||
@@ -197,17 +189,12 @@ func (b *timelineBuilder) buildCells() {
|
|||||||
|
|
||||||
func (b *timelineBuilder) buildConstraints() {
|
func (b *timelineBuilder) buildConstraints() {
|
||||||
for _, trigger := range b.show.Triggers {
|
for _, trigger := range b.show.Triggers {
|
||||||
if trigger.Source.Signal == "START" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceID := b.findCell(trigger.Source.Block, trigger.Source.Signal)
|
sourceID := b.findCell(trigger.Source.Block, trigger.Source.Signal)
|
||||||
|
|
||||||
group := exclusiveGroup{members: []cellID{sourceID}}
|
group := exclusiveGroup{members: []cellID{sourceID}}
|
||||||
hasCrossTrack := false
|
hasCrossTrack := false
|
||||||
|
|
||||||
allTargets := b.expandTargets(trigger.Targets)
|
for _, target := range trigger.Targets {
|
||||||
for _, target := range allTargets {
|
|
||||||
targetID := b.findCell(target.Block, target.Hook)
|
targetID := b.findCell(target.Block, target.Hook)
|
||||||
if sourceID.track == targetID.track {
|
if sourceID.track == targetID.track {
|
||||||
b.addConstraint("next_row", sourceID, targetID)
|
b.addConstraint("next_row", sourceID, targetID)
|
||||||
@@ -225,28 +212,6 @@ func (b *timelineBuilder) buildConstraints() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *timelineBuilder) expandTargets(targets []TriggerTarget) []TriggerTarget {
|
|
||||||
var result []TriggerTarget
|
|
||||||
seen := map[string]bool{}
|
|
||||||
queue := append([]TriggerTarget(nil), targets...)
|
|
||||||
|
|
||||||
for len(queue) > 0 {
|
|
||||||
target := queue[0]
|
|
||||||
queue = queue[1:]
|
|
||||||
if seen[target.Block] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
seen[target.Block] = true
|
|
||||||
result = append(result, target)
|
|
||||||
if target.Hook == "START" {
|
|
||||||
if chained, has := b.startSigs[target.Block]; has {
|
|
||||||
queue = append(queue, chained...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *timelineBuilder) setSignal(id cellID) {
|
func (b *timelineBuilder) setSignal(id cellID) {
|
||||||
b.trackCells[id.track][id.index].IsSignal = true
|
b.trackCells[id.track][id.index].IsSignal = true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user