Remove reference validity checks, set cue track at load time, remove getTrack()

This commit is contained in:
Ian Gulliver
2026-02-20 08:29:56 -07:00
parent 2b5644419b
commit dc2551542b

View File

@@ -100,6 +100,9 @@ func newTimelineBuilder(show Show) *timelineBuilder {
b.trackIdx[track.ID] = i + 1 b.trackIdx[track.ID] = i + 1
} }
for _, block := range show.Blocks { for _, block := range show.Blocks {
if block.Type == "cue" {
block.Track = cueTrackID
}
b.blocks[block.ID] = block b.blocks[block.ID] = block
} }
for _, trigger := range show.Triggers { for _, trigger := range show.Triggers {
@@ -128,23 +131,9 @@ func BuildTimeline(show Show) (Timeline, error) {
} }
func (b *timelineBuilder) addConstraint(kind string, a, b2 cellID) { func (b *timelineBuilder) addConstraint(kind string, a, b2 cellID) {
if a.track < 0 || b2.track < 0 {
return
}
b.constraints = append(b.constraints, constraint{kind: kind, a: a, b: b2}) b.constraints = append(b.constraints, constraint{kind: kind, a: a, b: b2})
} }
func (b *timelineBuilder) getTrack(blockID string) string {
block, ok := b.blocks[blockID]
if !ok {
return ""
}
if block.Type == "cue" {
return cueTrackID
}
return block.Track
}
func getCueCells(block Block) []TimelineCell { func getCueCells(block Block) []TimelineCell {
return []TimelineCell{{ return []TimelineCell{{
BlockID: block.ID, BlockID: block.ID,
@@ -164,27 +153,23 @@ func getBlockCells(block Block) []TimelineCell {
} }
func (b *timelineBuilder) findCell(blockID, event string) cellID { func (b *timelineBuilder) findCell(blockID, event string) cellID {
trackID := b.getTrack(blockID) track := b.trackIdx[b.blocks[blockID].Track]
if trackID == "" {
return cellID{-1, -1}
}
track := b.trackIdx[trackID]
for i, c := range b.trackCells[track] { for i, c := range b.trackCells[track] {
if !c.IsGap && c.BlockID == blockID && c.Event == event { if !c.IsGap && c.BlockID == blockID && c.Event == event {
return cellID{track: track, index: i} return cellID{track: track, index: i}
} }
} }
return cellID{-1, -1} panic("cell not found: " + blockID + " " + event)
} }
func (b *timelineBuilder) endChainsSameTrack(blockID string) bool { func (b *timelineBuilder) endChainsSameTrack(blockID string) bool {
trackID := b.getTrack(blockID) trackID := b.blocks[blockID].Track
for _, trigger := range b.show.Triggers { for _, trigger := range b.show.Triggers {
if trigger.Source.Block != blockID || trigger.Source.Signal != "END" { if trigger.Source.Block != blockID || trigger.Source.Signal != "END" {
continue continue
} }
for _, target := range trigger.Targets { for _, target := range trigger.Targets {
if target.Hook == "START" && b.getTrack(target.Block) == trackID { if target.Hook == "START" && b.blocks[target.Block].Track == trackID {
return true return true
} }
} }
@@ -193,12 +178,9 @@ func (b *timelineBuilder) endChainsSameTrack(blockID string) bool {
} }
func (b *timelineBuilder) buildCells() { func (b *timelineBuilder) buildCells() {
for _, block := range b.show.Blocks { for _, sb := range b.show.Blocks {
trackID := b.getTrack(block.ID) block := b.blocks[sb.ID]
if trackID == "" { idx := b.trackIdx[block.Track]
continue
}
idx := b.trackIdx[trackID]
var cells []TimelineCell var cells []TimelineCell
switch block.Type { switch block.Type {
case "cue": case "cue":
@@ -220,9 +202,6 @@ func (b *timelineBuilder) buildConstraints() {
} }
sourceID := b.findCell(trigger.Source.Block, trigger.Source.Signal) sourceID := b.findCell(trigger.Source.Block, trigger.Source.Signal)
if sourceID.track < 0 {
continue
}
group := exclusiveGroup{members: []cellID{sourceID}} group := exclusiveGroup{members: []cellID{sourceID}}
hasCrossTrack := false hasCrossTrack := false
@@ -230,9 +209,6 @@ func (b *timelineBuilder) buildConstraints() {
allTargets := b.expandTargets(trigger.Targets) allTargets := b.expandTargets(trigger.Targets)
for _, target := range allTargets { for _, target := range allTargets {
targetID := b.findCell(target.Block, target.Hook) targetID := b.findCell(target.Block, target.Hook)
if targetID.track < 0 {
continue
}
if sourceID.track == targetID.track { if sourceID.track == targetID.track {
b.addConstraint("next_row", sourceID, targetID) b.addConstraint("next_row", sourceID, targetID)
} else { } else {
@@ -272,9 +248,6 @@ func (b *timelineBuilder) expandTargets(targets []TriggerTarget) []TriggerTarget
} }
func (b *timelineBuilder) setSignal(id cellID) { func (b *timelineBuilder) setSignal(id cellID) {
if id.track < 0 {
return
}
b.trackCells[id.track][id.index].IsSignal = true b.trackCells[id.track][id.index].IsSignal = true
} }