Exemples
Chacun est un script complet : collez-le dans l’onglet Script d’une cue, cochez Activé, et appuyez sur Compiler.
Dire ce que fait la cue
function onStart() {
log.info('démarrée, elle dure', this.duration.get(), 'secondes');
}
function onEnd() {
log.info('terminée après', time.toFixed(2), 'secondes');
}
Baisser un son en cours de route
Une cue sonore qui tombe au quart de son niveau au bout de dix secondes, et remonte cinq secondes plus tard.
function onStart() {
after(10, function () {
this.level.set(0.25);
});
after(15, function () {
this.level.set(1);
});
}
Faire un fondu à la main
onTick reçoit les secondes écoulées depuis la frame précédente : une rampe
est donc un cumul. (Pour un simple fondu d’ouverture, le réglage Fondu
d’ouverture de la cue suffit — c’est la forme à copier quand la rampe n’est
pas linéaire.)
const DUREE = 3;
let ecoule = 0;
function onTick(delta) {
if (ecoule >= DUREE) return;
ecoule += delta;
const t = Math.min(1, ecoule / DUREE);
this.level.set(1 - (1 - t) * (1 - t));
}
Faire clignoter un texte
every donne son numéro de tour au callback, ce qui rend l’alternance triviale.
function onStart() {
every(0.4, function (index) {
this.textColor.set(index % 2 === 0 ? '#ff2d2d' : '#ffffff');
});
}
Un décompte à l’écran
const DEPART = 10;
function onStart() {
this.text.set(String(DEPART));
every(1, function (index) {
const reste = DEPART - (index + 1);
this.text.set(reste > 0 ? String(reste) : 'GO');
});
}
Faire dériver un titre
offsetX est une fraction de la largeur de sortie : le texte traverse d’un
bord à l’autre en vingt secondes.
const VITESSE = 0.05; // fractions de la largeur par seconde
function onStart() {
this.offsetX.set(-0.5);
}
function onTick(delta) {
const suivant = this.offsetX.get() + VITESSE * delta;
this.offsetX.set(Math.min(0.5, suivant));
}
Faire respirer une image
function onTick() {
this.brightness.set(1 + Math.sin(time * 2) * 0.3);
}
Désaturer une vidéo au fil de sa lecture
function onTick() {
const total = this.duration.get();
if (!total) return; // elle ne s'arrête jamais seule : rien à quoi se comparer
this.saturation.set(1 - Math.min(1, time / total));
}
Une couleur au hasard à chaque battement
function onStart() {
every(0.5, function () {
this.textColor.set(random.color({ saturation: [0.6, 1], value: 1 }));
});
}
Faire trembler un texte
function onTick() {
const secousse = random.vec2(-0.01, 0.01);
this.offsetX.set(secousse.x);
this.offsetY.set(secousse.y);
}
Suivre une liste de lecture
let dernier = 0;
function onTick() {
const index = this.index.get();
if (index !== dernier && index !== 0) {
dernier = index;
log.info('élément', index, 'sur', this.count.get(), '— passage', this.pass.get());
}
}
N’agir que quelques fois
function onStart() {
every(5, function (index) {
if (index > 2) return; // trois tours, puis plus rien
log.info('rappel', index + 1);
});
}
Se protéger d’une propriété absente
Pratique quand le même script est collé sur plusieurs types de cue.
function onStart() {
if (this.mirrorX) this.mirrorX.set(true);
if (this.audioLevel) this.audioLevel.set(0.5);
}
Tirer une phrase au hasard, sans répéter la précédente
const PHRASES = ['Ouverture des portes', 'Cinq minutes', 'En place', 'Rideau'];
let derniere = null;
function onStart() {
every(4, function () {
let phrase = random.element(PHRASES);
while (PHRASES.length > 1 && phrase === derniere) phrase = random.element(PHRASES);
derniere = phrase;
this.text.set(phrase);
});
}