CocoClass = require 'lib/CocoClass' module.exports = class ScriptModule extends CocoClass scrubbingTime = 0 movementTime = 0 constructor: (@noteGroup, @view) -> super() if not @noteGroup.prepared @analyzeNoteGroup(noteGroup) @noteGroup.notes ?= [] @noteGroup.prepared = true # subclass should overwrite these @neededFor: -> false startNotes: -> [] endNotes: -> [] skipNotes: -> @endNotes() # common logic analyzeNoteGroup: -> # some notes need to happen after others. Calculate the delays @movementTime = @calculateMovementMax(@noteGroup) @scrubbingTime = @noteGroup.playback?.scrub?.duration or 0 calculateMovementMax: -> sums = {} for sprite in @noteGroup.sprites continue unless sprite.move? sums[sprite.id] ?= 0 sums[sprite.id] += sprite.move.duration sums = (sums[k] for k of sums) Math.max(0, sums...) maybeApplyDelayToNote: (note) -> note.delay = (@scrubbingTime + @movementTime) or 0