Skip to content

Commit 0301b58

Browse files
authored
Merge pull request #109 from SuperFlyTV/fix/duplicate-bug
Fix: Bug when referencing a colliding object
2 parents b5bbb84 + a0da1cc commit 0301b58

File tree

2 files changed

+63
-16
lines changed

2 files changed

+63
-16
lines changed

src/__tests__/basic.spec.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1929,6 +1929,65 @@ describeVariants(
19291929
},
19301930
})
19311931
})
1932+
1933+
test('Object colliding with its start reference', () => {
1934+
const tl0 = fixTimeline([
1935+
{
1936+
id: 'A',
1937+
priority: 0, // Putting this above 0.05 avoids the issue
1938+
enable: {
1939+
start: 5000,
1940+
duration: 1,
1941+
},
1942+
layer: 'L1',
1943+
classes: ['class0'],
1944+
content: {},
1945+
},
1946+
{
1947+
id: 'B',
1948+
enable: {
1949+
while: '.class0',
1950+
},
1951+
priority: 1,
1952+
layer: 'L0',
1953+
content: {},
1954+
},
1955+
1956+
{
1957+
id: 'C',
1958+
priority: 0,
1959+
enable: {
1960+
start: 1000,
1961+
},
1962+
layer: 'L1',
1963+
classes: ['class0'],
1964+
content: {},
1965+
},
1966+
1967+
{
1968+
id: 'D',
1969+
priority: 0.05,
1970+
enable: {
1971+
start: '#C.start',
1972+
},
1973+
layer: 'L1',
1974+
classes: ['class0'],
1975+
content: {},
1976+
},
1977+
])
1978+
1979+
const sample = 5000
1980+
1981+
const resolved = resolveTimeline(tl0, { time: sample, cache: getCache() })
1982+
1983+
// const obj0 = resolved.objects['new_part_obj']
1984+
// const obj1 = resolved.objects['lookahead_future0']
1985+
1986+
// console.log('obj0', JSON.stringify(obj0, undefined, '\t'))
1987+
// console.log('obj1', JSON.stringify(obj1, undefined, '\t'))
1988+
1989+
getResolvedState(resolved, sample)
1990+
})
19321991
},
19331992
{
19341993
normal: true,

src/resolver/ResolvedTimelineHandler.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -178,23 +178,11 @@ export class ResolvedTimelineHandler<TContent extends Content = Content> {
178178
)
179179
}
180180

181-
// Collect and reset all objects that depend on previously changed objects
182-
const conflictObjectsToResolve: ResolvedTimelineObject[] = []
183-
for (const obj of this.objectsToReResolve.values()) {
181+
// Re-resolve all objects that might have changed (due to conflicts):
182+
const conflictObjectsToResolve: ResolvedTimelineObject[] = Array.from(this.objectsToReResolve.values())
183+
for (const obj of conflictObjectsToResolve) {
184184
this.objectResolveCount++
185-
186-
// Force a new resolve, since the referenced objects might have changed (due to conflicts):
187-
let needsConflictResolve = false
188-
if (!obj.resolved.resolvedReferences) {
189-
this.resolveTimelineObj(obj)
190-
needsConflictResolve = true
191-
}
192-
if (!obj.resolved.resolvedConflicts) {
193-
needsConflictResolve = true
194-
}
195-
if (needsConflictResolve) {
196-
conflictObjectsToResolve.push(obj)
197-
}
185+
this.resolveTimelineObj(obj)
198186
}
199187
if (this._resolveError) return // Abort on error
200188

0 commit comments

Comments
 (0)